FreeRTOS 任务间同步和通信方法

以下在CMSIS V2代码下实现,不区分是否中断安全。

1、信号量 semaphores

/* Definitions for adcFinishedBinSem */
osSemaphoreId_t adcFinishedBinSemHandle;
const osSemaphoreAttr_t adcFinishedBinSem_attributes = {
  .name = "adcFinishedBinSem"
};

/* Create the semaphores(s) */
/* creation of adcFinishedBinSem */
adcFinishedBinSemHandle = osSemaphoreNew(1, 1, &adcFinishedBinSem_attributes);

/* How to use */
osSemaphoreRelease(adcFinishedBinSemHandle);
osSemaphoreAcquire(adcFinishedBinSemHandle,osWaitForever);

2、事件标志 EventFlag

/* Definitions for pcADCCmdEvent */
osEventFlagsId_t pcADCCmdEventHandle;
const osEventFlagsAttr_t pcADCCmdEvent_attributes = {
  .name = "pcADCCmdEvent"
};

/* creation of pcADCCmdEvent */
pcADCCmdEventHandle = osEventFlagsNew(&pcADCCmdEvent_attributes);

/* how to use: osFlagsNoClear,osFlagsWaitAny,osFlagsWaitAll*/
#define ADC_CTRL    ( 1 << 0 )

osEventFlagsSet(pcADCReadEventHandle, ADC_CTRL);

osEventFlagsClear(pcADCReadEventHandle, ADC_CTRL);

pcADCReadEvenFlag = osEventFlagsWait(pcADCReadEventHandle, ADC_CTRL, osFlagsNoClear, osWaitForever); 
if((pcADCReadEvenFlag&0x01) == 0x01){
    
}

3、互斥 Mutex

/* Definitions for algorithmResutMutex */
osMutexId_t algorithmResutMutexHandle;
const osMutexAttr_t algorithmResutMutex_attributes = {
  .name = "algorithmResutMutex"
};

/* creation of algorithmResutMutex */
algorithmResutMutexHandle = osMutexNew(&algorithmResutMutex_attributes);

/* how to use */
osMutexWait(algorithmResutMutexHandle,osWaitForever);
osMutexRelease(algorithmResutMutexHandle);

3、消息队列 Queue

/* Definitions for usartRxMsgQueue */
osMessageQueueId_t usartRxMsgQueueHandle;
const osMessageQueueAttr_t usartRxMsgQueue_attributes = {
  .name = "usartRxMsgQueue"
};

/* Create the queue(s) */
/* creation of usartRxMsgQueue */
usartRxMsgQueueHandle = osMessageQueueNew(2, sizeof(USART_RECEIVETYPE), &usartRxMsgQueue_attributes);

/* how to use */
osMessageQueuePut(usartRxMsgQueueHandle,&Uart1Rx,1,0);
osMessageQueueGet(usartRxMsgQueueHandle,(void*)&pUARTRx,NULL,osWaitForever);

 

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值