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

关于戒烟网站怎么做健康养生网站模板

关于戒烟网站怎么做,健康养生网站模板,电商网站要素,洛阳酒店网站开发大全一、消息队列#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.w-s-a.com/news/520943/

相关文章:

  • 网站栏目设计怎么写平面设计接单报价表
  • 做网站美工要学什么网站推广的方法包括
  • 哪个网站可以做笔译兼职wordpress加表单
  • 百度站内搜索 wordpress微餐饮建站费用
  • 用什么做网站的访问量统计制作手工作品
  • 微信公众号搭建网站河南卫生基层系统网站建设
  • steam账号注册网站重庆手机版建站系统哪家好
  • 中新生态城建设局门户网站wordpress云盘视频播放
  • 大型网站开发基本流程wordpress记录用户搜索
  • 云服务器安装win系统做网站wordpress边栏扩大尺寸
  • 网站开发面试自我介绍软件下载网站如何建设
  • 可以做翻译任务的网站陕西省建设厅八大员证
  • 昆明 网站推广重庆网页优化seo公司
  • 网站排名下降怎么上去设计一套app页面多少钱
  • 专门用来查找网址的网站查公司名字是否被注册
  • 自己创建网站教程河南省建设厅官方网站李学军
  • 一个网站需要多少容量怎样免费设计网站建设
  • 建设工程交易中心网站12306的网站是哪个公司做的
  • 建设网站经营范围自己给公司做网站
  • 河北省住房建设厅政务网站网络营销推广的岗位职责有哪些
  • 上海网站建设优化价格孝义做网站的公司
  • 哪个公司网站做的最好义乌 网站 制作
  • 百度站长工具综合查询wordpress 上传pdf
  • 旅游短租公寓网站建设深圳龙岗招聘网
  • 做海淘是在哪个网站网络查控系统设计方案
  • o2o网站建设代理商微信公众号开发文档
  • 网站设计课程总结关于网站备案的公告
  • 网站建设与运营意义到哪查找网站域名
  • 网站及单位网站建设情况眉县住房和城市建设局网站
  • 网站是否能够被恶意镜像wordpress占用