你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

STM32F030 一个奇怪的编译问题

[复制链接]
BOMBbing 提问时间:2018-3-15 12:24 /
开发环境是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]



收藏 评论4 发布时间:2018-3-15 12:24

举报

4个回答
wenyangzeng 回答时间:2018-3-15 13:22:32
本帖最后由 wenyangzeng 于 2018-3-15 13:30 编辑

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

评分

参与人数 1蝴蝶豆 +3 收起 理由
zero99 + 3

查看全部评分

BOMBbing 回答时间:2018-3-15 13:34:06
wenyangzeng 发表于 2018-3-15 13:22
楼主这样写只有最后一句有效,前2句做无用功
Master_debug = (u32)Temperature_Value[Master_Read_Chip_Idx ...

你好,并列写三条语句只是为了看看哪条语句能正确赋值。单步执行,执行第一句后,是正确赋值的。第二和第三句,执行后被赋值的变量为0,不正确赋值,查看汇编后两者多了一条0x08000E24 F7FFFA88  BL.W     __aeabi_f2uiz (0x08000338)
wenyangzeng 回答时间:2018-3-15 13:42:29
sinoseer 发表于 2018-3-15 13:34
你好,并列写三条语句只是为了看看哪条语句能正确赋值。单步执行,执行第一句后,是正确赋值的。第二和第 ...

你把优化等级降低看看
BOMBbing 回答时间:2018-3-15 14:08:57
已找到问题,变量定义后,在中断文件中引用时声明错了

评分

参与人数 1蝴蝶豆 +2 收起 理由
zero99 + 2 结帖奖励

查看全部评分

所属标签

相似问题

官网相关资源

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
st-img 微信公众号
st-img 手机版