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

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管理
行使您的权利
官方最新发布
STM32Cube扩展软件包
意法半导体边缘AI套件
ST - 理想汽车豪华SUV案例
ST意法半导体智能家居案例
STM32 ARM Cortex 32位微控制器
关注我们
st-img 微信公众号
st-img 手机版