OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 6819|回复: 23

一个奇怪的问题,大家来看看

[复制链接]

6

主题

33

帖子

0

精华

初级会员

Rank: 2

积分
77
金钱
77
注册时间
2013-6-24
在线时间
0 小时
发表于 2014-4-17 16:19:32 | 显示全部楼层 |阅读模式

用的是2.4g无线模块,上下位机通信,编译后下位机

Program Size: Code=33250 RO-data=870 RW-data=184 ZI-data=1960

用的STM32F103VCT6,256kB Flash, 48kB SRAM

程序比较大就不上源码了,之前都是正常运行的

现在来了一个奇怪的问题,程序定义全局变量会导致24l01模块接收失败

24l01用的是教程源码,只修改使用spi2,其他没变


现在因为需要多定义几个全局变量,但是一定义就导致无线接收失败

板子刚上电或复位可以正常接收1s左右,就再也接受不到了


而且更改全局变量的数据类型后可能会正常运行

比如定义u8类型会接收失败,但改用s32就可以

定义static变量也是这种情况


求大神

正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

39

主题

2026

帖子

1

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
2020
金钱
2020
注册时间
2013-5-1
在线时间
87 小时
发表于 2014-4-17 16:50:18 | 显示全部楼层
定义的全局变量是做什么的?贴出来看下
博观而约取,厚积而薄发。
回复 支持 反对

使用道具 举报

6

主题

33

帖子

0

精华

初级会员

Rank: 2

积分
77
金钱
77
注册时间
2013-6-24
在线时间
0 小时
 楼主| 发表于 2014-4-17 17:44:36 | 显示全部楼层
回复【2楼】745021926:
---------------------------------
就随便定义个全局变量,没有使用
赋值不赋值都不行
回复 支持 反对

使用道具 举报

6

主题

33

帖子

0

精华

初级会员

Rank: 2

积分
77
金钱
77
注册时间
2013-6-24
在线时间
0 小时
 楼主| 发表于 2014-4-17 22:19:51 | 显示全部楼层
为什么定义一个全局变量会对程序运行有影响呢
哪位大神来解释下
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165475
金钱
165475
注册时间
2010-12-1
在线时间
2115 小时
发表于 2014-4-17 22:21:53 | 显示全部楼层
没遇到这么奇怪的,看你的数据发送,是不是涉及到字节对齐的问题。
如果涉及到,可能是这个原因引起的。
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

6

主题

33

帖子

0

精华

初级会员

Rank: 2

积分
77
金钱
77
注册时间
2013-6-24
在线时间
0 小时
 楼主| 发表于 2014-4-17 23:09:58 | 显示全部楼层
回复【5楼】正点原子:
---------------------------------
没有啊,原来是正常运行的
现在就多定义一个全局变量u8类型,不使用,然后无线就接收不到了
更改数据类型比如用s32替代可能就正常了
这个程序东西比较多,用了好几个adc,pwm
中断里程序有点长

但是为什么就多定义一个全局变量结果就不一样了呢
好奇怪啊
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165475
金钱
165475
注册时间
2010-12-1
在线时间
2115 小时
发表于 2014-4-17 23:28:23 | 显示全部楼层
我以前遇到这种问题,是字节对齐引起的。
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

6

主题

33

帖子

0

精华

初级会员

Rank: 2

积分
77
金钱
77
注册时间
2013-6-24
在线时间
0 小时
 楼主| 发表于 2014-4-18 09:15:41 | 显示全部楼层
回复【7楼】正点原子:
---------------------------------
那为什么不定义这个全局变量就能正常运行呢
如果存在字节对齐问题那应该是不能运行的吧
而且定义之后复位还能正常接收1s左右

教程里无线发送接收宏定义默认是32字节吧,
原来把上下位机接收发送全改成20也发送失败
不知道为什么
回复 支持 反对

使用道具 举报

28

主题

1489

帖子

0

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
1656
金钱
1656
注册时间
2013-7-24
在线时间
1 小时
发表于 2014-4-18 09:22:44 | 显示全部楼层
是不是加align()测试
于20150522停用该账号:http://www.microstar.club
回复 支持 反对

使用道具 举报

6

主题

33

帖子

0

精华

初级会员

Rank: 2

积分
77
金钱
77
注册时间
2013-6-24
在线时间
0 小时
 楼主| 发表于 2014-4-18 09:46:56 | 显示全部楼层
回复【9楼】styleno1:
---------------------------------
别的什么都没干呀,就定义了个全局变量
然后程序就运行跟之前不同了
删除定义就又好了
回复 支持 反对

使用道具 举报

2

主题

55

帖子

0

精华

初级会员

Rank: 2

积分
142
金钱
142
注册时间
2013-5-24
在线时间
9 小时
发表于 2014-4-18 17:32:27 | 显示全部楼层
我做串口通信的时候碰到过类似的问题。貌似是内存出了问题,最后改了一些数组长度就好了。
回复 支持 反对

使用道具 举报

6

主题

33

帖子

0

精华

初级会员

Rank: 2

