【发布时间】:2020-12-04 13:42:09
【问题描述】:
我是 FreeRTOS 和实时操作系统的新手。我想知道在 FreeRTOS 任务中实现功能是否是一种好的编程风格。举例
void displayTask(void* param) {
static void Factorial (params) {
// doSth
}
for(;;) {
//call it here
Factorial(params);
}
}
还是只在任务之外实现它更好?因为如果我有很多功能,我猜想阅读代码会很困难。
【问题讨论】:
-
取决于您的功能。如果您在其中做繁重的工作,我的意思是,长时间消耗 CPU 的工作说 10 毫秒,那么这样做不是一个好习惯。但是,如果你的函数做了一些不会大量消耗 CPU 的工作,例如只需进行一些基本计算并快速返回就不会出现问题。
-
标准 C 中不允许嵌套函数。GNU C 编译器将其作为 GNU 扩展支持。 FreeRTOS 任务只是具有特定参数列表的 C 函数。
-
@Kozmotronik 您是否可能误读了这个问题?这不是关于是否应该从任务中调用函数,而是函数定义是否应该出现在任务函数中嵌套。这是一个坏主意,因为它不是有效的 C,而不是因为函数的运行时。这在任何情况下都无关紧要,因为它是一个抢占式调度程序,只要使用 RMA 原则通过适当的优先级分配来满足实时截止日期,低优先级任务长时间运行可能是完全合法的。
-
@Clifford 你是对的,我误读了这个问题。