gpt4 book ai didi

c - STM32 HAL库简单C编码错误

转载 作者:行者123 更新时间:2023-12-02 09:34:07 26 4
gpt4 key购买 nike

我正在将 STM32 HAL 库用于微 Controller 项目。在ADC部分我发现了以下代码:

uint32_t WaitLoopIndex = 0;                                                                           
/...
.../
/* Delay for ADC stabilization time. */
/* Delay fixed to worst case: maximum CPU frequency */
while(WaitLoopIndex < ADC_STAB_DELAY_CPU_CYCLES)
{
WaitLoopIndex++;
}

据我了解,这段代码很可能会得到优化,因为 WaitLoopIndex 没有在函数中的其他任何地方使用,也没有声明为 volatile ,对吗?

最佳答案

技术上是的,尽管根据我使用嵌入式目标编译器的经验,该循环不会得到优化。如果您考虑一下,除非程序员故意这样做,否则无意义的循环实际上并不是您在程序中看到的构造,因此我怀疑许多编译器是否会费心对其进行优化。

事实上,您必须对如何优化它做出假设,这意味着它肯定是一个错误,并且是最糟糕的类型之一。 ST 很可能只想在他们的库中使用 C,因此这样做了,而不是他们应该使用的内联汇编器延迟。但由于他们试图解决的问题严重依赖于平台,因此令人烦恼的依赖于平台/编译器的解决方案是不可避免的,而他们在这里所做的就是试图隐藏这种依赖性。

声明变量 volatile 会有所帮助,但是如果不假设编译器如何构建它,您仍然不知道该循环需要多长时间执行。这仍然是非常糟糕的做法,尽管如果他们添加了一个断言,提醒您手动检查延迟,这可能是可以通过的。

关于c - STM32 HAL库简单C编码错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29118509/

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