<?xml version="1.0"?>
<?xml-stylesheet type="text/css" href="http://wiki.jackslab.org/skins/common/feed.css?303"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="zh-cn">
		<id>http://wiki.jackslab.org/index.php?action=history&amp;feed=atom&amp;title=Arduino_memory</id>
		<title>Arduino memory - 版本历史</title>
		<link rel="self" type="application/atom+xml" href="http://wiki.jackslab.org/index.php?action=history&amp;feed=atom&amp;title=Arduino_memory"/>
		<link rel="alternate" type="text/html" href="http://wiki.jackslab.org/index.php?title=Arduino_memory&amp;action=history"/>
		<updated>2026-10-15T07:23:52Z</updated>
		<subtitle>本wiki的该页面的版本历史</subtitle>
		<generator>MediaWiki 1.19.2</generator>

	<entry>
		<id>http://wiki.jackslab.org/index.php?title=Arduino_memory&amp;diff=2702&amp;oldid=prev</id>
		<title>Comcat：以“以 Arduino 的主力单片机 ATMEGA 系列，片内一般有如下三部分可用存储资源  &lt;pre&gt; Flash memory (Program Space) SRAM (Data memory) EEPROM &lt;/pre&gt; ...”为内容创建页面</title>
		<link rel="alternate" type="text/html" href="http://wiki.jackslab.org/index.php?title=Arduino_memory&amp;diff=2702&amp;oldid=prev"/>
				<updated>2014-06-25T09:04:05Z</updated>
		
		<summary type="html">&lt;p&gt;以“以 Arduino 的主力单片机 ATMEGA 系列，片内一般有如下三部分可用存储资源  &amp;lt;pre&amp;gt; Flash memory (Program Space) SRAM (Data memory) EEPROM &amp;lt;/pre&amp;gt; ...”为内容创建页面&lt;/p&gt;
&lt;p&gt;&lt;b&gt;新页面&lt;/b&gt;&lt;/p&gt;&lt;div&gt;以 Arduino 的主力单片机 ATMEGA 系列，片内一般有如下三部分可用存储资源&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Flash memory (Program Space)&lt;br /&gt;
SRAM (Data memory)&lt;br /&gt;
EEPROM&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
ATMEG 168 这三部分存储空间的大小为：&lt;br /&gt;
&lt;br /&gt;
* Flash    16KB&lt;br /&gt;
* SRAM     1KB&lt;br /&gt;
* EEPROM   512B&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
ATMEG 328 这三部分存储空间的大小为：&lt;br /&gt;
&lt;br /&gt;
* Flash    32KB&lt;br /&gt;
* SRAM     2KB&lt;br /&gt;
* EEPROM   1KB&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;C 环境下编译的全局变量和常量，编译器都处理中 data memory 中&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
若要将这些存储于 program space 则：&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=cpp&amp;gt;&lt;br /&gt;
#include &amp;lt;avr/pgmspace.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
char str1[] PROGMEM = {&lt;br /&gt;
&amp;quot;&amp;lt;html&amp;gt;&amp;lt;hr&amp;gt;&amp;lt;hd&amp;gt;&amp;lt;/html&amp;gt;\r\n&amp;quot;&lt;br /&gt;
&amp;quot;&amp;lt;html2&amp;gt;&amp;lt;hr&amp;gt;&amp;lt;hd&amp;gt;&amp;lt;/html&amp;gt;&amp;quot;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
char str2[] PROGMEM = &amp;quot;12346788&amp;quot;;&lt;br /&gt;
char str3[] PROGMEM = &amp;quot;hahahahah&amp;quot;;&lt;br /&gt;
char str4[] PROGMEM = &amp;quot;fuckfuck&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
PGM_P str_table[] PROGMEM = {&lt;br /&gt;
	str1,&lt;br /&gt;
	str2,&lt;br /&gt;
	str3,&lt;br /&gt;
	str4&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
void setup()&lt;br /&gt;
{&lt;br /&gt;
	Serial.begin(9600);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void loop()&lt;br /&gt;
{&lt;br /&gt;
	char buf[128];&lt;br /&gt;
&lt;br /&gt;
	for(uint8_t i = 0; i &amp;lt; 4; i++)&lt;br /&gt;
	{&lt;br /&gt;
		strcpy_P(buf, (PGM_P)pgm_read_word(&amp;amp;(str_table[i])));&lt;br /&gt;
		Serial.println(buf);&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
        delay(5000);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
注意：data memory 的空间不能分配太大，比如上面的 buf[] 为 buf[256] 的话，栈就会溢出，输出结果不可知。不管 char buf[256] 定义在函数内还是函数外（类似 C 全局变量的）输出结果都不可知&lt;br /&gt;
&lt;br /&gt;
单个 char str[] PROGMEM 的长度最好不要超过 200&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
有关 AVR 体系上内存的使用 Tips 可参考这个不错的文档 &amp;lt;Tips and Tricks to Optimize&lt;br /&gt;
Your C Code for 8-bit AVR Microcontrollers&amp;gt; [http://www.atmel.com/Images/doc8453.pdf]&lt;br /&gt;
&lt;br /&gt;
更多的 [http://www.nongnu.org/avr-libc/user-manual/mem_sections.html memory sections] [http://www.nongnu.org/avr-libc/user-manual/malloc.html Memory Areas and Using malloc()]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;/div&gt;</summary>
		<author><name>Comcat</name></author>	</entry>

	</feed>