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”宏即可。
ESP8266—“ICACHE_FLASH_ATTR”宏的更多相关文章
- ESP8266—“ICACHE_FLASH_ATTR”宏——解释含义
const uint8 MyArr[1024] ICACHE_RODATA_ATTR = {0}; void MyFun() ICACHE_FLASH_ATTR { } 这种 ICACHE 开头的宏作 ...
- ESP8266 NONOS SDK学习
一.概况 1.存储 ESP8266 带有 160 KB 的 RAM,其中 64 KB 为 iRAM,96 KB 为 dRAM.iRAM 进一步 分成两块:32 KB iRAM 块运行标有 IRAM_A ...
- ESP8266代码中的存储标记
const uint8 MyArr[1024] ICACHE_RODATA_ATTR = {0}; void MyFun() ICACHE_FLASH_ATTR { } 这种 ICACHE 开头的宏作 ...
- 聊聊ESP8266的SDK(ESP8266_RTOS_SDK v3.3 环境搭建)
ESP8266_RTOS_SDK发行版本v3.3-rc1环境搭建 在大学期间玩8266所接触的都无操作系统版本的SDK,但后来接触了ESP32后发现ESP8266也推出了RTOS版本,一直都没来得及去 ...
- 【002:ESP8266 移植 Mqtt 】
系统环境: ubuntu 16.04 64bitSDK版本: esp_iot_sdk_v1.3.0记录时间: 2016年10月13日联系方式: yexiaopeng1992@126.com 背景:在E ...
- ESP8266学习笔记1:怎样在安信可全功能測试板上实现ESP-01的编译下载和调试
近期调试用到了安信可的ESP-01模块,最终打通了编译下载调试的整个通道,有一些细节须要记录,方便兴许的开发工作. 转载请注明:http://blog.csdn.net/sadshen/article ...
- 使用Web页面配置ESP8266的参数
前言 使用Web页面配置ESP8266的参数相对于使用串口AT指令配置更加直观和简单.与配置路由器方式类似. 基本思路 基本思路是ESP8266工作AP模式下,作为TCP Server监听TCP Cl ...
- esp8266 SDK开发之GPIO中断
先秀一下自己焊的板子,黑的开关用于复位,蓝的开关用于烧录程序. 首先要明确的是esp8622的大多数管脚都有多个功能, 比如可以用来当做GPIO管脚,还可以用来当做SPI管脚. 如下图所示 使用PIN ...
- esp8266 SDK开发之环境搭建
最近在弄这个WiFi模块,发现网上SDK开发方面的资料很少,发现了一套视频教程,不过主讲人的讲课方式实在受不了.对基于SDK开发感兴趣的同学可以通过本帖在Ubuntu系统上通过Eclipes搭建开发环 ...
随机推荐
- C++命名建议
如果想要有效的管理一个稍微复杂一点的体系,针对其中事物的一套统一.带层次结构.清晰明了的命名准则就是必不可少而且非常好用的工具. 活跃在生物学.化学.军队.监狱.黑社会.恐怖组织等各个领域内的大量有识 ...
- Java list 转树tree的三种写法
- PAT B1026.程序运行时间
AC代码 #include <cstdio> #define CLK_TCK 100 int main() { int C1, C2, C3; scanf("%d%d" ...
- hdfs架构详解(防脑裂fencing机制值得学习)
HDFS(Hadoop Distributed File System)是一个分布式文件存储系统,几乎是离线存储领域的标准解决方案(有能力自研的大厂列外),业内应用非常广泛.近段抽时间,看一下 HDF ...
- asp.net 12 AJAX
Javascript:ajax Ajax:get <%@ Page Language="C#" AutoEventWireup="true" CodeBe ...
- 佳能单反SDK 步骤
EdsInitializeSDK(); EdsGetCameraList(&eclr);//获取相机列表 EdsGetChildCount(eclr, &camCount); //获 ...
- webpack 学习过程
什么是WebPack,为什么要使用它? 为什要使用WebPack 现今的很多网页其实可以看做是功能丰富的应用,它们拥有着复杂的JavaScript代码和一大堆依赖包.为了简化开发的复杂度,前端社区涌现 ...
- vue-cli3开干
npm install -g @vue/cli-service-global vue create hello-world
- mintUI和mUI
mintUI 安装: npm install mint-ui -S 引入: // 按需引入部分组件 import { Cell, Checklist } from 'mint-ui'; Vue.com ...
- docker 网络模式详解
一.前言 Docker作为目前最火的轻量级容器技术,有很多令人称道的功能,如Docker的镜像管理.然而,Docker同样有着很多不完善的地方,网络方面就是Docker比较薄弱的部分.因此,我们有必要 ...