stm32CubeMX freertos 二值信号量
2022/6/2 23:21:12
本文主要是介绍stm32CubeMX freertos 二值信号量,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
freerots系统配置参考: http://www.javashuo.com/article/p-tkjzlcdb-na.html
其它保持默认。
代码实现:
//将二值信号量设置为全局变量: //osSemaphoreId myBinarySem01Handle; //osStaticSemaphoreDef_t myBinarySem01ControlBlock; //赋值添加关键字保存在.h文件中 extern osSemaphoreId myBinarySem01Handle; extern osStaticSemaphoreDef_t myBinarySem01ControlBlock;
用到的信号量函数为:具体查看代码说明
/** Semaphore Management Functions **/ osSemaphoreId osSemaphoreCreate (const osSemaphoreDef_t *semaphore_def, int32_t count);//创建信号量 osStatus osSemaphoreRelease (osSemaphoreId semaphore_id);//释放信号量 int32_t osSemaphoreWait (osSemaphoreId semaphore_id, uint32_t millisec);//等待获取信号量 osStatus osSemaphoreDelete (osSemaphoreId semaphore_id);//信号量删除
二值信号量使用:
1. 信号发生
BaseType_t xHigherPriorityTaskWoken = pdFALSE; ........... if(myBinarySem01Handle != NULL)//正确创建二值信号量后进入判断 { osSemaphoreRelease(myBinarySem01Handle);////释放二值信号量 portYIELD_FROM_ISR(xHigherPriorityTaskWoken );//需要的话进行一次任务切换,不在中断中使用 portYIELD(); }
2.信号接收
void MYTask(void const * argument) { /* USER CODE BEGIN StartTask02 */ BaseType_t err = pdFALSE; /* Infinite loop */ for(;;) { if(myBinarySem01Handle != NULL)//正确创建二值信号量后进入判断 { err = osSemaphoreWait(myBinarySem01Handle,osWaitForever); if(err == osOK) { //HAL_UART_Transmit_DMA(&huart1,(uint8_t *)str2,sizeof(str2)); .............. } } osDelay(10); } /* USER CODE END StartTask02 */ }
搜索
复制
这篇关于stm32CubeMX freertos 二值信号量的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-11-13Slicm 框架怎么进行用户认证?-icode9专业技术文章分享
- 2024-11-13在查询时将 map_coord 列的值转换为字符串有哪些方法?-icode9专业技术文章分享
- 2024-11-13如何将微信地区改成自定义文案?-icode9专业技术文章分享
- 2024-11-13DNS 缓存存在问题有哪些症状和解决方法?-icode9专业技术文章分享
- 2024-11-13HTTP 状态码(405)-Method Not Allowed是什么意思?-icode9专业技术文章分享
- 2024-11-13HTTP 状态码(500)-Internal Server Error是什么意思?-icode9专业技术文章分享
- 2024-11-13在 Element UI 中无法修改 $confirm 的取消按钮文字是什么原因?-icode9专业技术文章分享
- 2024-11-13unity XR是什么?-icode9专业技术文章分享
- 2024-11-13伴随矩阵是什么?-icode9专业技术文章分享
- 2024-11-13怎么使用grep -E 来查找匹配最后 2 条数据?-icode9专业技术文章分享