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/TM4C123GH6PM:缓冲区大小-生产者使用者模型

Guru**** 2609955 points


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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/764574/rtos-tm4c123gh6pm-buffer-size---producer-consumer-model

器件型号:TM4C123GH6PM

工具/软件:TI-RTOS

大家好、

我提前很抱歉地问过相对不相关的问题、但我100%肯定的是、这是专家可以为您提供正确指导的确切论坛(感谢 TI)。 我正在从事一个涉及 CAN 通信的 TI-RTOS 项目。 我有几个 TSK;一个(具有更高优先级)通过捕获 CAN 消息并将其放入适当的缓冲器(队列)来生成数据、而其他任务则从队列读取消息并处理它们。 因此、任务之间有一个生产者使用者模型。 我的问题是:

  • 假设生成者以 X 字节/秒的速度生成数据、其他任务可以以 Y 字节/秒的速度处理数据 那么、是否有任何关系可以让人知道任务之间的缓冲区大小应该是多少?

简单地说、如何估算两个任务之间实现生产者-使用者模型的队列大小?

此致、  

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好!
    我对队列的理解是队列大小仅受内存限制–它可以是您喜欢的大小–您无需预先定义。 如果您不知道系统在启动时的确切需求,队列应该能够根据运行时的需求进行扩展/收缩。

    SYS/BIOS 用户指南的第4.5节介绍了队列、其中提供了各种 API 来询问队列的运行时使用情况。 www.ti.com/.../spruex3u.pdf。如果使用者线程由于某种原因而死机、并且从不接收来自生产者线程的信标信号、则生产者可以在压倒队列之前很好地发现队列。 这是我对这种情况的了解。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    感谢您的回复。

    这意味着没有数学计算可以让我们了解队列大小?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    我不是 TI-RTOS 专家、但我认为您可以确定队列大小。 该消息将包含程序员决定创建的任何内容–它只是程序员定义的结构。 它可以保存指针、缓冲区、变量、无论您喜欢什么。 您可以使用 sizeof()来确定邮件的大小,然后根据可能有多少邮件处于未处理状态来确定队列的缓冲空间大小。