OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 772|回复: 1

CMSIS RTOS 信号量问题与优先级问题

[复制链接]

28

主题

360

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1027
金钱
1027
注册时间
2021-2-4
在线时间
146 小时
发表于 2024-4-10 16:41:38 | 显示全部楼层 |阅读模式
10金钱
在学习RTOS的信号量 写了个信号量的小实验 但是如果两个任务优先级相同的话就不会执行信号量获取任务,将获取的任务优先级提高一级就好了


按照我的理解 释放任务中 按键按下 释放成功后 执行到 osDelay(20)
当前任务进入了等待后就应该可以执行信号量获取任务了

  1. void Start_Receive_Task(void *argument)
  2. {
  3.     osStatus_t Temp = osOK;

  4.     for (;;)
  5.     {
  6.         Temp = osSemaphoreAcquire(Binary_Sem01Handle, osWaitForever); // 获取二值信号量 一直等待
  7.         if (Temp == osOK)
  8.         {
  9.             printf("Binary_Sem01Handle二值信号量获取成功\r\n");
  10.         }
  11.     }
  12. }

  13. void Start_Transmit_Task(void *argument)
  14. {
  15.     osStatus_t Temp = osOK;

  16.     Temp = Temp;

  17.     for (;;)
  18.     {
  19.         if (BSP_KEY_Scan(KEY0) == SET)
  20.         {
  21.             Temp = osSemaphoreRelease(Binary_Sem01Handle); // 给出二值信号量

  22.             if (Temp == osOK)
  23.             {
  24.                 printf("Binary_Sem01Handle二值信号量释放成功\r\n");
  25.             }
  26.             else
  27.             {
  28.                 printf("Binary_Sem01Handle二值信号量释放失败\r\n");
  29.             }
  30.         }
  31.         osDelay(20);
  32.     }
  33. }
复制代码


正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

0

主题

11

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
348
金钱
348
注册时间
2013-11-27
在线时间
47 小时
发表于 2024-7-8 09:01:14 | 显示全部楼层
应该同优先级是没有问题的啊。
另外,你两个任务中,同时使用了串口printf,应该要做互斥保护。
回复

使用道具 举报

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

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2024-11-22 10:41

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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