zoukankan      html  css  js  c++  java
  • 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”宏即可。

  • 相关阅读:
    Python冒泡排序(4)
    Python冒泡排序(3)
    Python3默认递归最大深度是998
    Python利用递归函数和列表推导式实现快速排序
    天池比赛的文章--欢迎大家交流
    caffe学习笔记1
    网络压缩系列1:低秩逼近
    yolov1
    Windows下用Caffe跑自己的数据(遥感影像)
    基于灰度共生矩阵的纹理提取
  • 原文地址:https://www.cnblogs.com/CodeWorkerLiMing/p/11256375.html
Copyright © 2011-2022 走看看