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:30 编辑
楼主这样写只有最后一句有效,前2句做无用功
Master_debug = (u32)Temperature_Value;类似:
i=1;
i=2;
i=3;
运行后
i=3
wenyangzeng 发表于 2018-3-15 13:22
楼主这样写只有最后一句有效,前2句做无用功
Master_debug = (u32)Temperature_Value
你好,并列写三条语句只是为了看看哪条语句能正确赋值。单步执行,执行第一句后,是正确赋值的。第二和第三句,执行后被赋值的变量为0,不正确赋值,查看汇编后两者多了一条0x08000E24 F7FFFA88BL.W __aeabi_f2uiz (0x08000338) sinoseer 发表于 2018-3-15 13:34
你好,并列写三条语句只是为了看看哪条语句能正确赋值。单步执行,执行第一句后,是正确赋值的。第二和第 ...
你把优化等级降低看看 已找到问题,变量定义后,在中断文件中引用时声明错了
页:
[1]