c - freeRTOS如何在切换线程时维护函数变量?

标签 c operating-system embedded freertos

最近我一直在为 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/

相关文章:

c - Pantheios 滚动文件附加程序?

configuration - AUTOSAR 操作系统配置示例

c - 尝试为文件 IO : 创建多个线程时出现段错误

c - 如何将数组分配给C中的特定内存地址

c++ - 返回类型为 struct 的函数在每次调用时不返回任何内容

c - 如何在 sdcc 内联汇编中推送变量?

c - 以更少的开销获取代码中的调用堆栈?

c - 上层函数

c++ - _Bool 和 bool : How do I solve the problem of a C library that uses _Bool?

c++ - C可以用来捕获机器上的系统调用吗?