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”宏即可。

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

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
引用\[1\]中提到了在使用ESP8266编程时出现的问题,即出现了"ISR not in IRAM"的错误。根据引用\[1\]中的描述,这个问题的解决方法是在定义中断程序时使用ICACHE_RAM_ATTR属性来定义,这样可以确保中断程序在RAM中执行。如果没有定义这个属性,程序在调用时可能会崩溃。 引用\[2\]和引用\[3\]提供了关于ESP8266的编译选项的说明。在编译选项"-ffunction-sections"打开的情况下,函数的默认属性为".text"。具有".text"属性的函数将被放置在.irom0.text或.text段中。根据引用\[2\]和引用\[3\]的描述,ESP8266的SDK默认将iRAM中的一部分空间用作iram或cache。iram用于存放flash中的代码,而cache用于存放spi flash中的代码。因此,如果在编写与flash相关的代码时,需要将其放置在iram中,否则可能会导致崩溃。 综上所述,ICACHE_RAM_ATTR是一个用于定义中断程序在RAM中执行的属性,而ESP8266的编译选项可以控制函数代码的存放位置,包括iram和cache。在编写ESP8266程序时,需要注意这些属性和选项,以确保程序的正常运行。 #### 引用[.reference_title] - *1* [ESP8266和MPU6050使用外部中断](https://blog.csdn.net/weixin_44481398/article/details/108419892)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insert_down28v1,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* *3* [ESP8266cache 和 iram 一点理解](https://blog.csdn.net/ustccw/article/details/84721188)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insert_down28v1,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值