4235|0

77

帖子

0

TA的资源

一粒金砂(高级)

楼主
 

LINUX下LM3S8962开发-之交叉编译器-系列(2) [复制链接]

LINUX下LM3S8962开发-之交叉编译器-系列(2)
    常用的编译器莫过于ADS,IAR,MDK,GCC,而前三种,只能在Windows下使用,但是GCC却能够在各种平台下使用.ARM上的做的比较好的官方GCC交叉编译器就是codesourcery g++了.我们平常下载到的codesourcery g++都是lite版本.也就是说,只有30天的试用期.事实真的是如此吗?我对此表示非常怀疑.因为codesourcery g++使用的这些编译器都是从gcc衍生出来的,而GCC由GNU协议保护,所以codesourcery g++公司在发布各个版本的codesourcery g++时,必须将源码发布出去,同时包括构建整套交叉编译链所必备的步骤.事实确实是这样,codesourcery g++的确公开了全部源码和构建脚本.下载这些codesourcery g++公司修改过的源码和脚本需要登录codesourcery g++网站,注册后才能下载.
    在教育网花了半天的时间下了几百兆的源码,最后还是傻眼了:上万个编译步骤.虽然写成了脚本,但是复杂度依然很高.于是只能换另外一种方法:下载codesourcery g++的可执行文件.
    我下载的是sourceryg++-4.4-276-arm-stellaris-eabi.bin,windows下对应的版本是sourceryg++-4.4-276-arm-stellaris-eabi.exe.在官网上生成30天的试用key,然后安装,完成后看了下安装文件的目录结构,惊奇的发现,codesourcery g++是分为两个部分的:一个是以eclipse为平台的集成开发环境,另外一个是为stellaris arm单片机优化过的gnu的交叉编译链.而授权文件的验证是在eclipse平台的集成开发环境上进行的,也就是说,一个月后,你没有新的授权的话,就不能使用集成开发环境了,但是gnu的交叉编译链照样能够使用,而且能够永久使用.像我这种VI+GDB搞起的人,根本不需要用它的eclipse集成开发环境,如果真的想用,大不了自己配置一套,网上这样的教程铺天盖地.
    废话不多说了,上配置步骤:
将CodeSourcery安装到了我的主目录下,
所以要在终端调用交叉编译链,必须配置环境变量,将有编译器的路径导入:
export PATH=$PATH:/home/你的主目录/CodeSourcery/Sourcery_G++/bin
然后到一个工程目录下输入make:
输出:
mybays@spaceship:~/store/luminary/workspace/proj/hello$ make clean
mybays@spaceship:~/store/luminary/workspace/proj/hello$ make
  CC    hello.c
hello.c:24: warning: "DEBUG" redefined
<command-line>:0: note: this is the location of the previous definition
  CC    ../drivers/rit128x96x4.c
../drivers/rit128x96x4.c: In function 'RIT128x96x4Clear':
../drivers/rit128x96x4.c:456: warning: dereferencing type-punned pointer will break strict-aliasing rules
  CC    startup_gcc.c
  LD    gcc/hello.axf
mybays@spaceship:~/store/luminary/workspace/proj/hello$

打开另外一个终端,输入openocd -f LM3S8962.cfg来建立调试链接.
然后在当前目录下创建.gdbinit文件,内容如下:
target remote localhost:3333
#monitor soft_reset_halt

define rr
target remote localhost:3333
monitor soft_reset_halt
symbol-file hello.axf
thbreak init
continue
end

define regs
info reg
end

define flash
monitor halt
#monitor stellaris mass_erase 0
monitor flash erase_address 0 65536
monitor soft_reset_halt
monitor flash write_image hello.axf
monitor verify_image hello.axf
x/4 0
end

define f1
monitor flash erase_address 0 65536
end

define f2
monitor flash write_image hello.axf
end

define mcm
make clean; make
end

define dis
disassemble $pc-16 $pc+16
end

set print pretty
set confirm off

然后输入命令:arm-stellaris-eabi-gdb
当出现(gdb)的提示符后输入flash进行编程:
输出结果如下:
target state: halted
target halted due to debug-request, current mode: Thread
xPSR: 0x81000000 pc: 0x00000128 msp: 0x200000ec
erased address 0x00000000 length 65536 in 1.921976s
requesting target halt and executing a soft reset
target state: halted
target halted due to debug-request, current mode: Thread
xPSR: 0x01000000 pc: 0xfffffffe msp: 0xfffffffc
not enough working area available(requested 8192, free 8152)
Algorithm flash write 835 words to 0x0, 0 remaining
wrote 3340 byte from file hello.axf in 0.300974s (10.837211 kb/s)
verified 3340 bytes in 0.282134s
0x0:    536871180    1173    1165    1167
这个时候按下重启键,新编译的程序就会运行.
在linux下.gdbinit前有一个.符号,这表明此文件是隐藏着的,所以创建的时候要注意.
顺便告诉大家,前两天在用realview的MDK做优化测试,发现MDK编译器编译出来的代码反汇编后竟然和GCC的目标代码反汇编后惊人的相似,不知道是realview借鉴了GCC的一些技术还是两者都遵守ANSI C标准,这样才使得同样的C代码,两者编译的目标代码才会那么相似.

 
点赞 关注

回复
举报
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/9 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表