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/cc2650:任务变量范围、堆栈大小和其他问题

Guru**** 2582405 points
Other Parts Discussed in Thread: CC2650

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

https://e2e.ti.com/support/wireless-connectivity/bluetooth-group/bluetooth/f/bluetooth-forum/594301/rtos-cc2650-task-variable-scope-stack-size-and-other-questions

器件型号:CC2650

工具/软件:TI-RTOS

您好!

  1. 在 cc2650内创建任务时、可以选择在"MAU"(存储器分配单元)中为其提供堆栈大小。 内存分配单元有多少字节? 我假设它是1个字节 、但我不确定。
  2. 在 cc2650内创建两个或多个同时运行的任务时、是否所有任务都共享在其本地范围内声明的变量?
  3. 由于每个任务都有分配的堆栈大小、我假设对整个堆栈有最大的分配。 最大堆栈大小是多少?
  4. 在 cc2650内使用 malloc()时,我将假定内存被分配给堆。 我如何知道我可以向堆分配多少数据?

谢谢你

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

    您好、Anthony、

    [引用 user="Anthony Andreoli]]在 cc2650内创建任务时、可以选择在"MAU"(内存分配单元)中为其提供堆栈大小。 内存分配单元有多少字节? 我假设它是1个字节 、但我不确定。

    对于某些器件、MAU 不是8位。 例如、在 C2000上、"字节"是16位。 我们使用 MAU (Miniminal 可寻址单元)、而不是使字节的含义过载。

    [引用 user="Anthony Andreoli"]在 cc2650内创建两个或多个同时运行的任务时,所有任务是否共享在其本地范围内声明的变量?

    否 局部变量是该线程的局部变量。 让我们看一下以下示例

    Int someGlobal;

    genericTaskEntryFxn()//在您有一个工作任务时很有用。 您可以传入 arg0和 arg1以告知任务要执行的操作。

      内部条;

      static int index;//只需使其完成!

      (笑声)

    任务1 EntryFxn (0)

      Int foo;

      (笑声)

    假设您使用以下输入函数创建三个任务

    任务1:任务1 EntryFxn

    任务2:genericTaskEntryFxn

    任务3:genericTaskEntryFxn

    所有任务都可以访问 myGlobal。

    只有 Task1可以访问 foo。 (实际上、它实际上是 Task1的入口函数任务1 EntryFxn 可以访问 foo)。

    任务2和任务3的堆栈上都有其本地的条形图副本。 因此、如果 task2更改了 bar、它不会影响 task3的 bar

    索引会变得有点棘手、因为它是静态的。 这实际上是一个仅对 genericTaskEntryFxn 可用的全局变量。 但是、由于任务2和任务3具有相同的整个函数、因此它们共享本地静态索引变量。 换句话说、如果任务2更改索引、任务3会看到新值。 有关更多详细信息、请参阅任何 C 手册中函数中的静态用法。

    [引用 user="Anthony Andreoli]]由于每个任务都有分配的堆栈大小、我假设整个堆栈的分配最大。 最大堆栈大小是多少?

    不是真的。 您只受您拥有的内存量的限制。  

    [引用 user="Anthony Andreoli]]在 cc2650内使用 malloc()时,我将假定内存已分配给堆。 我如何知道可以分配给堆的数据量?[/quot]

    堆的大小在.cfg 文件中设置。 它可能使用链接器文件中定义的变量、也可能只是硬编码值。 您可以在 CCS->Tools->RTOS Object View (ROV)->HeapMem 中查看堆中(初始和当前)的内存量。

    Todd

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    非常感谢您的答复。 此外、您还提到了对于 C2000模型、一个 MAU 是16位、这也适用于 C2650吗?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    不。 CC26xx 是 CortexM 器件。 CortexM 器件是您的标准8位可寻址 MCU。