查看Arduino memory的源代码
←
Arduino memory
跳转到:
导航
,
搜索
因为以下原因,你没有权限编辑本页:
您刚才请求的操作只有这个用户组中的用户才能使用:
用户
您可以查看并复制此页面的源代码:
以 Arduino 的主力单片机 ATMEGA 系列,片内一般有如下三部分可用存储资源 <pre> Flash memory (Program Space) SRAM (Data memory) EEPROM </pre> ATMEG 168 这三部分存储空间的大小为: * Flash 16KB * SRAM 1KB * EEPROM 512B ATMEG 328 这三部分存储空间的大小为: * Flash 32KB * SRAM 2KB * EEPROM 1KB <b>C 环境下编译的全局变量和常量,编译器都处理中 data memory 中</b> 若要将这些存储于 program space 则: <source lang=cpp> #include <avr/pgmspace.h> char str1[] PROGMEM = { "<html><hr><hd></html>\r\n" "<html2><hr><hd></html>" }; char str2[] PROGMEM = "12346788"; char str3[] PROGMEM = "hahahahah"; char str4[] PROGMEM = "fuckfuck"; PGM_P str_table[] PROGMEM = { str1, str2, str3, str4 }; void setup() { Serial.begin(9600); } void loop() { char buf[128]; for(uint8_t i = 0; i < 4; i++) { strcpy_P(buf, (PGM_P)pgm_read_word(&(str_table[i]))); Serial.println(buf); } delay(5000); } </source> 注意:data memory 的空间不能分配太大,比如上面的 buf[] 为 buf[256] 的话,栈就会溢出,输出结果不可知。不管 char buf[256] 定义在函数内还是函数外(类似 C 全局变量的)输出结果都不可知 单个 char str[] PROGMEM 的长度最好不要超过 200 有关 AVR 体系上内存的使用 Tips 可参考这个不错的文档 <Tips and Tricks to Optimize Your C Code for 8-bit AVR Microcontrollers> [http://www.atmel.com/Images/doc8453.pdf] 更多的 [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()] <br><br><br><br><br> <br><br><br><br><br> <br><br><br><br><br>
返回到
Arduino memory
。
个人工具
登录
名字空间
页面
讨论
变换
查看
阅读
查看源代码
查看历史
操作
搜索
导航
首页
社区专页
新闻动态
最近更改
随机页面
帮助
工具箱
链入页面
相关更改
特殊页面