[信息] 二值信号量--FreeRtos

[复制链接]
2024|15
 楼主| Larm1 发表于 2016-1-15 14:32 | 显示全部楼层 |阅读模式
      最近在捣腾FreeRtos操作系统,整体感觉还是蛮简单的,但是有个现象不知道是否正确:

     使用
     vSemaphoreCreateBinary(SemaTest);     ////创建 SemaTest二值信号量;

     在中断中触发信号量:
      void xxxHandle(void)
      {
        ....
        xSemaphoreGiveFromISR(semphr);
        ....
      }

      在任务中调用信号量:
      void TaskTest(void)
      {
          for(; ;)
          {
           ....
           xSemaphoreTake(semphr, portMAX_DELAY );
           ....
          }
      }

      现象:在程序没有进中断时,任务TaskTest也可以成果获取到一次信号量。

      跟踪了代码,发现二值信号量创建后初始值默认为1,所以可以成功获取到一次。
      不像uCOSIII中,在创建信号量时可以同时给定初始值。
 楼主| Larm1 发表于 2016-1-18 22:17 来自手机 | 显示全部楼层
菜鸟学习中,请多多指教…
大果仁儿 发表于 2016-1-25 15:49 | 显示全部楼层
菜鸟表示看不懂。。。
Brand2 发表于 2016-1-25 21:48 | 显示全部楼层
FreeRtos操作系统和ucos比,谁好用些,更容易掌握
Bermanrep 发表于 2016-1-31 16:07 | 显示全部楼层
这个信号量和ucos ii中的信号量有什么区别啊
 楼主| Larm1 发表于 2016-3-16 17:21 | 显示全部楼层
Brand2 发表于 2016-1-25 21:48
FreeRtos操作系统和ucos比,谁好用些,更容易掌握

个人认为前者比较简单,也比较容易掌握些,因为任务间的同步机制比较少一点...
 楼主| Larm1 发表于 2016-3-16 17:23 | 显示全部楼层
Bermanrep 发表于 2016-1-31 16:07
这个信号量和ucos ii中的信号量有什么区别啊

FreeRtos中的信号量其实质是队里, 即由队里简化而来...
zcw9911 发表于 2016-3-16 17:51 | 显示全部楼层
初始化信号量的时候xSemaphoreTake信号量一次即可。
 楼主| Larm1 发表于 2016-3-24 17:31 | 显示全部楼层
对,智能这样了...
dsyq 发表于 2017-7-12 16:22 | 显示全部楼层
我就想它初始化后默认为0啊!
734774645 发表于 2017-7-12 18:10 | 显示全部楼层
没玩过这个概念。
东方教主 发表于 2017-7-14 08:56 | 显示全部楼层
已经用在一个项目中了,就用了队列和互斥
 楼主| Larm1 发表于 2017-7-14 18:25 | 显示全部楼层
东方教主 发表于 2017-7-14 08:56
已经用在一个项目中了,就用了队列和互斥

huangcunxiake 发表于 2017-7-15 22:33 | 显示全部楼层
跑系统浪费硬件,追求超低功耗就要裸奔
 楼主| Larm1 发表于 2017-7-16 10:06 | 显示全部楼层
huangcunxiake 发表于 2017-7-15 22:33
跑系统浪费硬件,追求超低功耗就要裸奔

最近在搞低功耗,也会是这个感觉...
LMCH 发表于 2017-7-16 21:40 | 显示全部楼层
计数信号量可以设初值
您需要登录后才可以回帖 登录 | 注册

本版积分规则

个人签名:大爱无疆

53

主题

389

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部