This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

[参考译文] RTOS:1个资源的信标、但将多次发布

Guru**** 2595800 points


请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/587436/rtos-semaphore-for-1-resource-but-will-be-post-many-times

工具/软件:TI-RTOS

您好!

 BIOS_User_Guide (包含最新的 BLE 3.0堆栈 SDK simplelink_cc2640r2_sdk_1_30_00_25)的第110页上指出:

" 信标加1的最大计数值是计数信标可以协调的任务数"

在我的项目中,有三项工作任务:第一项是消费者,其他两项都是生产者。  

耗电元件将在信号量上挂起、因此该任务等待来自生产者的信号。
我现在有疑问。 正如指南中所述,该信标的最大计数值将是2 (2 + 1 =3),对吧?

因此、当消费者在做某件事(可能很耗时)并且两个生成者在此期间发布超过2个信号时、某些事件将会丢失(因为该信标计数值不超过2)。

我如何处理这种情况?

 

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好!

    不确定这条评论是如何错误地进入 UG...it's 的! 我为此打开了一个文档错误。

    应该指出的是、计数器为16位并且在断言被禁用的情况下、一个翻转条件将导致信号量在一个后续的 Semaphore_pend()调用中悄悄地变为空。

    Todd
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    那么、我可以使用信号量来计算信号的值吗?

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    我不理解您的问题。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    在我看来 、信标的当前计数值意味着我们现在可以使用的可用资源。

    例如、如果生产者任务调用 semaphore_post 5次、那么信号量的计数值应该是5、对吧?

    我担心信号量的最大计数值受到 TI RTOS 的限制、它声明" 信号量的最大计数值加1是计数信号量可以协调的任务数"。

    因此、我只想确保 在一个项目(1个消费者和2个生产者)中、如果生产者任务调用  semaphore_post 5次、那么信标的实际值是多少? 5还是2? (2是我从文档中得到的值、因为信标可以协调的任务数为3、 3 - 1 = 2)。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好!
    正如 Todd 在之前提到的、信标计数将为5。
    正如他也提到的、如果你在计数为65535时布置一个信标、计数将返回0 (即空)。
    此致、
    米歇尔
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    非常感谢!