硬汉嵌入式论坛

 找回密码
 立即注册
查看: 1473|回复: 1
收起左侧

[FreeRTOS] FreeRTOS CAN中断使用信号量不能接收数据

[复制链接]

2

主题

10

回帖

16

积分

新手上路

积分
16
发表于 2024-7-3 15:58:24 | 显示全部楼层 |阅读模式
芯片:STM32F723VGT3
使用CubeMX生成的CMSIS-V2版本的FreeRTOS
创建了一个二值信号量用来同步CAN接收数据
问题:使用标志位可以接收数据,但是信号量不行


这个是can中断函数


extern osSemaphoreId_t CAN_Recv_SemHandle;
int flag_can_recv = 0;
void HAL_FDCAN_RxFifo0Callback(FDCAN_HandleTypeDef *hfdcan, uint32_t RxFifo0ITs)
{
  if((RxFifo0ITs & FDCAN_IT_RX_FIFO0_NEW_MESSAGE) != RESET)
  {
                if(hfdcan == &hfdcan1)
                {
                   flag_can_recv = 1;
                   //osSemaphoreRelease(CAN_Recv_SemHandle);
                }

        }
}


这个是can数据接收任务

    for(;;)
    {

       if(flag_can_recv == 1)
      //if(osSemaphoreAcquire(CAN_Recv_SemHandle, osWaitForever) == osOK)
        {
        flag_can_recv = 0;
        if(HAL_FDCAN_GetRxMessage(&hfdcan1,FDCAN_RX_FIFO0, &fdcan_RxHeader, can_rx_data) == HAL_OK)
        {
          //fdcanx_send_data(&hfdcan1, 0x111, can_rx_data, 8);
          //printf("ID=0x%x\r\n",fdcan_RxHeader.Identifier);



        }
       }
     }



信号量创建.png
回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
117512
QQ
发表于 2024-7-4 09:48:24 | 显示全部楼层
1、提前创建了没
2、使用CMSIS-RTOS V2封装层,依然要注意在FreeRTOS控制的中断范围内,才可以调用其API。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|小黑屋|Archiver|手机版|硬汉嵌入式论坛

GMT+8, 2025-8-12 06:08 , Processed in 0.036317 second(s), 27 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

快速回复 返回顶部 返回列表