美文网首页
ESP8266—“ICACHE_FLASH_ATTR”宏

ESP8266—“ICACHE_FLASH_ATTR”宏

作者: 昨天剩下的一杯冷茶 | 来源:发表于2019-09-25 10:41 被阅读0次

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

    相关文章

      网友评论

          本文标题:ESP8266—“ICACHE_FLASH_ATTR”宏

          本文链接:https://www.haomeiwen.com/subject/pegiyctx.html