博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
ESP8266—“ICACHE_FLASH_ATTR”宏——解释含义
阅读量:4656 次
发布时间:2019-06-09

本文共 711 字,大约阅读时间需要 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 。

转载于:https://www.cnblogs.com/CodeWorkerLiMing/p/11256391.html

你可能感兴趣的文章
帝国CMS判断会员是否登录及登录后才能看到内容的方法
查看>>
使用三大框架实现文件的上传及下载
查看>>
理解 HTTP2.0
查看>>
小米手机安装mitmproxy证书
查看>>
毕业季,致青春
查看>>
hdu多校1002 Balanced Sequence
查看>>
简要分析webpack打包后代码
查看>>
js中级第四天
查看>>
mysql 指令
查看>>
【转载】COM 组件设计与应用(六)——用 ATL 写第一个组件
查看>>
使用python处理文件
查看>>
语法制导翻译——语义分析
查看>>
Android中自定义实现高德地图图层效果的源码
查看>>
报错解决
查看>>
虚检、漏检
查看>>
git使用
查看>>
Android-SharedPreferences用法
查看>>
去除TFS版本控制
查看>>
JS学习笔记2015-4-16(第三天)
查看>>
form表单及实际应用
查看>>