gpt4 book ai didi

c - 将任务划分为功能是有益还是有害?

转载 作者:行者123 更新时间:2023-11-30 18:28:02 24 4
gpt4 key购买 nike

我正在使用 C 语言处理嵌入式系统(主要是 ARM Cortex M3-M4)。并且想知道将任务划分为许多函数的优点/缺点是什么,例如;

   void Handle_Something(void)
{
// do Task-1
// do Task-2
// do Task-3
//etc.
}

void Hanlde_Something(void)
{
// Handle_Task1();
// Handle_Tasl2();
//etc.
}

如何在堆栈使用和整体处理速度方面检查这两种方法,以及哪种方法更安全/更好,原因是什么? (您可以假设这不属于 ISR)

据我所知,堆栈中的内存在每个调用/返回周期中为局部变量分配/释放,因此在内存使用方面划分任务似乎是合理的,但在这样做时,我有时会从不同的来源得到硬故障(主要是总线或未定义指令错误。)我不明白为什么。

此外,工作速度对于我所在领域的许多应用程序都非常重要,因此我确实需要知道哪种方法可以提供更快的响应。

我希望得到启发。先谢谢大家了

最佳答案

这就是所谓的“过早优化”。

在过去,编译器很糟糕,它们无法自行内联函数。因此,在过去,C 语言中添加了关键字 inline - 1999 年之前也存在类似的非标准版本。这用于告诉糟糕的编译器如何更好地生成代码。

如今,这大部分已成为历史。编译器比程序员更擅长确定内联的内容和时间。然而,当被调用的函数位于不同的“翻译单元”(基本上是在不同的 .c 文件中)时,它们可能会遇到困难。但就你而言,我认为情况并非如此,但 Handle_Task1() 等可以被视为同一文件中的函数。

考虑到上述内容:

How are these two approaches can be examined with respect to stack usage and overall processing speed

它们被视为相同。它们使用相同的堆栈空间并花费相同的时间来执行。

除非您有一个糟糕的、较旧的编译器 - 在这种情况下函数调用总是占用额外的空间和执行时间。由于您正在使用现代 MCU,因此情况不应如此,否则您迫切需要获得更好的编译器。

根据经验,为了可读性和可维护性,将较大的函数拆分为多个较小的函数总是更好的做法。即使在硬实时系统中,也很少有函数调用开销成为实际瓶颈的情况,即使使用了糟糕的编译器也是如此。

关于c - 将任务划分为功能是有益还是有害?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50228166/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com