ESP8266—“ICACHE_FLASH_ATTR”宏
问:
ESP8266_NONOS_SDK中ICACHE_FLASH_ATTR宏的用途是什么?我看到它取决于ICACHE_FLASH,但我不知道何时应该定义该符号。
什么时候需要包括它?
答:
对于ESP8266_NONOS_SDK,
用ICACHE_FLASH_ATTR编译的函数编译到IROM部分; 对于这些功能,CPU执行指令高速缓存中的代码。
相反,系统启动时没有ICACHE_FLASH_ATTR的函数加载到IRAM中。因此,使用ICACHE_FLASH_ATTR有助于降低IRAM要求。
不要在中断处理程序中使用ICACHE_FLASH_ATTR函数,因为它可能与闪存R / W操作冲突。
对于ESP8266_RTOS_SDK
在此SDK中,我们已将I-cache的执行作为默认模式。因此,只有需要从IRAM运行的函数才能用IRAM_ATTR进行修饰。
换句话说,要从I-cache执行的函数不需要用ICACHE_FLASH_ATTR进行修饰。它们默认继承这个特性,除非它们用IRAM_ATTR修饰。
问:
为什么ESP8266_NONOS_SDK中有的函数前面添加了“ICACHE_FLASH_ATTR”宏?我们应该如何使用它呢?
答:
对于ESP8266_NONOS_SDK
添加了“ICACHE_FLASH_ATTR”宏的函数,将存放在IROM中,CPU仅在调用到它们的时候,将它们读到缓存中运行;
没有添加“ICACHE_FLASH_ATTR”宏的函数,将在一开始上电运行时,就加载到IRAM中运行;
由于空间有限,我们无法将所有代码都一次性加载到IRAM中运行,因此在大部分函数前添加“ICACHE_FLASH_ATTR”宏,放在IROM中。
请注意,不要在中断处理函数中调用带有
对于ESP8266_RTOS_SDK
函数默认存放在IROM中,无需再添加“ICACHE_FLASH_ATTR”宏。
中断处理函数也可以定义在IROM中。
如果开发者需要将一些频繁调用的函数定义在IRAM中,在函数前添加“IRAM_ATTR”宏即可。
相关文章
- 车载ECU在OTA升级过程中,flash driver单独存在的意义
- ROM, FLASH和RAM的区别
- openwrt设置uboot环境变量在flash上的存储地址
- 《ADOBE FLASH PROFESSIONAL CC标准培训教材》——2.6 属性
- 《网页美工设计Photoshop+Flash+Dreamweaver从入门到精通》——1.7 不同色彩的网页
- 《Adobe Flash CS6中文版经典教程》——1.8 在Flash 中撤销执行的步骤
- 《Adobe Flash Professional CC经典教程》——1.4 了解“时间轴”
- 《网站建设与网页设计从入门到精通Dreamweaver+Flash+Photoshop+HTML+CSS+JavaScript》——3.4 编辑文本格式
- 《ADOBE FLASH PROFESSIONAL CS6 标准培训教材》——2.3 工具面板
- 《Adobe Flash CS5中文版经典教程》——1.10 发布影片
- flash 动画转gif在网页中使用的兼容性处理方法
- 【ESP8266之SDK开发】二、实现串口打印Hello Esp8266
- 微软发布《安全情报报告20卷》精简报告:90%恶意网页发现于Flash
- DELPHI、FLASH、AS3、FLEX使用Protobuf(google Protocol Buffers)的具体方法