sinoseer 发表于 2018-3-15 12:24:10

STM32F030 一个奇怪的编译问题

开发环境是uvision V5.20.0.0
在STM32F030的引脚EXTI中断中有一赋值个语句不正常编译,请大家帮忙看看:这个语句我写了3种写法,第一种能正确的赋值,后两种被赋值的变量为0。
同样的三条语句,在主函数中均能正常赋值,所以很奇怪。

均为全局变量
u32        Master_debug;        // debug

s32 Temperature_Value;        // unit 0.1℃,这个变量数据均是非0值

vu32        Master_Read_Chip_Idx; // 这个变量没有超出5


中断函数中的语句
                Master_debug = *(u32*)&Temperature_Value;
                Master_debug = Temperature_Value;
                Master_debug = (u32)Temperature_Value;


我把这3个语句的汇编贴上来

    82:               Master_debug = *(u32*)&Temperature_Value;
0x08000DFA 4823      LDR      r0,; @0x08000E88
0x08000DFC 6800      LDR      r0,
0x08000DFE 0080      LSLS   r0,r0,#2
0x08000E00 4923      LDR      r1,; @0x08000E90
0x08000E02 5808      LDR      r0,
0x08000E04 4923      LDR      r1,; @0x08000E94
0x08000E06 6008      STR      r0,
    83:               Master_debug = Temperature_Value;
0x08000E08 491F      LDR      r1,; @0x08000E88
0x08000E0A 6809      LDR      r1,
0x08000E0C 0089      LSLS   r1,r1,#2
0x08000E0E 4A20      LDR      r2,; @0x08000E90
0x08000E10 5850      LDR      r0,
0x08000E12 F7FFFA91BL.W   __aeabi_f2uiz (0x08000338)
0x08000E16 491F      LDR      r1,; @0x08000E94
0x08000E18 6008      STR      r0,
    84:               Master_debug = (u32)Temperature_Value;
    85:                  
    86:               //if (((u32)Temperature_Value)&(0x1<<(15-Master_Read_Bit_Idx)))
0x08000E1A 491B      LDR      r1,; @0x08000E88
0x08000E1C 6809      LDR      r1,
0x08000E1E 0089      LSLS   r1,r1,#2
0x08000E20 4A1B      LDR      r2,; @0x08000E90
0x08000E22 5850      LDR      r0,
0x08000E24 F7FFFA88BL.W   __aeabi_f2uiz (0x08000338)
0x08000E28 491A      LDR      r1,; @0x08000E94
0x08000E2A 6008      STR      r0,



wenyangzeng 发表于 2018-3-15 13:22:32

本帖最后由 wenyangzeng 于 2018-3-15 13:30 编辑

楼主这样写只有最后一句有效,前2句做无用功
Master_debug = (u32)Temperature_Value;类似:
i=1;
i=2;
i=3;
运行后
i=3

sinoseer 发表于 2018-3-15 13:34:06

wenyangzeng 发表于 2018-3-15 13:22
楼主这样写只有最后一句有效,前2句做无用功
Master_debug = (u32)Temperature_Value

你好,并列写三条语句只是为了看看哪条语句能正确赋值。单步执行,执行第一句后,是正确赋值的。第二和第三句,执行后被赋值的变量为0,不正确赋值,查看汇编后两者多了一条0x08000E24 F7FFFA88BL.W   __aeabi_f2uiz (0x08000338)

wenyangzeng 发表于 2018-3-15 13:42:29

sinoseer 发表于 2018-3-15 13:34
你好,并列写三条语句只是为了看看哪条语句能正确赋值。单步执行,执行第一句后,是正确赋值的。第二和第 ...

你把优化等级降低看看

sinoseer 发表于 2018-3-15 14:08:57

已找到问题,变量定义后,在中断文件中引用时声明错了
页: [1]
查看完整版本: STM32F030 一个奇怪的编译问题