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/TM4C1294KCPDT:全局阵列作为 TI-RTOS 中任务的堆栈

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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/781401/rtos-tm4c1294kcpdt-global-array-as-a-stack-for-a-task-in-ti-rtos

器件型号:TM4C1294KCPDT

工具/软件:TI-RTOS

尊敬的 SupportTeam:

在 TI-RTOS 中创建任务时、假设该任务所需的最大堆栈为 w.r.t、我们会声明 x 大小的全局数组并将其传递给 Task_Params 堆栈成员。 此全局数组将位于.bss 段中。

根据我的理解、在这种情况下、即使我们在代码实际运行时不启动任务、即使任务终止后、也会消耗器件 RAM、任何其他函数/任务都无法使用该部分 RAM。 是这样吗?

谢谢、此致

Abhijit

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    如果在.cfg 文件中创建任务、堆栈将放置在.bss 中。 您不能删除静态创建的任务、因此堆栈保持不变。 注意如果您提供了堆栈、则可以根据需要管理存储器。

    如果您在运行时(通过 Task_create 或 Task_con构)创建(或构造)任务、和
    -您不提供堆栈、它从堆中分配出来
    -您提供堆栈、它是您拥有堆栈的地方。

    如果删除运行时创建的任务并在创建(或 Task_con构)上提供了堆栈、则由您来管理存储器(例如、将其用于其他用途)。

    如果删除运行时创建的任务并且不在创建(或 Task_con构)上提供栈、Task_delete (或 Task_析 构)将释放栈(在 Task_create 或 Task_con构 中分配的堆栈)。

    关于终止的任务(例如从输入函数失败或调用 Task_exit)、请查看 Task_deleteTerminatedTasks 以查看采取的操作。

    有关不同分配类型的更多详细信息、请查看此 文档:processors.wiki.ti.com/.../TI-RTOS_Object_Creation_Comparison

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

    感谢 Todd 的回答