积分
77
金钱
77
注册时间
2013-6-24
在线时间
0 小时
 楼主| 发表于 2014-4-18 23:34:43 | 显示全部楼层
回复【11楼】dll_epdc:
---------------------------------
咱们应该是同样的问题,可能是keil众多bug之一
回复 支持 反对

使用道具 举报

2

主题

55

帖子

0

精华

初级会员

Rank: 2

积分
142
金钱
142
注册时间
2013-5-24
在线时间
9 小时
发表于 2014-4-21 16:09:11 | 显示全部楼层
回复【12楼】衡阳落雁:
---------------------------------
你不会是跟我一样整整就好了吧???
回复 支持 反对

使用道具 举报

6

主题

33

帖子

0

精华

初级会员

Rank: 2

积分
77
金钱
77
注册时间
2013-6-24
在线时间
0 小时
 楼主| 发表于 2014-4-21 16:26:48 | 显示全部楼层
回复【13楼】dll_epdc:
---------------------------------
我更改一下定义的变量类型就行了
从u8开始,一直试到s32,总有一个是可以的
回复 支持 反对

使用道具 举报

2

主题

55

帖子

0

精华

初级会员

Rank: 2

积分
142
金钱
142
注册时间
2013-5-24
在线时间
9 小时
发表于 2014-4-21 16:31:19 | 显示全部楼层
那你有没有试过将缓冲区的大小改变呢?看看这样做能不能正常的通信。
回复 支持 反对

使用道具 举报

6

主题

33

帖子

0

精华

初级会员

Rank: 2

积分
77
金钱
77
注册时间
2013-6-24
在线时间
0 小时
 楼主| 发表于 2014-4-21 19:49:32 | 显示全部楼层
回复【15楼】dll_epdc:
---------------------------------
哪的缓冲区大小?
回复 支持 反对

使用道具 举报

2

主题

55

帖子

0

精华

初级会员

Rank: 2

积分
142
金钱
142
注册时间
2013-5-24
在线时间
9 小时
发表于 2014-4-23 16:39:31 | 显示全部楼层
通信数据缓冲区呀
回复 支持 反对

使用道具 举报

2

主题

123

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1472
金钱
1472
注册时间
2014-4-8
在线时间
172 小时
发表于 2014-4-24 09:57:51 | 显示全部楼层
现在就多定义一个全局变量u8类型,不使用,然后无线就接收不到了 
更改数据类型比如用s32替代可能就正常了


明显是字节对齐引起的。!!
回复 支持 反对

使用道具 举报

6

主题

33

帖子

0

精华

初级会员

Rank: 2

积分
77
金钱
77
注册时间
2013-6-24
在线时间
0 小时
 楼主| 发表于 2014-4-24 21:40:07 | 显示全部楼层
回复【18楼】jackielau:
---------------------------------
什么意思啊,我只定义了变量,并没使用
应该不存在对齐问题吧
回复 支持 反对

使用道具 举报

6

主题

33

帖子

0

精华

初级会员

Rank: 2

积分
77
金钱
77
注册时间
2013-6-24
在线时间
0 小时
 楼主| 发表于 2014-4-24 21:40:44 | 显示全部楼层
回复【17楼】dll_epdc:
---------------------------------
无线模块没有缓冲区吧,直接给数组了
回复 支持 反对

使用道具 举报

6

主题

33

帖子

0

精华

初级会员

Rank: 2

积分
77
金钱
77
注册时间
2013-6-24
在线时间
0 小时
 楼主| 发表于 2014-4-24 22:03:39 | 显示全部楼层
找到原因了,谢谢大家热心回答
我在网上搜也有人遇到这样的问题
也希望大家注意这个问题

我用的例程的工程,优化水平为level0
改为默认后此问题解决
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165475
金钱
165475
注册时间
2010-12-1
在线时间
2115 小时
发表于 2014-4-24 22:58:21 | 显示全部楼层
回复【21楼】衡阳落雁:
---------------------------------
谢谢分享
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

2

主题

123

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1472
金钱
1472
注册时间
2014-4-8
在线时间
172 小时
发表于 2014-4-25 19:29:36 | 显示全部楼层
回复【21楼】衡阳落雁:
找到原因了,谢谢大家热心回答
我在网上搜也有人遇到这样的问题
也希望大家注意这个问题
我用的例程的工程,优化水平为level0
改为默认后此问题解决
---------------------------------
貌似是编译优化的问题,但是仔细想觉得更像是字节对齐的原因
level0由于优化级别较低,定义而没使用的变量也分配了空间,从而导致字节不对齐,而优化级别高后没使用的变量不分配空间,所以就没问题了!!
回复 支持 反对

使用道具 举报

6

主题

33

帖子

0

精华

初级会员

Rank: 2

积分
77
金钱
77
注册时间
2013-6-24
在线时间
0 小时
 楼主| 发表于 2014-4-26 23:23:40 | 显示全部楼层
回复【23楼】jackielau:
---------------------------------
你说的对齐的问题是什么意思呢?

现在这些变量都是使用的,level 0优化水平下更改数据类型仍然运行不正确
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-5-11 08:55

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表