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

网站建设建站网易互客个人网站建设详细教程

网站建设建站网易互客,个人网站建设详细教程,wordpress 用户枚举,推广网上国网app一、消息队列#xff08;queue#xff09; 队列是一种用于实现任务与任务之间#xff0c;任务与中断之间消息交流的机制。 注意#xff1a;1.数据的操作是FIFO模式。 2.队列需要明确数据的大小和队列的长度。 3.写和读都会出现堵塞。 实验#xff1a;创建一个消息队列…一、消息队列queue 队列是一种用于实现任务与任务之间任务与中断之间消息交流的机制。 注意1.数据的操作是FIFO模式。 2.队列需要明确数据的大小和队列的长度。 3.写和读都会出现堵塞。 实验创建一个消息队列两个发送任务一个接收任务。 其中任务一任务三的等待时间为0任务二的等待时间为portMAX_DELAY死等。 实现在前一个项目的基础上进行更改【STM32】利用CubeMX对FreeRTOS用按键控制任务 void MX_FREERTOS_Init(void) {/* USER CODE BEGIN Init *//* USER CODE END Init *//* USER CODE BEGIN RTOS_MUTEX *//* add mutexes, ... *//* USER CODE END RTOS_MUTEX *//* Create the semaphores(s) *//* USER CODE BEGIN RTOS_SEMAPHORES *//* add semaphores, ... *//* USER CODE END RTOS_SEMAPHORES *//* USER CODE BEGIN RTOS_TIMERS *//* start timers, add new ones, ... *//* USER CODE END RTOS_TIMERS *//* Create the queue(s) *//* definition and creation of myQueue01 */osMessageQDef(myQueue01, 2, uint32_t);myQueue01Handle osMessageCreate(osMessageQ(myQueue01), NULL);/* USER CODE BEGIN RTOS_QUEUES *//* add queues, ... *//* USER CODE END RTOS_QUEUES *//* Create the thread(s) *//* definition and creation of Task1 */osThreadDef(Task1, StartDefaultTask, osPriorityNormal, 0, 128);Task1Handle osThreadCreate(osThread(Task1), NULL);/* definition and creation of Task2 */osThreadDef(Task2, StartTask02, osPriorityIdle, 0, 128);Task2Handle osThreadCreate(osThread(Task2), NULL);/* definition and creation of Task3 */osThreadDef(Task3, StartTask03, osPriorityIdle, 0, 128);Task3Handle osThreadCreate(osThread(Task3), NULL);/* USER CODE BEGIN RTOS_THREADS *//* add threads, ... *//* USER CODE END RTOS_THREADS */}/* USER CODE BEGIN Header_StartDefaultTask */ /*** brief Function implementing the Task1 thread.* param argument: Not used* retval None*/ /* USER CODE END Header_StartDefaultTask */ void StartDefaultTask(void const * argument) {/* USER CODE BEGIN StartDefaultTask *//* Infinite loop */BaseType_t xStatus;uint32_t Buf10086;for(;;){if(HAL_GPIO_ReadPin(GPIOE,GPIO_PIN_3)0){osDelay(20);if(HAL_GPIO_ReadPin(GPIOE,GPIO_PIN_3)0){xStatusxQueueSendToBack(myQueue01Handle,Buf,0);if(xStatus!pdTRUE){printf(NO1\r\n);osDelay(500);}else{printf(YES1%u\r\n,Buf);osDelay(500);}}}}/* USER CODE END StartDefaultTask */ }/* USER CODE BEGIN Header_StartTask02 */ /** * brief Function implementing the Task2 thread. * param argument: Not used * retval None */ /* USER CODE END Header_StartTask02 */ void StartTask02(void const * argument) {/* USER CODE BEGIN StartTask02 *//* Infinite loop */BaseType_t xStatus;uint32_t Buf66666;for(;;){ if(HAL_GPIO_ReadPin(GPIOE,GPIO_PIN_4)0){osDelay(20);if(HAL_GPIO_ReadPin(GPIOE,GPIO_PIN_4)0){xStatusxQueueSendToBack(myQueue01Handle,Buf,portMAX_DELAY);if(xStatus!pdTRUE){printf(NO2\r\n);osDelay(500);}else{printf(YES2%u\r\n,Buf);osDelay(500);}}}}/* USER CODE END StartTask02 */ }/* USER CODE BEGIN Header_StartTask03 */ /** * brief Function implementing the Task3 thread. * param argument: Not used * retval None */ /* USER CODE END Header_StartTask03 */ void StartTask03(void const * argument) {/* USER CODE BEGIN StartTask03 *//* Infinite loop *///BaseType_t xStatus;uint32_t Buf0;for(;;){if(HAL_GPIO_ReadPin(GPIOE,GPIO_PIN_2)0){osDelay(20);if(HAL_GPIO_ReadPin(GPIOE,GPIO_PIN_2)0){printf(当前%u\r\n,Buf);//xStatusxQueueReceive(myQueue01Handle,Buf,portMAX_DELAY);if(xQueueReceive(myQueue01Handle,Buf,portMAX_DELAY)!pdTRUE){printf(NO3\r\n);}else{printf(YES3%u\r\n,Buf);}}}}/* USER CODE END StartTask03 */ }现象队列满了以后任务一无法发送任务二会死等队列空闲以后完成发送。 二、信号量 消息队列用于传输多个数据占用时间也相对较长但有时只需要传输状态因此引入信号量。信号量也是队列的一种。信号量有两种如果它的量只有0被拿走的状态和1被填入的状态两种状态就称为二进制的信号量当量的状态大于两种就称为计数型信号量。 1.二值信号量 实验任务一按键采集数据任务二拿走以后串口发送信息 实现 void MX_FREERTOS_Init(void) {/* USER CODE BEGIN Init *//* USER CODE END Init *//* USER CODE BEGIN RTOS_MUTEX *//* add mutexes, ... *//* USER CODE END RTOS_MUTEX *//* Create the semaphores(s) *//* definition and creation of myBinarySem01 */osSemaphoreDef(myBinarySem01);myBinarySem01Handle osSemaphoreCreate(osSemaphore(myBinarySem01), 1);/* USER CODE BEGIN RTOS_SEMAPHORES *//* add semaphores, ... *//* USER CODE END RTOS_SEMAPHORES *//* USER CODE BEGIN RTOS_TIMERS *//* start timers, add new ones, ... *//* USER CODE END RTOS_TIMERS *//* Create the queue(s) *//* definition and creation of myQueue01 */osMessageQDef(myQueue01, 2, uint32_t);myQueue01Handle osMessageCreate(osMessageQ(myQueue01), NULL);/* USER CODE BEGIN RTOS_QUEUES *//* add queues, ... *//* USER CODE END RTOS_QUEUES *//* Create the thread(s) *//* definition and creation of Task1 */osThreadDef(Task1, StartDefaultTask, osPriorityNormal, 0, 128);Task1Handle osThreadCreate(osThread(Task1), NULL);/* definition and creation of Task2 */osThreadDef(Task2, StartTask02, osPriorityNormal, 0, 128);Task2Handle osThreadCreate(osThread(Task2), NULL);/* definition and creation of Task3 */osThreadDef(Task3, StartTask03, osPriorityNormal, 0, 128);Task3Handle osThreadCreate(osThread(Task3), NULL);/* USER CODE BEGIN RTOS_THREADS *//* add threads, ... *//* USER CODE END RTOS_THREADS */}/* USER CODE BEGIN Header_StartDefaultTask */ /*** brief Function implementing the Task1 thread.* param argument: Not used* retval None*/ /* USER CODE END Header_StartDefaultTask */ void StartDefaultTask(void const * argument) {/* USER CODE BEGIN StartDefaultTask *//* Infinite loop */BaseType_t xStatus;uint32_t Buf10086;for(;;){ // {if(HAL_GPIO_ReadPin(GPIOE,GPIO_PIN_3)0){osDelay(20);if(HAL_GPIO_ReadPin(GPIOE,GPIO_PIN_3)0){ // xStatusxQueueSendToBack(myQueue01Handle,Buf,0);if(xSemaphoreGive(myBinarySem01Handle)pdTRUE){printf(NO1\r\n);}else{printf(YES1%u\r\n,Buf);}}}}/* USER CODE END StartDefaultTask */ }/* USER CODE BEGIN Header_StartTask03 */ /** * brief Function implementing the Task3 thread. * param argument: Not used * retval None */ /* USER CODE END Header_StartTask03 */ void StartTask03(void const * argument) {/* USER CODE BEGIN StartTask03 *//* Infinite loop */ uint32_t Buf0;for(;;){if(HAL_GPIO_ReadPin(GPIOE,GPIO_PIN_2)0){osDelay(20);if(HAL_GPIO_ReadPin(GPIOE,GPIO_PIN_2)0){ if(xSemaphoreTake(myBinarySem01Handle,0)pdTRUE){printf(YES3\r\n);}else{printf(NO3%u\r\n,Buf);}}}}/* USER CODE END StartTask03 */ }现象当按键释放了信号量串口才能成功发送信息。 2.记数型信号量 实验任务一 按键一记录人进来按键二记录人出去最多有10个人 任务二串口每隔3S打印人数。 实现 void MX_FREERTOS_Init(void) {/* USER CODE BEGIN Init *//* USER CODE END Init *//* USER CODE BEGIN RTOS_MUTEX *//* add mutexes, ... *//* USER CODE END RTOS_MUTEX *//* Create the semaphores(s) *//* definition and creation of myBinarySem01 */osSemaphoreDef(myBinarySem01);myBinarySem01Handle osSemaphoreCreate(osSemaphore(myBinarySem01), 1);/* definition and creation of myCountingSem01 */osSemaphoreDef(myCountingSem01);myCountingSem01Handle osSemaphoreCreate(osSemaphore(myCountingSem01), 10);/* USER CODE BEGIN RTOS_SEMAPHORES *//* add semaphores, ... *//* USER CODE END RTOS_SEMAPHORES *//* USER CODE BEGIN RTOS_TIMERS *//* start timers, add new ones, ... *//* USER CODE END RTOS_TIMERS *//* Create the queue(s) *//* definition and creation of myQueue01 */osMessageQDef(myQueue01, 2, uint32_t);myQueue01Handle osMessageCreate(osMessageQ(myQueue01), NULL);/* USER CODE BEGIN RTOS_QUEUES *//* add queues, ... *//* USER CODE END RTOS_QUEUES *//* Create the thread(s) *//* definition and creation of Task1 */osThreadDef(Task1, StartDefaultTask, osPriorityNormal, 0, 128);Task1Handle osThreadCreate(osThread(Task1), NULL);/* definition and creation of Task2 */osThreadDef(Task2, StartTask02, osPriorityNormal, 0, 128);Task2Handle osThreadCreate(osThread(Task2), NULL);/* definition and creation of Task3 */osThreadDef(Task3, StartTask03, osPriorityNormal, 0, 128);Task3Handle osThreadCreate(osThread(Task3), NULL);/* USER CODE BEGIN RTOS_THREADS *//* add threads, ... *//* USER CODE END RTOS_THREADS */}/* USER CODE BEGIN Header_StartDefaultTask */ /*** brief Function implementing the Task1 thread.* param argument: Not used* retval None*/ /* USER CODE END Header_StartDefaultTask */ void StartDefaultTask(void const * argument) {/* USER CODE BEGIN StartDefaultTask *//* Infinite loop */for(;;){if(HAL_GPIO_ReadPin(GPIOE,GPIO_PIN_3)0){osDelay(20);if(HAL_GPIO_ReadPin(GPIOE,GPIO_PIN_3)0){if(xSemaphoreGive(myCountingSem01Handle)!pdTRUE){printf(NO1\r\n);}else{printf(YES1\r\n);}}}if(HAL_GPIO_ReadPin(GPIOE,GPIO_PIN_4)0){osDelay(20);if(HAL_GPIO_ReadPin(GPIOE,GPIO_PIN_4)0){if(xSemaphoreTake(myCountingSem01Handle,0)!pdTRUE){printf(NO2\r\n);}else{printf(YES2\r\n);}}}}/* USER CODE END StartDefaultTask */ }/* USER CODE BEGIN Header_StartTask02 */ /** * brief Function implementing the Task2 thread. * param argument: Not used * retval None */ /* USER CODE END Header_StartTask02 */ void StartTask02(void const * argument) {/* USER CODE BEGIN StartTask02 *//* Infinite loop */for(;;){}/* USER CODE END StartTask02 */ }/* USER CODE BEGIN Header_StartTask03 */ /** * brief Function implementing the Task3 thread. * param argument: Not used * retval None */ /* USER CODE END Header_StartTask03 */ void StartTask03(void const * argument) {/* USER CODE BEGIN StartTask03 *//* Infinite loop */for(;;){printf(possess %d people\r\n,(uint16_t)uxSemaphoreGetCount(myCountingSem01Handle));osDelay(3000);}/* USER CODE END StartTask03 */ }因为用了函数 myCountingSem01Handle osSemaphoreCreate(osSemaphore(myCountingSem01), 10); 默认当前计数值为满值。如果设置为0使用下面的函数 myCountingSem01HandlexSemaphoreCreateCounting(10,0); 现象通过按键一和二实现记录人数并串口打印了当前人数。
http://www.hkea.cn/news/14381880/

