当前位置: 首页 > news >正文

重庆网站建设jwzcq包头企业网站制作

重庆网站建设jwzcq,包头企业网站制作,直播网站基础建设,网址ip查询域名解析目录 事件标志组 事件标志组与队列、信号量的区别 事件标志组相关API函数介绍 实验源码 事件标志组 事件标志位:用一个位,来表示事件是否发生 事件标志组是一组事件标志位的集合,可以简单的理解事件标志组,就是一个整数。 事件标志组的特点: 它的每一个位表示一个事件(…目录 事件标志组 事件标志组与队列、信号量的区别 事件标志组相关API函数介绍 实验源码 事件标志组 事件标志位:用一个位,来表示事件是否发生 事件标志组是一组事件标志位的集合,可以简单的理解事件标志组,就是一个整数。 事件标志组的特点: 它的每一个位表示一个事件(高8位不算) 每一位事件的含义,由用户自己决定,如: bit0表示按键是否按下, bit1表示是否接受到消息. 这些位的值为1:表示事件发生了;值为0:表示事件未发生 任意任务或中断都可以读写这些位 可以等待某一位成立,或者等待多位同时成立 一个事件组就包含了一个 EventBites_t 数据类型的变量变量类型 EventBits_t 的定义如下所示: EventBits_t 实际上是一个16位或32位无符号的数据类型 虽然使用了32位无符号的数据类型变量来存储事件标志,但其中的高8位用作存储事件标志组的控制信息,低24位用作存储事件标志,所以说一个事件组最多可以存储24个事件标志! 事件标志组与队列、信号量的区别 事件标志组相关API函数介绍 动态方式创建事件标志组API函数 EventGroupHandle_t xEventGroupCreate (void); 清除事件标志位API函数 EventBits_t xEventGroupClearBits( EventGroupHandle_t xEventGroup, const EventBits_tuxBitsToClear) 设置事件标志位API函数 EventBits_t xEventGroupSetBits( EventGroupHandle_t xEventGroup, const EventBits_t uxBitsToSet) 等待事件标志位API函数 EventBits_t xEventGroupWaitBits( EventGroupHandle_t xEventGroup, const EventBits_t uxBitsToWaitFor, const BaseType_t xClearOnExit, const BaseType_t xWaitForAllBits, TickType_t xTicksToWait) 特点:可以等待某一位、也可以等待多位等到期望的事件后,还可以清除某些位。 同步函数 EventBits_t xEventGroupSync( EventGroupHandle_t xEventGroup, const EventBits_t uxBitsToSet, const EventBits_t uxBitsToWaitFor, TickType_t xTicksToWait) 例子: Task1:做饭 Task2:做菜 Task1做好自己的事之后,需要等待菜也做好,大家在一起吃饭。 特点:同步! 实验源码 将设计三个任务: start_task、 task1、task2 start_task:用来创建task1和task2任务,并创建事件标志组 task1:读取按键按下键值,根据不同键值将事件标志组相应事件位置一,模拟事件发生。 task2:同时等待事件标志组中的多个事件位,当这些事件位都置1的话就执行相应的处理 /********************************************************************************* file : user_mian.h* brief : V1.00******************************************************************************* attention********************************************************************************//* Include 包含---------------------------------------------------------------*/ #include stm32f10x.h #include stdbool.h #include user_gpio.h #include user_delay.h #include user_rcc_config.h #include user_uart.h #include FreeRTOS.h #include task.h #include semphr.h #include user_key.h #include queue.h #include event_groups.h /* Typedef 类型----------------------------------------------------------------*/ /* Define 定义----------------------------------------------------------------*/ /* Macro 宏------------------------------------------------------------------*/ /*事件标志组句柄*/ EventGroupHandle_t eventgroup_handle; /* Variables 变量--------------------------------------------------------------*/ /* Constants 常量--------------------------------------------------------------*/ /* Function 函数--------------------------------------------------------------*///任务优先级 #define START_TASK_PRIO 1 //任务堆栈大小 #define START_STK_SIZE 128 //任务句柄 TaskHandle_t StartTask_Handler; //任务函数 void start_task(void *pvParameters);//任务优先级 #define TASK1_PRIO 4 //任务堆栈大小 #define TASK1_STK_SIZE 100 //任务句柄 TaskHandle_t TASK1_Handler; //任务函数 void task1(void *pvParameters);//任务优先级 #define TASK2_PRIO 3 //任务堆栈大小 #define TASK2_STK_SIZE 100 //任务句柄 TaskHandle_t TASK2_Handler; //任务函数 void task2(void *pvParameters);int main(void){ /*配置系统中断分组为4位抢占*/NVIC_PriorityGroupConfig(NVIC_PriorityGroup_4);/*延时函数初始化*/delay_init();/*RCC配置*/Rcc_config();/*GPIO初始化*/ Gpio_Init();/*USART1初始化*/Uart1_Init(9600);/*创建开始任务*/xTaskCreate((TaskFunction_t )start_task, //任务函数(const char* )start_task, //任务名称(uint16_t )START_STK_SIZE, //任务堆栈大小(void* )NULL, //传递给任务函数的参数(UBaseType_t )START_TASK_PRIO, //任务优先级(TaskHandle_t* )StartTask_Handler); //任务句柄 vTaskStartScheduler(); //开启任务调度}/*!\brief 开始任务函数\param[in] 传递形参创建任务时用户自己传入\param[out] none\retval none */ void start_task(void *pvParameters) {taskENTER_CRITICAL(); //进入临界区/*创建事件标志组*/eventgroup_handle xEventGroupCreate();if(eventgroup_handle ! NULL){printf(创建事件标志组成功\r\n\r\n);}//创建高优先级任务xTaskCreate((TaskFunction_t )task1, (const char* )task1, (uint16_t )TASK1_STK_SIZE, (void* )NULL, (UBaseType_t )TASK1_PRIO, (TaskHandle_t* )TASK1_Handler); //创建中优先级任务xTaskCreate((TaskFunction_t )task2, (const char* )task2, (uint16_t )TASK2_STK_SIZE, (void* )NULL,(UBaseType_t )TASK2_PRIO,(TaskHandle_t* )TASK2_Handler); vTaskDelete(StartTask_Handler); //删除开始任务taskEXIT_CRITICAL(); //退出临界区 }/*!\brief 任务1模拟事件发生\param[in] 传递形参创建任务时用户自己传入\param[out] none\retval none */ void task1(void *pvParameters) {uint8_t key 0;while(1){ key Key_Scan(0);if(key KEY0_PRES){/*设置事件组,BIT0置一*/xEventGroupSetBits(eventgroup_handle,0x01);}else if(key KEY1_PRES){/*设置事件组,BIT1置一*/xEventGroupSetBits(eventgroup_handle,0x02);}vTaskDelay(10);} } /*!\brief 任务2处理事件 \param[in] 传递形参创建任务时用户自己传入\param[out] none\retval none */ void task2(void *pvParameters) {EventBits_t event_bit 0;while(1){ event_bit xEventGroupWaitBits(eventgroup_handle, /*事件标志组句柄*/0x01|0x02, /*等待事件标志组的BIT0BIT1*/pdTRUE, /*成功等待到事件后,清除事件标志组中的BIT0BIT1*/pdTRUE, /*同时满足才成立*/portMAX_DELAY); /*死等*/printf(等待到的事件标志位值为:%#x\r\n\r\n,event_bit);} }/************************************************************** END OF FILE ****/
http://www.hkea.cn/news/14556400/

相关文章:

  • 网站与规划设计思路Wordpress前端用户头像
  • 合肥大型网站开发公司梅州免费建站找哪家
  • 寺庙网站建设方案兰州又要封城了
  • 网站营销推广怎么做网络营销推广新乡网站建设哪家优惠
  • 网站建设咨询公司地址wordpress 转移 问号
  • 做网站打印费复印费清单佟年帮韩商言做网站是第几集
  • 怎么接网站来做物业企业信息管理系统
  • 世界软件公司排名阿里巴巴网站优化怎么做
  • 关于网站建设的指标网站建设线框图
  • 受欢迎的建网站哪家好菏泽机关建设网站
  • 微信网站开发框架百度推广 网站吸引力
  • 网站排版怎么做的贵州最新消息今天
  • 门户网站建站系统公司网站建设申请
  • 扁平化企业网源码win8风格精简化源码asp带后台企业网站宜宾 网站建设
  • 中关村做网站设计的北京网络公司信息
  • 镇江网站建设价位凡科网登陆
  • 怎么做游戏测评视频网站专业做生鲜的网站好
  • 短租网站开发wordpress目录分页
  • 怎么用程序做网站杭州网页模板建站
  • 有没有专做推广小说的网站网站资源整合与建设
  • 电商网站设计教程有没有做网站的随州
  • 域名备案需要网站搭建完成吗外包加工网怎么样
  • 数据库跟网站内容东丽网站建设公司
  • 网站建设 标书桂林网站制作培训学校
  • 宁波网站制作 收费商丘做网站推广的公司
  • 百度 网站移动适配厦门网站建设门户
  • 做网站课程徐州企业建站
  • 个人网站设计app的网站域名
  • 不是做有网站都叫jwth在阿里云安装wordpress
  • 广州制作企业网站网站用户黏度表现在