[STM32G4] 模运算 => 编译器错误?

[复制链接]
 楼主| 内核558 发表于 2025-8-3 10:18 | 显示全部楼层 |阅读模式
TM32CubeIDE V1.7.0,模运算 => 编译器错误?
我一直使用以下函数或宏:
#define usTimeRead()  ((int16_t) (SysTick->VAL >> 1))  
#define usTimePlus(TP, US)  ((int16_t) TP - ((int16_t) US * (int16_t) 85))
#define usTimePast(TP)  (((int16_t) TP - usTimeRead()) > (int16_t) 0)
这些宏用于在16位MCU上实现超时或周期性任务。

在移植到STM32G4时,以下代码本应在引脚B6上生成100us的方波:
int main(void) {
  sysConfigMCU();
  /* Loop */
  int16_t tp = usTimeRead();
  for(;;) {
    GPIOB->BSRR =  ((uint16_t)0x0040);
    tp = usTimePlus(tp, 100);
    for ( ; !usTimePast(tp); );
    GPIOB->BRR  =  ((uint16_t)0x0040);
    tp = usTimePlus(tp, 100);
    for ( ; !usTimePast(tp); );
  }
}
但运行失败。我必须修改宏 usTimePast(TP),将差值赋给临时变量,程序才能正确运行:
#define usTimePast(TP)  ((tmp = (int16_t) TP - usTimeRead()) > (int16_t) 0)
我用TDM-GCC模拟了这种现象,结果相同
例如:
当 usTimeRead() == -32703 且 tp == 32735 时,usTimePast(TP) 中的比较会根据是否将差值赋给临时变量而产生不同的结果!



您需要登录后才可以回帖 登录 | 注册

本版积分规则

38

主题

38

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部

38

主题

38

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部