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

网站推广的六种方式中国建设银行官网站安装k宝

网站推广的六种方式,中国建设银行官网站安装k宝,威海城乡建设局网站首页,离婚协议书模板免费下载STM32 CubeMX STM32 CubeMX ____Freertos任务通信#xff1a;队列、信号量、互斥量#xff0c;事件组#xff0c;任务通知 STM32 CubeMX一、STM32 CubeMX设置时钟配置HAL时基选择TIM1#xff08;不要选择滴答定时器#xff1b;滴答定时器留给OS系统做时基#xff09;使用…STM32 CubeMX STM32 CubeMX ____Freertos任务通信队列、信号量、互斥量事件组任务通知 STM32 CubeMX一、STM32 CubeMX设置时钟配置HAL时基选择TIM1不要选择滴答定时器滴答定时器留给OS系统做时基使用STM32 CubeMX 库配置Freertos 二、实验一消息队列消息队列是什么适用于什么地方FreeRTOS 消息队列和数组 的几个区别创建消息队列创建任务代码部分实验现象 三实验二信号量信号量是什么适用于什么地方二值信号量代码部分实验现象计数信号量代码部分实验现象 四实验三互斥量互斥量是什么适用于什么地方代码部分实验现象 五实验四事件组互斥量是什么适用于什么地方与逻辑事件组实验现象或逻辑事件组实验现象 六实验五任务通知 学习使用Freertos第二步 在 FreeRTOS 中任务通信可以通过以下函数来实现 xQueueCreate()用于创建一个消息队列。可以设置队列长度和每个消息的大小。 xQueueSend()将一条消息发送到队列中。可以选择阻塞或非阻塞发送。 xQueueReceive()从队列中接收一条消息。可以选择阻塞或非阻塞接收。 xQueuePeek()查看队列中的下一条消息但不将其移除。 xQueueReset()清空队列中的所有消息。 2. xQueueSemaphoreTake()和xQueueSemaphoreGive()用于实现二值信号量控制任务之间的互斥访问。 3. xSemaphoreCreateMutex()创建一个互斥信号量用于实现任务之间的互斥访问。 4. xTaskNotify()和ulTaskNotifyTake()用于任务间的通知机制一个任务可以通知另一个任务进行某种操作。 5. xEventGroupCreate()、xEventGroupSetBits()和xEventGroupWaitBits()用于创建、设置和等待事件标志组。 一、STM32 CubeMX设置 时钟配置 HAL时基选择TIM1不要选择滴答定时器滴答定时器留给OS系统做时基 使用STM32 CubeMX 库配置Freertos 选择CMISS_V1接口就可以满足Freertos接口且代码量比CMISS_V2小CMISS_V2支持更多的RTOS接口所以代码量比CMISS_V1多 二、实验一消息队列 消息队列是什么适用于什么地方 数据传递消息队列允许任务之间传递数据一个任务可以将数据打包成消息发送到队列另一个任务则可以从队列中接收该消息并处理其中的数据。这使得任务之间可以方便地进行数据交换和共享。任务解耦通过使用消息队列任务之间的耦合度可以降低。一个任务只需要关注发送和接收消息而不需要知道消息的具体处理细节和目标任务的实现。这样当需要更改或替换某个任务时只需要保证消息的格式和接口不变即可不会对其他任务产生影响。同步与协作消息队列可以用于实现任务之间的同步和协作。例如一个任务可以等待某个特定的消息到达队列后才继续执行从而实现任务间的同步。另外多个任务可以通过发送和接收消息来协调彼此的执行顺序和操作。缓冲和调节消息队列可以充当缓冲区用于存储一定数量的消息。当发送方发送消息速度较快而接收方处理速度较慢时消息队列可以暂时存储未处理的消息避免数据丢失。同时消息队列还可以调节发送和接收任务之间的速度差异以平衡任务负载。 FreeRTOS 消息队列和数组 的几个区别 数据组织方式消息队列是一种先进先出FIFO的数据结构用于存储和传递消息。每个消息都可以包含不同类型和长度的数据。而数组是一种线性的、连续的数据结构用于存储相同类型和长度的元素。功能和用途消息队列主要用于任务间通信允许任务之间传递数据和进行同步。它提供了数据传递、解耦、同步和协作等功能。而数组通常用于存储一组具有相同类型的元素可以进行遍历、访问和修改等操作。大小和容量消息队列的大小是可以动态调整的可以根据需要增加或减少队列的容量。而数组的大小在创建时就确定并且通常是固定的。可用性和效率消息队列可以实现多个任务之间的并发通信提供了较高的可用性和灵活性。而数组通常在单个任务内进行操作具有较高的效率和直接性总的来说消息队列和数组是两种不同的数据结构适用于不同的场景和需求。消息队列主要用于任务间通信和数据传递具有灵活性和可调节性而数组主要用于存储相同类型的元素并进行遍历和访问操作。选择使用哪种数据结构取决于具体的应用需求和功能要求。 创建消息队列 Queue Name 队列名称Queue Size 队列能够存储的最大单元数目即队列深度Queue Size 队列中数据单元的长度以字节为单位Allocation 分配方式Dynamic 动态内存创建Buffer Name 缓冲区名称Buffer Size 缓冲区大小Conrol Block Name 控制块名称 创建任务 Task Name 任务名称Priority 优先级在 FreeRTOS 中数值越大优先级越高0 代表最低优先级Stack Size (Words) 堆栈大小单位为字在32位处理器STM32一个字等于4字节如果传入128那么任务大小为128*4字节Entry Function 入口函数Code Generation Option 代码生成选项Parameter 任务入口函数形参不用的时候配置为0或NULL即可Allocation 分配方式Dynamic 动态内存创建Buffer Name 缓冲区名称Conrol Block Name 控制块名称 代码部分 void sendTask1(void const * argument) {/* USER CODE BEGIN sendTask1 */BaseType_t xsatus;uint32_t buff9600;/* Infinite loop */for(;;){xsatusxQueueSendToBack(myQueue01Handle,buff,0);if( xsatus!pdPASS){printf(输入失败\r\n); // printf输出字符串}else{printf(成功写入%d\r\n, buff); // printf输出字符串}osDelay(1000);}/* USER CODE END sendTask1 */ } void readTask3(void const * argument) {/* USER CODE BEGIN readTask3 */BaseType_t xsatus;uint32_t buff115200;/* Infinite loop */for(;;){xsatusxQueueReceive(myQueue01Handle,buff,0);if( xsatus!pdPASS){printf(读取失败\r\n); // printf输出字符串}else{printf(成功读取%d\r\n, buff); // printf输出字符串}osDelay(3000);}/* USER CODE END readTask3 */ } 实验现象 xsatusxQueueSendToBack(myQueue01Handle,buff,portMAX_DELAY);//一直等待if( xsatus!pdPASS){printf(输入失败\r\n); // printf输出字符串}else{printf(成功写入%d\r\n, buff); // printf输出字符串}还一种方式读取不会删除信息偷窥信息 三实验二信号量 信号量是什么适用于什么地方 FreeRTOS中的信号量是一种用于任务间同步和资源共享的机制。它可以用来实现任务之间的互斥访问共享资源或者在某个任务等待某个事件发生时进行阻塞。 FreeRTOS提供了两种类型的信号量二进制信号量Binary Semaphore和计数信号量Counting Semaphore。 二进制信号量是一种简单的信号量只有两种状态空闲和占用。当一个任务获取到二进制信号量时它就可以继续执行而其他任务则会被阻塞。当任务释放二进制信号量时其他任务可以获取到它并继续执行。 计数信号量是一种更复杂的信号量它可以有多个资源可供获取。计数信号量可以用来实现资源池的管理例如限制同时访问某个资源的任务数量。 在FreeRTOS中可以使用以下函数来创建和操作信号量 xSemaphoreCreateBinary(): 创建二进制信号量。xSemaphoreCreateCounting(): 创建计数信号量。xSemaphoreTake(): 获取一个信号量。xSemaphoreGive(): 释放一个信号量。 需要注意的是使用信号量时要确保正确的获取和释放顺序以避免出现死锁或资源竞争的问题。 二值信号量 创建信号量 代码部分 void sendTask1(void const * argument) {/* USER CODE BEGIN sendTask1 */BaseType_t xsatus;uint32_t buff9600;/* Infinite loop */for(;;){if( xSemaphoreTake(myBinarySem01Handle,portMAX_DELAY)!pdPASS){printf(刷新失败#信号量获取失败\r\n); // printf输出字符串}else{printf(成功刷新#信号量获取成功\r\n); // printf输出字符串}osDelay(2000);}/* USER CODE END sendTask1 */ } void readTask3(void const * argument) {/* USER CODE BEGIN readTask3 */BaseType_t xsatus;uint32_t buff115200;/* Infinite loop */for(;;){if( xSemaphoreGive(myBinarySem01Handle)!pdPASS){printf(读取失败#信号量不能释放\r\n); // printf输出字符串}else{printf(成功读取#信号量已经释放\r\n); // printf输出字符串}osDelay(1000);}/* USER CODE END readTask3 */ }实验现象 计数信号量 创建计数信号量 代码部分 void sendTask1(void const * argument) {/* USER CODE BEGIN sendTask1 */BaseType_t xsatus;uint32_t buff9600;/* Infinite loop */for(;;){if( xSemaphoreGive(myCountingSem01Handle)!pdTRUE){printf(停车已满\r\n); // printf输出字符串}else{printf(停车成功\r\n); // printf输出字符串}osDelay(2000);}/* USER CODE END sendTask1 */ } void readTask3(void const * argument) {/* USER CODE BEGIN readTask3 */BaseType_t xsatus;uint32_t buff115200;/* Infinite loop */for(;;){if( xSemaphoreTake(myCountingSem01Handle,0)!pdTRUE){printf(无车\r\n); // printf输出字符串}else{printf(取走车\r\n); // printf输出字符串}osDelay(1000);}/* USER CODE END readTask3 */ } 实验现象 四实验三互斥量 互斥量是什么适用于什么地方 FreeRTOS中的互斥量Mutex是一种用于保护共享资源的同步机制。它可以确保在任何给定时刻只有一个任务可以访问被保护资源以避免竞争条件和数据损坏。 在FreeRTOS中互斥量通过以下API函数进行创建、获取和释放 xSemaphoreCreateMutex()用于创建一个互斥量并返回一个指向该互斥量的句柄。xSemaphoreTake()用于获取锁定互斥量。如果互斥量当前未被锁定则任务可以 获取互斥量并继续执行否则任务将被阻塞直到互斥量可用。xSemaphoreGive()用于释放解锁互斥量。一旦任务完成了对共享资源的访问应该调用此函数来释放互斥量以允许其他任务获取它。 创建互斥量 代码部分 void sendTask1(void const * argument) {/* USER CODE BEGIN sendTask1 */BaseType_t xsatus;uint32_t buff9600;/* Infinite loop */for(;;){osDelay(20);if(xSemaphoreTake(myMutex01Handle,portMAX_DELAY)!pdTRUE){printf(1号你上完厕所下一个就轮到我了\r\n); // printf输出字符串}else{printf(1号现在是我在上厕所\r\n); // printf输出字符串xSemaphoreGive(myMutex01Handle);printf(1号我上完了\r\n); // printf输出字符串} osDelay(2000);}/* USER CODE END sendTask1 */ }/* USER CODE BEGIN Header_sendTask2 */ /** * brief Function implementing the Task2 thread. * param argument: Not used * retval None */ /* USER CODE END Header_sendTask2 */ void sendTask2(void const * argument) {/* USER CODE BEGIN sendTask2 */BaseType_t xsatus;uint32_t buff115200;/* Infinite loop */for(;;){xSemaphoreTake(myMutex01Handle,0); printf(2号我在厕所\r\n); // printf输出字符串osDelay(3000);printf(2号我上完了\r\n); // printf输出字符串xSemaphoreGive(myMutex01Handle);osDelay(2000);}/* USER CODE END sendTask2 */ }/* USER CODE BEGIN Header_readTask3 */ /** * brief Function implementing the read thread. * param argument: Not used * retval None */ /* USER CODE END Header_readTask3 */ void readTask3(void const * argument) {/* USER CODE BEGIN readTask3 */BaseType_t xsatus;uint32_t buff115200;/* Infinite loop */for(;;){if(xSemaphoreTake(myMutex01Handle,0)!pdTRUE){printf(3号厕所有人等一会儿再来\r\n); // printf输出字符串}else{printf(3号到我上小便了\r\n); // printf输出字符串printf(3号我撒完尿了\r\n); // printf输出字符串xSemaphoreGive(myMutex01Handle);} osDelay(1000);}/* USER CODE END readTask3 */ } 实验现象 五实验四事件组 互斥量是什么适用于什么地方 FreeRTOS事件组是一个用于多任务协调和通信的机制。它允许任务等待多个事件同时发生并在事件发生后恢复任务的执行。事件组可以用于线程同步、互斥、事件通知等应用场景。 FreeRTOS事件组由32位的二进制位表示每个事件标志位对应一个事件。任务可以通过等待特定的事件标志位来挂起自己的执行并在其中一个或多个事件标志位被设置时被唤醒。任务还可以使用事件组的API函数来设置或清除特定的事件标志位。 以下是一些常用的FreeRTOS事件组API函数 xEventGroupCreate()创建一个新的事件组。vEventGroupDelete()删除已创建的事件组。xEventGroupSetBits()设置一个或多个事件标志位。xEventGroupClearBits()清除一个或多个事件标志位。xEventGroupWaitBits()等待一个或多个事件标志位被设置。 使用FreeRTOS事件组可以实现任务之间的同步和通信提高系统的可靠性和效率。 **CMSIS_V1不支持创建事件组所以手创建 ** EventGroupHandle_t myEventNULL;//创建句柄 myEvent xEventGroupCreate(); //创建事件组与逻辑事件组 任务代码 /* USER CODE END Header_sendTask1 */ void sendTask1(void const * argument) {/* USER CODE BEGIN sendTask1 */BaseType_t xsatus;uint32_t buff9600;/* Infinite loop */for(;;){printf(1号这个方案我同意了\r\n); // printf输出字符串xEventGroupSetBits(myEvent,0x0001); osDelay(2000);}/* USER CODE END sendTask1 */ }/* USER CODE BEGIN Header_sendTask2 */ /** * brief Function implementing the Task2 thread. * param argument: Not used * retval None */ /* USER CODE END Header_sendTask2 */ void sendTask2(void const * argument) {/* USER CODE BEGIN sendTask2 */BaseType_t xsatus;uint32_t buff115200;/* Infinite loop */for(;;){osDelay(5000);printf(2号这个方案我同意了\r\n); // printf输出字符串xEventGroupSetBits(myEvent,0x0010); }/* USER CODE END sendTask2 */ }/* USER CODE BEGIN Header_readTask3 */ /** * brief Function implementing the read thread. * param argument: Not used * retval None */ /* USER CODE END Header_readTask3 */ void readTask3(void const * argument) {/* USER CODE BEGIN readTask3 */BaseType_t xsatus;uint32_t buff115200;/* Infinite loop */for(;;){buffxEventGroupWaitBits(myEvent,0x0011,pdTRUE,pdTRUE,portMAX_DELAY);//1.句柄2.哪些位3.读完清零4.全部有效(与逻辑)5.等待时间if(buff0x0011){printf(3号好这个方案全票同意\r\n); // printf输出字符串}osDelay(10000);}/* USER CODE END readTask3 */ }实验现象 或逻辑事件组 void sendTask1(void const * argument) {/* USER CODE BEGIN sendTask1 */BaseType_t xsatus;uint32_t buff9600;/* Infinite loop */for(;;){printf(1号这个方案我同意了\r\n); // printf输出字符串xEventGroupSetBits(myEvent,0x0001); osDelay(2000);}/* USER CODE END sendTask1 */ }/* USER CODE BEGIN Header_sendTask2 */ /** * brief Function implementing the Task2 thread. * param argument: Not used * retval None */ /* USER CODE END Header_sendTask2 */ void sendTask2(void const * argument) {/* USER CODE BEGIN sendTask2 */BaseType_t xsatus;uint32_t buff115200;/* Infinite loop */for(;;){osDelay(5000);printf(2号这个方案我同意了\r\n); // printf输出字符串xEventGroupSetBits(myEvent,0x0010); }/* USER CODE END sendTask2 */ }/* USER CODE BEGIN Header_readTask3 */ /** * brief Function implementing the read thread. * param argument: Not used * retval None */ /* USER CODE END Header_readTask3 */ void readTask3(void const * argument) {/* USER CODE BEGIN readTask3 */BaseType_t xsatus;uint32_t buff115200;/* Infinite loop */for(;;){buffxEventGroupWaitBits(myEvent,0x0011,pdTRUE,pdFALSE,portMAX_DELAY);//1.句柄2.哪些位3.读完清零4.全部有效(与逻辑)5.等待时间if((buff0x0010)||(buff0x0001)){printf(3号好方案通过下一个方案\r\n); // printf输出字符串}}/* USER CODE END readTask3 */ }实验现象 六实验五任务通知
http://www.zqtcl.cn/news/486356/

