博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
esp8266代码中的存储标记
阅读量:6259 次
发布时间:2019-06-22

本文共 661 字,大约阅读时间需要 2 分钟。

const uint8 MyArr[1024] ICACHE_RODATA_ATTR = {0};void MyFun() ICACHE_FLASH_ATTR {}

这种 ICACHE 开头的宏作的用就是因为esp8266的ram有限,所以在启动的时候就不可能把所有的数据都载入ram,只能是先载入必要的数据,其他数据保留在Flash中,在需要的时候读取。esp8266的固件有5个有效段,分别是:.data,.rodata,.bss,.text,.irom0.text,(这些都是从编译好的elf文件中提取的)其中 .data,.rodata,.bss,.text 这四个段在启动的时候被载入内存,.irom0.text 则通过内存映射的方式访问,不会占用宝贵的ram。所以不是必要的数据都可以装入 .irom0.text 这个段中以节省ram占用。另外需要注意的是,任何中断函数都不可以存放在 .irom0.text 中,会crash!!!

#define ICACHE_FLASH_ATTR __attribute__((section(".irom0.text")))#define ICACHE_RODATA_ATTR __attribute__((section(".irom.text")))

这两个宏就是告诉编译器数据的保存位置。变量用 ICACHE_RODATA_ATTR ,(切记变量必须是 const 类型的),函数用 ICACHE_FLASH_ATTR 。

esp8266交流群:295814941

转载地址:http://tvhsa.baihongyu.com/

你可能感兴趣的文章
Android开发教程 --- 数据存储 SQLite
查看>>
北大acm1006
查看>>
大数据环境下的数据质量管理策略
查看>>
vue中使用monaco-editor打包文件混乱的问题
查看>>
下载PhantomJS
查看>>
iOS自定义字体及类目
查看>>
lvs
查看>>
BeautifulSoup学习心得(一)
查看>>
20159208《网络攻防实践》第三周学习总结
查看>>
统计信号处理-简单看看克拉美罗界
查看>>
201621123048《java程序设计》第一周学习总结
查看>>
(转)C#中 特性(attribute)的用法
查看>>
IEnumerable.GetEnumerator Method
查看>>
android上的.9.png图片文件
查看>>
最大连续子序列和的问题
查看>>
【转】程序员中"5%神话";刘未鹏:为什么你应该写博客
查看>>
Ubuntu新装系统要装软件
查看>>
解决pathForResource返回nil, 无法读取plist文件问题
查看>>
Http Servlet详解及学习地址
查看>>
ORACLE数据库学习之备份与恢复
查看>>