微控制器:为多任务设置链接描述文件
Microcontroller: Setting up Linker Script for Multitasking
在微控制器上实现多线程程序时设置链接描述文件的正确方法是什么?
你是在自己的ram段中定义任务栈指针,然后为每个任务声明多个段吗?或者有更好的方法吗?
没有“正确”的方法。
一种常见的方法是在 C 中为每个任务(以及信号量等的控制块)静态声明堆栈,因此它们位于 .data
或 .bss
部分。
另一种更适合大型微控制器的方法是使用堆分配。这可能看起来容易出错,但它被广泛使用。只要所有任务和其他资源都是在执行开始时创建的,那么它们的放置将接近于确定性,只要系统有足够的内存总量,分配失败的可能性就很小。
在链接描述文件中指定每个任务的详细信息将是一项繁重的工作,而且很不寻常。它可能稍微更有效率(例如:没有不必要的堆栈 space 归零只是因为它在 .bss
中)但维护起来会困难得多。
如果您的系统有多个速度不同的 RAM 组,您可能希望将一些东西放在较快的 RAM 中,而另一些放在较慢的 RAM 中,但我不会推荐更多。
在微控制器上实现多线程程序时设置链接描述文件的正确方法是什么?
你是在自己的ram段中定义任务栈指针,然后为每个任务声明多个段吗?或者有更好的方法吗?
没有“正确”的方法。
一种常见的方法是在 C 中为每个任务(以及信号量等的控制块)静态声明堆栈,因此它们位于 .data
或 .bss
部分。
另一种更适合大型微控制器的方法是使用堆分配。这可能看起来容易出错,但它被广泛使用。只要所有任务和其他资源都是在执行开始时创建的,那么它们的放置将接近于确定性,只要系统有足够的内存总量,分配失败的可能性就很小。
在链接描述文件中指定每个任务的详细信息将是一项繁重的工作,而且很不寻常。它可能稍微更有效率(例如:没有不必要的堆栈 space 归零只是因为它在 .bss
中)但维护起来会困难得多。
如果您的系统有多个速度不同的 RAM 组,您可能希望将一些东西放在较快的 RAM 中,而另一些放在较慢的 RAM 中,但我不会推荐更多。