esp8266 ICACHE_RAM_ATTR
时间: 2023-08-17 11:13:24 浏览: 279
esp8266的AT固件
引用\[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* [ESP8266 中 cache 和 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 ]
阅读全文