相关文章:

  • 杭州网站建站模板优质外贸网站
  • 做问卷调查的网站海淘网站入口
  • 服务器创建多个网站吗wordpress免费搭建个人博客
  • 官方网站建设要点wordpress微信注册
  • 哈尔滨制作网站企业南京建设部执业注册中心网站
  • 漳州 做网站新奇网站建设
  • 学习网站的建设南京网站维护公司
  • 网站建设费与无形资产如何创建自己的软件
  • 建设常规的网站报价是多少做网站常用软件
  • 招商网站开发文档江苏镇江网站建设
  • 平乡县网站建设平台wordpress搭建wifi登陆
  • 网站 盈利模式谷歌seo的推广
  • 仿站小工具怎么用海北高端网站建设
  • 手机网站搭建html网站怎么做视频
  • 怎样在赶集微网站做微招聘信息个人网站模板 免费
  • 国外做设计的网站有哪些营销一体化营销平台
  • led企业网站策划app网站开发的特点
  • 东莞土木建筑学会网站网站开发前端是什么
  • 长沙网站设计公司怎么样联兴建设官方网站
  • 哈尔滨快速建站专业定制阿里巴巴如何建设网站
  • 单位网站等级保护必须做吗中国建设银行美金账户登录网站
  • 怎么设计一个自己的网站wordpress评论验证码插件
  • 企业为什么要建设电子商务网站网页设计作业设计意图
  • 佛山百度网站快速排名德州市网站建设
  • 网站建设流程发布网站和网页制作php电商网站开发流程
  • 河南企业网站推广百度收录网站之后又怎么做
  • 网络公司做的网站根目录在哪重庆中国建设监理协会网站
  • 网站绝对地址遵义网约车租车公司
  • php企业网站例子音乐网站制作教程步骤
  • 怎么封闭网站网站建设小程序定制开发