一、概况

1.存储

ESP8266 带有 160 KB 的 RAM,其中 64 KB 为 iRAM,96 KB 为 dRAM。iRAM 进一步

分成两块:32 KB iRAM 块运行标有 IRAM_ATTR 的代码,另一个 32 KB 块用作

cache,运行标有 ICACHE_FLASH_ATTR 的代码。

RAM 和 flash 访问必须是 4 字对齐的,请勿直接进行指针转换。请使用 os_memcpy 或

其他 API 进行内存操作。

二、代码结构

1.void user_init(void)

上层程序的⼊入⼝口函数,可在增加硬件初始化、⽹网络参数设置、定时器器初始化等功能

2.void ICACHE_FLASH_ATTR user_pre_init(void)

ESP8266_NONOS_SDK_v3.0.0 及之后版本,用户在此函数内注册用户自己的分区表

3.函数类型

1)应⽤用函数

应⽤用函数在定义时建议添加 ICACHE_FLASH_ATTR 宏,相应程序将存放在 flash 中,

被调⽤用时才加载到 cache 运⾏行,添加 IRAM_ATTR 宏的函数,则会在上电启动

时就加载到 iRAM 中。

(添加了 ICACHE_FLASH_ATTR 的代码通常⽐比使用 IRAM_ATTR 标记的代码执行得慢。然

而,像⼤大多数嵌入式平台一样,ESP8266 的 iRAM 空间有限,因此建议一般代码添加

ICACHE_FLASH_ATTR,仅对执行效率要求高的代码添加 IRAM_ATTR 宏。)

2)回调函数

编写回调函数,需要使用相应的 register_cb API 注册回调函数

3)中断服务程序 (ISR)

一种特殊类型的回调函数。发⽣生硬件中断时会调⽤。当使能中断时,必须注册相应的中断处理理函数。

ISR 必须添加 IRAM_ATTR

4)用户任务

Non-OS SDK最多只支持3个用户任务,优先级2>1>0,用户任务一般用于函数不能直接被调⽤用的情况下

定时器和中断

• 对于需要进⾏行行轮询的应⽤用,建议使用系统定时器器定期检查事件。

- 如果使⽤用循环(while 或 for),不仅效率低下,而且阻塞 CPU,不建议使用。

- 如果需要在定时器器回调中执行 os_delay_us 或 while 或 for,请勿占用 CPU超过 15 ms。

• 请勿频繁调⽤用定时器器,建议频率不高于每 5 ms ⼀次(微秒计时器器则为 100 μs)

• 微秒定时器器不不是很精确

• 请勿⻓长时间关闭中断

最新文章

  1. 机器指令翻译成 JavaScript —— No.2 跳转处理
  2. 【java】:枚举小demo
  3. ie 7/8不支持trim的属性的解决方案
  4. 【leetcode】Single Number && Single Number II(ORZ 位运算)
  5. Java tomcat启动失败(Servlet3.0 Web Project):A child container failed during start
  6. JS案例之1——pager 分页
  7. [百科]sys/types.h
  8. putty 代理设置
  9. 30种mysql优化sql语句查询的方法<转>
  10. Linux进程学习(孤儿进程和守护进程)
  11. centos postfix 邮箱安装记录
  12. ASP.NET-FineUI开发实践-9
  13. 【原创】对Java的synchronized关键字的学习
  14. JavaScript当页面关闭时向后台发送请求
  15. div,css命名规范!
  16. 最强离线安装MySQL_8.0.2方法
  17. vue中复选框全选与反选
  18. WPF 样式(定义样式、引用样式、样式作用域、Trigger触发器)
  19. 树莓派无显示器开启ssh的方法
  20. [原创]jQuery Validation范例

热门文章

  1. 怎么理解相互独立事件?真的是没有任何关系的事件吗?《考研概率论学习之我见》 -by zobol
  2. Windows下新建隐藏用户名
  3. BUUCTF-ningen
  4. 关于vue项目中搜索节流的实现
  5. ABAP CDS - Language Elements
  6. 分享|智慧环保-生态文明信息化解决方案(附PDF)
  7. Python爬取某网站文档数据完整教程(附源码)
  8. Nginx通过bat文件快速启动停止
  9. 扩展新的WCV到标准的WC后,不能在业务角色里面看见视图解决方法
  10. DNS 系列(一):为什么更新了 DNS 记录不生效?