同步操作将从 马志良/easyio-lib-for-esp32 强制同步,此操作会覆盖自 Fork 仓库以来所做的任何修改,且无法恢复!!!
确定后同步将在后台操作,完成时将刷新页面,请耐心等待。
使用 FreeRTOS
的 Task
,创建两个任务:
使用 gpioX.c.h
驱动模块,来对ESP32的 GPIO
输入中断进行配置
使用 FreeRTOS 的 Queue 消息队列
,来对ESP32的GPIO中断事件进行处理
LED | KEY | |
---|---|---|
ESP32 | GPIO33 | GPIO0 |
LED闪烁,按动按键会 暂停/继续 LED的闪烁。
按动按键时,串口会输出 gpio中断的引脚Pin号
、gpio中断次数
、led_task 任务的运行状态
ESP32的 GPIO中断操作
。
FreeRTOS
的 任务管理
,对任务运行状态状态进行控制。暂停/继续任务的运行。
FreeRTOS
的 Queue 消息队列
,对突发中断事件进行处理。
FreeRTOS
的 阻塞/非阻塞概念、队列的操作(类似FIFO)。
// FreeRTOS 创建队列
xQueueCreate(10, sizeof(uint32_t));
// FreeRTOS 向队列发送消息
xQueueSendFromISR(gpio_evt_queue, &gpio_num, NULL);
// FreeRTOS 接收队列的消息
xQueueReceive(gpio_evt_queue, &gpio_num, portMAX_DELAY);
中断ISR中,printf
会导致重启。千万别在ESP32中断处理内用 printf
。
FreeRTOS
对任务的控制,都通过操作 任务句柄
实现,而非任务处理函数。
FreeRTOS
的 Queue 消息队列
,可以简化突发事件的处理方式,但要合理设置队列深度,以防 单个任务周期内,突发事件的发生次数,大于队列深度,导致丢失部分消息
。
中断中向队列发送消息,只能使用 xQueueSendFromISR
,而不能用 xQueueSend
。
例程中没添加按键防抖。(08_KEY例程中,会单独封装key.c.h
,来处理按键事件。支持多按键,支持短按/长按检测)
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。