c - xTaskCreate 函数如何不遵循 C 程序方法?
问题描述
freertos 代码是用 C 语言编写的。而C语言是过程语言,也就是说如果A函数调用B函数,B函数调用C函数,程序会先完成C函数,然后返回B,然后完成B函数,然后返回A然后完成A 函数工作。如果在任何情况下函数 C 在其中无限循环,则 C 函数永远不会返回到 A。
问题是,如果 A 函数创建xTaskCreate
任务并传递无限循环函数,那么xTaskCreate
函数会继续运行无限循环函数,并且我们可以在之后在 A 函数中做其他事情xTaskCreate
。
但问题是xTaskCreate
C函数接受一些参数,当我们通过无限循环传递函数时,为什么它没有卡在那个无限循环中?
我应该解释更多吗,我的问题?
解决方案
xTaskCreate
不运行任务功能。相反,它将任务函数添加到某种列表中,该列表保留任务的函数指针。任务函数在 RTOS 内核(调度程序)决定运行该函数时运行。
RTOS 能够抢占任何任务,因为它使用硬件中断,这可能随时发生,除非它们被禁用。正如它们的名字所暗示的那样,中断不需要等待函数返回。应该至少有一个与 RTOS 相关的中断,它在触发时运行调度程序。
RTOS 能够切换执行上下文,因为它可以访问硬件程序计数器和堆栈指针寄存器。当然,它在切换之前将当前任务的当前状态保存在某个内存结构中,以便以后可以继续执行该任务。
这个答案是对 RTOS 概念的非正式且有些不完整的总结。OP 需要熟悉通用操作系统和多任务概念。
推荐阅读
- javascript - onkeyup、onkeydown 和 onpaste 事件在 Android 设备上不起作用
- sql - 应用程序设计强制查询结构。查询从 Join 返回重复的结果。如何使用有限的选项修复结果集?
- r - R.Shiny 将输入转换为字符串
- sql - 计数不提供总值
- css - 在弹出表中滚动 tr/element
- cmake - CMake add_custom_command 因 bin/sh:1 失败:...未找到
- excel - 如何为多变量索引匹配公式创建 UDF
- c - 纯 C:使用指针复制二维数组的行和列
- database - 如何在数据仓库中存储采购元数据
- django - 如何在一个应用程序中的两个模型之间建立反向关联?