首页 > 解决方案 > xTaskCreate 函数如何不遵循 C 程序方法?

问题描述

freertos 代码是用 C 语言编写的。而C语言是过程语言,也就是说如果A函数调用B函数,B函数调用C函数,程序会先完成C函数,然后返回B,然后完成B函数,然后返回A然后完成A 函数工作。如果在任何情况下函数 C 在其中无限循环,则 C 函数永远不会返回到 A。

问题是,如果 A 函数创建xTaskCreate任务并传递无限循环函数,那么xTaskCreate函数会继续运行无限循环函数,并且我们可以在之后在 A 函数中做其他事情xTaskCreate

但问题是xTaskCreateC函数接受一些参数,当我们通过无限循环传递函数时,为什么它没有卡在那个无限循环中?

我应该解释更多吗,我的问题?

标签: cfreertos

解决方案


xTaskCreate不运行任务功能。相反,它将任务函数添加到某种列表中,该列表保留任务的函数指针。任务函数在 RTOS 内核(调度程序)决定运行该函数时运行。

RTOS 能够抢占任何任务,因为它使用硬件中断,这可能随时发生,除非它们被禁用。正如它们的名字所暗示的那样,中断不需要等待函数返回。应该至少有一个与 RTOS 相关的中断,它在触发时运行调度程序。

RTOS 能够切换执行上下文,因为它可以访问硬件程序计数器和堆栈指针寄存器。当然,它在切换之前将当前任务的当前状态保存在某个内存结构中,以便以后可以继续执行该任务。

这个答案是对 RTOS 概念的非正式且有些不完整的总结。OP 需要熟悉通用操作系统和多任务概念。


推荐阅读