09嵌入式实时操作系统FreeRTOS事件标志组.ppt
-
资源ID:87675371
资源大小:646.50KB
全文页数:16页
- 资源格式: PPT
下载积分:10金币
快捷下载
会员登录下载
微信登录下载
三方登录下载:
微信扫一扫登录
友情提示
2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
|
09嵌入式实时操作系统FreeRTOS事件标志组.ppt
嵌入式实时操作系统嵌入式实时操作系统FreeRTOSFreeRTOS原理及应用原理及应用基基于于STM32STM32微控制器微控制器嵌入式实时操作系统嵌入式实时操作系统FreeRTOS原理及应用原理及应用张超张超 主编主编STM32 Cortex-M4通用开发板通用开发板嵌入式实时操作系统嵌入式实时操作系统FreeRTOS原理及应用原理及应用事件标志组事件标志组用事件标志组进行任务同步用事件标志组进行任务同步FreeRTOS事件标志组事件标志组主要内容:主要内容:一、事件标志组事件标志组FreeRTOS事件标志组事件标志组事件标志组事件标志组用一个二进制位来表示一个事件,当这个二进制位为1时,表明发生了对应事件,为0时没有发生,这样,多个二进制位组合在一起就可以用来表示事件标志组。在FreeRTOS中,事件标志组中的所有事件位使用一个EventBits_t的数据类型来存储。这个数据类型与处理器的字长有关,在STM32微控制器上,这个数据类型为32位。FreeRTOS事件标志组只使用低24位用来存储事件位,故事件标志组最多只能存储24个事件。创建事件标志组创建事件标志组事件标志组事件标志组用函数xEventGroupCreate()来创建事件标志组,函数的原型为:EventGroupHandle_t xEventGroupCreate(void)设置事件位设置事件位事件标志组事件标志组设置事件位涉及二种操作,置1和清0。1、xEventGroupClearBits()事件标志位清0函数,函数原型如下:EventBits_t xEventGroupClearBits(EventGroupHandle_t xEventGroup,const EventBits_t uxBitsToClear);设置事件位设置事件位事件标志组事件标志组2、xEventGroupClearBitsFromISR()中断服务函数中用于事件标志位清0函数,函数原型如下:BaseType_t xEventGroupClearBitsFromISR(EventGroupHandle_t xEventGroup,const EventBits_t uxBitsToClear);设置事件位设置事件位事件标志组事件标志组3、xEventGroupSetBits()事件标志位置1函数,函数原型如下:EventBits_t xEventGroupSetBits(EventGroupHandle_t xEventGroup,const EventBits_t uxBitsToSet);设置事件位设置事件位事件标志组事件标志组4、xEventGroupSetBitsFromISR()中断服务函数中用于事件标志位置1函数,函数原型如下:BaseType_t xEventGroupSetBitsFromISR(EventGroupHandle_t xEventGroup,const EventBits_t uxBitsToSet,BaseType_t*pxHigherPriorityTaskWoken);获取事件标志组值获取事件标志组值事件标志组事件标志组1、xEventGroupGetBits()获取事件标志组当前值函数,函数原型如下:利用这个函数会返回清0指定事件位之前的事件标志值来完成获取,参入的参数0表示没有那个事件位被清除。#define xEventGroupGetBits(xEventGroup)xEventGroupClearBits(xEventGroup,0);获取事件标志组值获取事件标志组值事件标志组事件标志组2、xEventGroupGetBitsFromISR()中断服务函数中用于获取事件标志组当前值函数,函数原型如下:EventBits_t xEventGroupGetBitsFromISR(EventGroupHandle_t xEventGroup);等待指定的事件位等待指定的事件位事件标志组事件标志组某个任务可能需要与多个事件更行同步,可使用xEventGroupWaitBits()函数来判断多个事件标志位,函数的原型为:EventBits_t xEventGroupWaitBits(EventGroupHandle_t xEventGroup,const EventBits_t uxBitsToWaitFor,const BaseType_t xClearOnExit,const BaseType_t xWaitForAllBits,TickType_t xTicksToWait);二、用事件标志组进行任务同步用事件标志组进行任务同步FreeRTOS事件标志组事件标志组用事件标志组进行任务同步用事件标志组进行任务同步本示例通过操作事件标志组,实现任务与多个事件之间的同步,通过一个函数appStartTask(),创建四个FreeRTOS任务。任务1的任务函数为Led0Task(),优先级3,其功能是使LED0闪烁,指示程序正在运行。任务2的任务函数是Led1Task(),优先级3,其功能是检测事件标志位,bit2、bit1、和bit0同时置位时点亮LED1,并输出信息到串口。任务3是串口输出守护任务,优先级3,任务函数是printTask(),其功能是将通过队列传送过来的字符信息在串口上输出,任何时候只有该守护任务能访问串口。用事件标志组进行任务同步用事件标志组进行任务同步任务4是按键扫描任务,优先级4,任务函数是keyTask(),其功能是按键扫描,并根据返回的键值执行事件标志组标志位置1、启动定时器等操作,模拟事件发生。示例中使用到三个按键,KEY0键用于将事件标志组bit0置1,KEY1键用于将事件标志组bit1置1,KEY2用于启动TIM2,在TIM2的更新中断将事件标志组bit2置1后停止TIM2。