STM32CUBEMX+FreeRTOS 信号量的使用,记录一个问题

默认配置创建的FreeRTOS 工程,手动在任务中创建信号量,没有配置configUSE_COUNTING_SEMAPHORES

 所以创建的都是二值量

osSemaphoreDef(Log_rx_Sem);
log_rx_SemHandle = osSemaphoreCreate(osSemaphore(Log_rx_Sem), 1); 

使用中发现,信号量有初值,创建完即可收到信号量。

在线调试发现创建过程中,创建函数判断semaphore_def->controlblock == NULL,故而调用的函数为老版本函数vSemaphoreCreateBinary(sema);已知老版本函数是有初值的,新版本函数xSemaphoreCreateBinary()没有初值,无奈只能直接使用xSemaphoreCreateBinary()来创建。

osSemaphoreId osSemaphoreCreate (const osSemaphoreDef_t *semaphore_def, int32_t count)
{ 
#if (configSUPPORT_STATIC_ALLOCATION == 1 ) && ( configSUPPORT_DYNAMIC_ALLOCATION == 1 )

  osSemaphoreId sema;
  
  if (semaphore_def->controlblock != NULL){
    if (count == 1) {
      return xSemaphoreCreateBinaryStatic( semaphore_def->controlblock );
    }
    else {
#if (configUSE_COUNTING_SEMAPHORES == 1 )
      ret
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值