OpenEdv-开源电子网

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

韦东山例程代码局限性之全局变量问题

[复制链接]

27

主题

711

帖子

0

精华

版主

Rank: 7Rank: 7Rank: 7

积分
11930
金钱
11930
注册时间
2015-11-5
在线时间
2087 小时
发表于 2016-4-23 00:17:33 | 显示全部楼层 |阅读模式
开发板:TQ2440
开发平台:Ubuntu 12.04
编译环境:arm-linux-gcc (gcc version 4.3.3)

又跑了2个晚上的LED。。。不过值得庆幸的是问题解决了,同样是看韦东山老师的视频然后跑他的代码,每次发现修改他的代码都会有一大堆问题。。。先贴上具体问题:
13.PNG
全局变量GlobalTimerCnt在定时器中断里面执行+1操作,但不知为何死活加不成功!记得前2天调中断代码时也碰过类似的情况,就是LR寄存器出栈的数据不对,具体可以参考我的另一个帖子《韦东山老师的中断控制器代码BUG详解
既然问题类似,那么我就不得不考虑全局变量GlobalTimerCnt的地址到底有没有弄对了,打开了dis文件看了下编译结果:
12.PNG
果然不出所料,全局变量GlobalTimerCnt的地址设到了0x000082C4,由于我采用的是NOR FLASH启动,从0x0开始的2MB空间都是NOR FLASH的范围,自然这些全局变量通通都在NOR FLASH的范围内。由于NOR FLASH可以随意读,但不可以随意写(必须按照特定的时序才可以),因此想要让全局变量GlobalTimerCnt发生改变是不可能的。既然找出问题来了,那么接下来就要解决问题了,全局变量被编译到NOR FLASH的地址上其实也是有原因的,下面贴上Makefile的链接命令:
11.PNG
链接命令是将所有的代码段、数据段、BSS段等等都链接到0x0开始的地址,但数据段等是绝对不能设到这地址范围上的,因此必须修改链接命令,而这资料真不好找啊,害我找了一个晚上才找到能用的,下面附上我找到的资料的网址:
http://blog.chinaunix.net/uid-2595338-id-2139549.html


下面贴上我修改后的链接命令和链接脚本:
2.PNG 3.PNG
链接脚本的内容就是参照上面网址的资料来弄的,编译后的dis文件的全局变量信息如下:
data.PNG
全局变量的地址通通改到0x40000000开始的SRAM空间

仿真结果如下:
1.PNG
全局变量能够正常改变了!

总结:
        不得不说韦东山老师的代码的启蒙性真的很强,但想要在他的代码上自己修改必须具备一定的ARM知识,否则很容易碰到各种各样的问题。限于本人水平,文章难免有错漏之处,还望各路大神多多提点!我是@一直在跑灯,欢迎交流学习!

timer.rar (21.45 KB, 下载次数: 573)
拿来长岛冰茶换我半晚安睡
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

43

主题

115

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
367
金钱
367
注册时间
2014-8-17
在线时间
87 小时
发表于 2016-4-23 08:53:08 | 显示全部楼层
回复 支持 反对

使用道具 举报

27

主题

711

帖子

0

精华

版主

Rank: 7Rank: 7Rank: 7

积分
11930
金钱
11930
注册时间
2015-11-5
在线时间
2087 小时
 楼主| 发表于 2016-4-23 09:50:24 | 显示全部楼层
stm32f103andarm 发表于 2016-4-23 08:53
顶顶顶,我的是jz2440

感谢支持!
拿来长岛冰茶换我半晚安睡
回复 支持 反对

使用道具 举报

14

主题

1592

帖子

0

精华

资深版主

Rank: 8Rank: 8

积分
2622
金钱
2622
注册时间
2014-7-17
在线时间
350 小时
发表于 2016-4-23 10:01:26 | 显示全部楼层
回复 支持 反对

使用道具 举报

43

主题

115

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
367
金钱
367
注册时间
2014-8-17
在线时间
87 小时
发表于 2016-4-23 11:28:07 | 显示全部楼层

多得大神昨晚给我答疑了一晚上啊
回复 支持 反对

使用道具 举报

40

主题

144

帖子

0

精华

高级会员

Rank: 4

积分
513
金钱
513
注册时间
2013-7-26
在线时间
72 小时
发表于 2016-6-8 21:31:00 | 显示全部楼层
楼主,最近想学arm+linux ,应该要搞个开发板吧,看到有 友善之臂,韦东山的,楼主推荐一个吧,怎么学
回复 支持 反对

使用道具 举报

27

主题

711

帖子

0

精华

版主

Rank: 7Rank: 7Rank: 7

积分
11930
金钱
11930
注册时间
2015-11-5
在线时间
2087 小时
 楼主| 发表于 2016-6-8 21:34:45 | 显示全部楼层
16777216 发表于 2016-6-8 21:31
楼主,最近想学arm+linux ,应该要搞个开发板吧,看到有 友善之臂,韦东山的,楼主推荐一个吧,怎么学

ARM9开发板都大同小异,如果你玩过STM32或者其他cortex内核的芯片,入手ARM9不会太难,你可以选择韦东山的JZ2440,当然选友善之臂也没问题,有问题再交流!
拿来长岛冰茶换我半晚安睡
回复 支持 反对

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2024-11-26 00:27

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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