- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在使用 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/
就目前而言,这个问题不适合我们的问答形式。我们希望答案得到事实、引用或专业知识的支持,但这个问题可能会引起辩论、争论、投票或扩展讨论。如果您觉得这个问题可以改进并可能重新打开,visit the he
我正在查看另一个开发人员提交给项目的差异,他们有很多代码可以执行 !! .事实上,这似乎是他们实现 boolean getter 和 setter 的标准模式。他们已经实现了他们的代码: - (BOO
假设我有一个显示博客文章的网站。在这个网页上有一个评论部分,但它在页面加载时隐藏了。但是,评论计数会在其位置显示给用户,如果用户单击该计数,则会进行 ajax 调用以加载所有评论。 通常我会做一些额外
一般推荐使用ConfigureAwait(false)在不需要上下文的情况下等待异步调用时。只是想知道使用 ConfigureAwait(false) 有什么好处吗?在 Azure 函数中。 Azur
我是一名优秀的程序员,十分优秀!