ESP8266 NONOS SDK学习

一、概况

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)
• 微秒定时器器不不是很精确
• 请勿⻓长时间关闭中断

posted @ 2021-07-27 21:55  D·Kingson.Mo  阅读(365)  评论(0编辑  收藏  举报