最近我一直在为 ARM 和 PIC 设备开发自己的 RTOS,因此我正在分析当前的 RTOS 概念。我在学习FreeRTOS时有一些疑问,
它如何处理函数变量?我们如何管理函数内的变量?
Ex-1:
我们在两个线程中使用函数 A 和 B 声明了一个局部变量“i” FreeRTOS,但函数 A 的变量“i”受函数 B 影响。
Ex-2:
我们有两个线程 A 、 B 和一个像延迟这样的函数。但线程 A 和 B 都调用相同的函数delay
。 FreeRTOS 如何将单个延迟资源分配给两个线程(A 和 B)?
最佳答案
在函数中声明的变量被放置在堆栈上。线程有不同的堆栈,因此它们的函数局部变量也不同。
这是第二个问题的答案。对于延迟,操作系统必须为每个线程创建数据结构。例如,delay
参数将有一个delta 来延迟。 delta最小的线程被唤醒;但是当第一个线程运行时,会设置第二个线程的计时器中断。如果第二个线程具有更高的优先级,则会在中断时将其唤醒(如果没有,则将其置于就绪状态)。堆栈和延迟状态由操作系统按列表或其他数据结构中的每个任务进行全局管理。
关于c - freeRTOS如何在切换线程时维护函数变量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34876814/