C++ 为什么我的代码为同一代码生成不同的值

C++ 为什么我的代码为同一代码生成不同的值,c++,stm32,C++,Stm32,我正在使用STM32L072,并创建了一个timeLimit类,该类的任务是跟踪经过的时间量以及是否超过了设定的时间。如果所需时间已过,则类将返回此值,以便可以执行与时间相关的代码。该类在内部使用滴答声,因此使用函数HW_RTC_Tick2ms将其转换回ms。该函数由ST在其I-CUBE-LRWAN扩展包中提供,我使用的是v1.2.1 我已经编写了printTimeToSend函数,用于记录/调试和监视原因。原始表单打印出当前经过的时间量、设置为等待的时间量以及到下一个超时的时间 问题在于,当以

我正在使用STM32L072,并创建了一个
timeLimit
类,该类的任务是跟踪经过的时间量以及是否超过了设定的时间。如果所需时间已过,则类将返回此值,以便可以执行与时间相关的代码。该类在内部使用滴答声,因此使用函数
HW_RTC_Tick2ms
将其转换回ms。该函数由ST在其I-CUBE-LRWAN扩展包中提供,我使用的是v1.2.1

我已经编写了
printTimeToSend
函数,用于记录/调试和监视原因。原始表单打印出当前经过的时间量、设置为等待的时间量以及到下一个超时的时间

问题在于,当以原始方式使用时,此代码返回
134318771
。我已经将所有单独的步骤拆分为变量,并将它们打印出来,以跟踪转换出错的地方。但是,当分解为单独的步骤时,它会返回正确的结果

PPRINTF
是ST提供的
printf
变体,正在阻塞。它在内部使用循环缓冲区,并具有相同的参数传递语法。
已插入
\uu nop()
操作以进行调试。我使用Keil来开发,StAccVIEW在C++中有时会更新变量。因此,
\uuu nop()
是一种预防措施,以确保在执行下一位相关代码之前,该值已更新且可见
HW_RTC_GetTimerValue
获取当前时间值(单位:ticks)

我无法从
134318771
推理,它是
0x8018AB3
1000000000110001010110011
可以位翻转、移位或以其他方式修改为原始值


系统的体系结构是32位的,因此应该有足够的空间容纳概念演示中确认的所有值。

函数结束时的所有打印调用都是这样的

PPRINTF("\t current time: %i\r\n", __PRETTY_FUNCTION__,
          HW_RTC_Tick2ms(subdiv));
您想格式化一个整数,但提供了一个C字符串和一个整数。
134318771
可能是C字符串地址的十进制表示形式
\uu PRETTY\u函数\uuu

您需要使格式和参数匹配

PPRINTF("\t current time: %i\r\n", HW_RTC_Tick2ms(subdiv));


@(二)是的,太令人沮丧了。有时我们只需要看一些其他的东西,当我们回到问题时,它看起来很明显……最愚蠢的事情是我一直在比较程序集,我完全忽略了传递的额外参数
BL HW_RTC_Tick2ms MOV r1,r0 ADR r0,| L6.432 | BL TraceSend
@TarickWelling如果
printf
s没有编译器警告,
PPRINTF
(因此不是真正的
stdlib.h
printf
)是使用
\u VA\u ARGS>实现的,它只是忽略了第三个参数。所以没有警告
TimerTime_t HW_RTC_Tick2ms(uint32_t tick) {
  uint32_t seconds = tick >> 0x0A;
  tick = tick & 0x03FF;
  return ((seconds * 1000) + ((tick * 1000) >> 0x0A));
}
PPRINTF("\t current time: %i\r\n", __PRETTY_FUNCTION__,
          HW_RTC_Tick2ms(subdiv));
PPRINTF("\t current time: %i\r\n", HW_RTC_Tick2ms(subdiv));
PPRINTF("\t %s current time: %i\r\n", __PRETTY_FUNCTION__,
          HW_RTC_Tick2ms(subdiv));