开发环境是uvision V5.20.0.0 在STM32F030的引脚EXTI中断中有一赋值个语句不正常编译,请大家帮忙看看:这个语句我写了3种写法,第一种能正确的赋值,后两种被赋值的变量为0。 同样的三条语句,在主函数中均能正常赋值,所以很奇怪。 均为全局变量 u32 Master_debug; // debug s32 Temperature_Value[6]; // unit 0.1℃,这个变量数据均是非0值 vu32 Master_Read_Chip_Idx; // 这个变量没有超出5 中断函数中的语句 Master_debug = *(u32*)&Temperature_Value[Master_Read_Chip_Idx]; Master_debug = Temperature_Value[Master_Read_Chip_Idx]; Master_debug = (u32)Temperature_Value[Master_Read_Chip_Idx]; 我把这3个语句的汇编贴上来 82: Master_debug = *(u32*)&Temperature_Value[Master_Read_Chip_Idx]; 0x08000DFA 4823 LDR r0,[pc,#140] ; @0x08000E88 0x08000DFC 6800 LDR r0,[r0,#0x00] 0x08000DFE 0080 LSLS r0,r0,#2 0x08000E00 4923 LDR r1,[pc,#140] ; @0x08000E90 0x08000E02 5808 LDR r0,[r1,r0] 0x08000E04 4923 LDR r1,[pc,#140] ; @0x08000E94 0x08000E06 6008 STR r0,[r1,#0x00] 83: Master_debug = Temperature_Value[Master_Read_Chip_Idx]; 0x08000E08 491F LDR r1,[pc,#124] ; @0x08000E88 0x08000E0A 6809 LDR r1,[r1,#0x00] 0x08000E0C 0089 LSLS r1,r1,#2 0x08000E0E 4A20 LDR r2,[pc,#128] ; @0x08000E90 0x08000E10 5850 LDR r0,[r2,r1] 0x08000E12 F7FFFA91 BL.W __aeabi_f2uiz (0x08000338) 0x08000E16 491F LDR r1,[pc,#124] ; @0x08000E94 0x08000E18 6008 STR r0,[r1,#0x00] 84: Master_debug = (u32)Temperature_Value[Master_Read_Chip_Idx]; 85: 86: //if (((u32)Temperature_Value[Master_Read_Chip_Idx])&(0x1<<(15-Master_Read_Bit_Idx))) 0x08000E1A 491B LDR r1,[pc,#108] ; @0x08000E88 0x08000E1C 6809 LDR r1,[r1,#0x00] 0x08000E1E 0089 LSLS r1,r1,#2 0x08000E20 4A1B LDR r2,[pc,#108] ; @0x08000E90 0x08000E22 5850 LDR r0,[r2,r1] 0x08000E24 F7FFFA88 BL.W __aeabi_f2uiz (0x08000338) 0x08000E28 491A LDR r1,[pc,#104] ; @0x08000E94 0x08000E2A 6008 STR r0,[r1,#0x00] |
【STM32F0开发日志/评测/笔记】+互补PWM波的产生
STM32F030 PB14和PB15无法输出PWM求助
【STM32F030探索套件】序列之五 外部中断
【STM32F0开发日志---二】+ucosii.2.92移植在STM32F030
上传个STM32F0+5110+内部温度传感器的菜鸟实例
【STM32F030探索套件使用问题】STM32F030 SPI方式驱动ST7565LCD失败
求一份STM32F051 I2C驱动LCD 12864的例程
STM32F0 M0 向结构体赋值进入HardFault异常
STM32F0 ADC-DMA方式采集2路数据时出现问题
STM32F030C8T6,TIM16定时慢很多问题?
楼主这样写只有最后一句有效,前2句做无用功
Master_debug = (u32)Temperature_Value[Master_Read_Chip_Idx];类似:
i=1;
i=2;
i=3;
运行后
i=3
评分
查看全部评分
你好,并列写三条语句只是为了看看哪条语句能正确赋值。单步执行,执行第一句后,是正确赋值的。第二和第三句,执行后被赋值的变量为0,不正确赋值,查看汇编后两者多了一条0x08000E24 F7FFFA88 BL.W __aeabi_f2uiz (0x08000338)
你把优化等级降低看看
评分
查看全部评分