标签:err freertos myBinarySem01Handle osSemaphoreId 信号量 semaphore 二值
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 */ }
搜索
复制
标签:err,freertos,myBinarySem01Handle,osSemaphoreId,信号量,semaphore,二值 来源: https://www.cnblogs.com/ysyyrps-hhl/p/16339102.html
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。