[英]Embedded C : Program execution is not sequetial on STM32
我正在使用带有 FreeRTOS OS 的 STM32L0 微控制器上开发应用程序,在执行以下简化的线程之一时遇到了一个奇怪的问题:
使用GDB,我发现这个线程没有按顺序执行。 下面是执行流程:
1 ==> 2 ==> 3 ==> 4 ==> 5 ==> 6 ==> 7 ==> 3 ==> 4 ==> 5 ==> 6 ==> 7 ==> 8 = => 10 ==> 8 ==> 10这些数字指的是代码中执行的行。
我知道我没有详细分享我的源代码,但我想至少获得一些关于此类问题来源的提示。
基本信息:
谢谢你。
C 编译器可以自由生成他们想要的任何指令序列,因为它会产生正确的结果。 特别是为了优化代码执行时间或执行速度,生成的指令可能与源代码中的语句不匹配。
如果您正在尝试调试,您可能希望禁用优化(例如 gcc/clang 中的-O0
),因为这通常会生成与源代码相似的代码,而不是启用优化。
如果这些是内存映射的 IO 变量,则需要让编译器知道这一点。 至少,它们需要是volatile
。 但我认为您还需要memory 围栏。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.