EXP7 事件标志组实验.docx 实验 7 :事件标志组实验 一、实验软件环境 Keil5 、器件支持库、 FreeRTOS 10.0.1 二、实验目的和学习内容 1 、学习 FreeRTOS 事件标志组的操作、任务与任务通过事件标志组通信。 2 、熟悉任务的优先级翻转、二值信号量、互斥信号量等概念以及相关的操作函数。 3 、学习事件标志组的创建、任务和中断中置位 / 清除事件标志组比特、任务阻塞态等待事件标志组比特置位以及非阻塞态读取事件标志组比特;对应的 API 函数: xEventGroupSetBits(), xEventGroupSetBitsFromISR(), xEventGroupWaitBits() 等。 详细参见附录(不必出现在提交的报告中) 三、代码功能 : 本实验设计 3 个任务和一个中断通过一个 EventGroup 的 4 个 bit 交互事件信息。 Bit0 -- Key0; Bit1 – Key1; Bit2 – Key2; Bit3 – Watchdog Bit for Eventgroup_task 外部中断 4 服务程序 : KEY0 按键事件发生时,在中断服务调用 xEventGroupSetBitsFromISR 置位 EventGroup 的 bit0 。 按键扫描任务 :以 10mS 周期扫描 Key1 和 Key2 ;按键事件 Keyi 发生时,调用 xEventGroupSetBitsFromISR 置位 EventGroup 的 bit I, i= 1 or 2. 事件处理任务 Eventgroup_task : 实现两种模式: 模式 1 : xEventGroupWaitBits 大延迟阻塞态等待标志组 EventGroupHandler 的三个事件位都置 1 。 当 KEY0 , KEY1 和 KEY2 三个按键的事件发生时(顺序任意,重复按键忽略),任务 eventgroup_task 同时处理这 3 个事件(打印相关消息),否则阻塞态等待。 模式 2 : xEventGroupWaitBits 小延迟阻塞态等待等待标志组 EventGroupHandler 的部分事件位置 1 。任务 eventgroup_task 根据事件打印不同的消息(按键)。 退出阻塞态后,置位 Bit3 ,向监控任务报告在正常运行。 监控任务 Watchdog 以 50mS 周期读取事件标志组 xEventGroupGetBits ,当事件标志组发生变化时打印事件组内容。 当 Bit3 置 1 时,监控任务负责清零 如果 Bit3 4 秒内没有按约定协议置 1 ,监控任务打印报告“ 事件处理任务 Eventgroup_task 异常”