相关文章:

  • 茶叶网站建设一般的风格加大志愿服务网站建设
  • 湖州医院网站建设方案网页游戏知乎
  • 以网站建设为开题报告临海门户网站住房和城乡建设规划局
  • 河南省大型项目建设办公室网站wordpress置顶功能
  • 奉化网站建设三合一网站建设多少钱
  • wordpress文章页怎么调用网站图片wordpress菜单锚点定位
  • 网站建设运营合作合同网站建设英文合同
  • wordpress chrome插件开发图片式网站利于做优化吗
  • 如何做好品牌网站建设策划app要有网站做基础
  • 横沥网站建设公司wordpress运行php
  • 南皮网站建设价格网络推广这个工作好做吗
  • 长安大学门户网站是谁给做的网站排名logo怎么做
  • 襄樊做网站做网站做网站
  • 百度做网站续费费用网站开发的可行性
  • 电子商务网站建设效益分析如何才能做好品牌网站建设策划
  • 能打开各种网站的浏览器app文章目录wordpress
  • 网站注册页面html中国建设招标网网站
  • 云南网站设计海外直购网站建设方案书范文
  • 网站视频小程序商城多少钱
  • 美耐皿 技术支持 东莞网站建设如何将网站指向404
  • 如何做网站的维护和推广wordpress首页在哪里修改
  • 网站建设公司在哪里宣传网站群系统建设的目的
  • 建立网站的教学书籍最新网站建设哪家公司好
  • 视频网站开发者工具科技网站新版网站上线
  • 网站设计简单网页百度提交网站
  • 建设企业网站网站崩溃西安百度网站快速排名
  • 前端 国外 网站请人做网站得多少钱
  • 微商如何做网站引流上海市有哪些公司
  • 服务类型网站开发需要哪些技术中国设计师网效果图
  • 电子商务网站建设技术有哪些方面做婚礼请柬的网站有哪些