问:
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”宏的更多相关文章

  1. ESP8266—“ICACHE_FLASH_ATTR”宏——解释含义

    const uint8 MyArr[1024] ICACHE_RODATA_ATTR = {0}; void MyFun() ICACHE_FLASH_ATTR { } 这种 ICACHE 开头的宏作 ...

  2. ESP8266 NONOS SDK学习

    一.概况 1.存储 ESP8266 带有 160 KB 的 RAM,其中 64 KB 为 iRAM,96 KB 为 dRAM.iRAM 进一步 分成两块:32 KB iRAM 块运行标有 IRAM_A ...

  3. ESP8266代码中的存储标记

    const uint8 MyArr[1024] ICACHE_RODATA_ATTR = {0}; void MyFun() ICACHE_FLASH_ATTR { } 这种 ICACHE 开头的宏作 ...

  4. 聊聊ESP8266的SDK(ESP8266_RTOS_SDK v3.3 环境搭建)

    ESP8266_RTOS_SDK发行版本v3.3-rc1环境搭建 在大学期间玩8266所接触的都无操作系统版本的SDK,但后来接触了ESP32后发现ESP8266也推出了RTOS版本,一直都没来得及去 ...

  5. 【002:ESP8266 移植 Mqtt 】

    系统环境: ubuntu 16.04 64bitSDK版本: esp_iot_sdk_v1.3.0记录时间: 2016年10月13日联系方式: yexiaopeng1992@126.com 背景:在E ...

  6. ESP8266学习笔记1:怎样在安信可全功能測试板上实现ESP-01的编译下载和调试

    近期调试用到了安信可的ESP-01模块,最终打通了编译下载调试的整个通道,有一些细节须要记录,方便兴许的开发工作. 转载请注明:http://blog.csdn.net/sadshen/article ...

  7. 使用Web页面配置ESP8266的参数

    前言 使用Web页面配置ESP8266的参数相对于使用串口AT指令配置更加直观和简单.与配置路由器方式类似. 基本思路 基本思路是ESP8266工作AP模式下,作为TCP Server监听TCP Cl ...

  8. esp8266 SDK开发之GPIO中断

    先秀一下自己焊的板子,黑的开关用于复位,蓝的开关用于烧录程序. 首先要明确的是esp8622的大多数管脚都有多个功能, 比如可以用来当做GPIO管脚,还可以用来当做SPI管脚. 如下图所示 使用PIN ...

  9. esp8266 SDK开发之环境搭建

    最近在弄这个WiFi模块,发现网上SDK开发方面的资料很少,发现了一套视频教程,不过主讲人的讲课方式实在受不了.对基于SDK开发感兴趣的同学可以通过本帖在Ubuntu系统上通过Eclipes搭建开发环 ...

随机推荐

  1. Java-Redis Serializable序列化

    在Java中使用redis存储User对象时,进行JUnit测试时,控制台: 2019-06-24 16:56:45.520 INFO 27688 --- [ main] j.LocalContain ...

  2. springBoot整合Listener

    新建项目 这个是pom文件 <properties> <java.version>1.8</java.version> </properties> &l ...

  3. opendir 、readdir 小结

    转载于:http://blog.csdn.net/lin_fs/article/details/7335573 1. opendir() 头文件 #include<sys/types.h> ...

  4. [转帖]Grafana背后的Nginx和Apache Proxy

    Grafana背后的Nginx和Apache Proxy https://ywnz.com/linuxyffq/5590.html 这个网站貌似非常非常好 在本文中,我将向你展示如何在Nginx和Ap ...

  5. Update语句的Output从句结构

    原文:Update语句的Output从句结构 一,先看1个列子 ) dbo.Table_1 set status = 'C' --2,选择前3条数据output deleted.id,deleted. ...

  6. VC++2017关于项目出现"const char *" 类型的实参与 "char *" 类型的形参不兼容错误的解决方法

    C++项目中经常会定义如下形式的字符串: char *texts[] = { "1. Open Account", "2. To Deposit Money", ...

  7. 牛客 158D a-贝利福斯数

    将所有形如ax+1的数称为a-贝利福斯数,其中x是正整数.一个a-贝利福斯数是a-贝利福斯素数,当且仅当它不能被分解成两个a-贝利福斯数的积.现在给出a,n,问有多少个 ≤ n的a-贝利福斯数可以被分 ...

  8. websocket vue

    /* eslint-disable */ let tt; let count = 1; let lockReconnect = false; function isJsonString(str) { ...

  9. StoneTab标签页CAD插件 2.6.0

    1.纯属自娱自乐,未做过多的测试: 2.理论上可以用在CAD2010-2012版本,自己用的是WIN10 64位,CAD2012,其他未过测试: 3.尚未打算支持其他版本CAD,主要是电脑只能装WIN ...

  10. 如何用Mvc实现一个列表页面-异步加载

    在接触Mvc后,开始有点觉得很累,什么都要自己做,完全没有WebForm的易用性: 大概用了一个月左右的时候,越用用顺手,就习惯了MVC的这种开发方式,灵活,简洁: 当初学习MVC,网上看资料,都是讲 ...