分享一些WINARM的资料,寻找同行者
这是我花了一个星期时间找到的最好的资料了,均来自网络,如有侵权,请指出make中文手册
点击此处下载ourdev_189415.rar(文件大小:880K)
ld中文资料
点击此处下载ourdev_189416.rar(文件大小:43K)
as中文资料
点击此处下载ourdev_189417.rar(文件大小:177K)
不知道论坛里用winarm的兄弟多不多,希望能分享经验,winarm的中对于44b0x的资料似乎很难找
ps:花了一个多星期,第一个最简单的汇编程序还是跑不起来,用gdb调试可以运行,但是板子没反应(改到ads下,同样也是用gdb调试就可以),不知道大家有没有遇到这种情况 还有个软件,ocdremote,用来连接gdb与wiggler的,版本有点旧
点击此处下载ourdev_189432.rar(文件大小:2.75M) 要等WinARM支持cortex-m3,再去弄WinARM。 看看,多谢楼主了 非常支持WINARM,到现在还不知道用什么软件进行调试.看有的网站上用KEIL调试.那还能体现出WINARM的优势吗! WINARM是用GDB来调试的,一个很大的优势是GCC,GDB等与Linux的关系,对于进行嵌入式Linux的开发调试比较好。缺点是在国内使用的人可能不多(似乎大家都在用ads,keil),交流的人少,入门比较复杂。
花了一个多星期时间终于有点眉目了,今天终于用汇编点亮了几个led。 我在用winarm,芯片是7s256, 自带的例子里有这个芯片的程序,所以用起来比较方便。 一直没搞懂那个GDB是怎么调试的 GDB有好几种调试方法,我用的是gdb+ocdremote+wiggler,用ocdremote来做代理
具体操作:
安装cygwin,安装ocdremote(软件在一楼),重启;
接wiggler,上电(是wiggler,并非sdt jtag)
运行cygwin,输入 /usr/local/bin/ocdremote.exe -c ARM7 -p 8888 -d WIGGLER 运行ocdremote,(可以写个脚本简化一下)
运行arm-elf-insight.exe 打开elf文件,然后Run->connect to target target选remote/tcp localhost:8888 ok
Run->download 然后就可以如一般软件一样调试了
以上是我用的调试方法,如有错漏请指出 yplin27兄有什么联系方式吗,或者大家有群类的交流吗,我想学,感觉很困难,ocdremote都没装上 如果你要开发性能高一点的产品建议还是不要用gcc编译器编译arm程序,效率比IAR和Keil的编译器低很多的。似乎不支持arm的条件指令
连
a += b>>4;这样的代码也不能优化。自己可以对比测试一下。 楼上说的情况有谁测试过没? 想请教一下WinARM的MakeFile怎么做啊,原来WinaAvr是有专门的软件来实现的。还有,就是例程也无法编译,总是报告MakeFile文件有语法错误。 多谢楼主啊,我正在看关于MAKE的文件。这个资料不错。 to【12楼】 bucker
可以参考上面的资料对例子提供的makefile进行修改,一般一个工程需要一个makefile和一个linkscript文件 谢谢楼主:
makefile是不是参照下载的make.pdf就可以啦
linkscript是什么呢?看来我还没有找到门那。 to 楼上:
上面的make.pdf介绍的是标准的makefile写法,不过我也没有全部看完,avr的makefile只要了解那些规则应该就比较好理解了
Linker-Script主要作用是描述rom与ram的分配,以及在链接时代码段与数据段的位置分配问题,可以参考上面的ld资料 谢谢楼主,资料不错 刚刚再测试了下,基本正常,先发上来以供有用之人:
看着代码下载进去了,心里好激动!!
make
arm-elf-gcc (GCC) 4.1.1
Copyright (C) 2006 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
arm-elf-gcc -c -mcpu=arm7tdmi-s -DRUN_FROM_ROM -I. -x assembler-with-cpp -DFR
Q_XTL=11059200UL -DPLL_MUL=0 s.s
arm-elf-gcc -c -mcpu=arm7tdmi-s -I. -gdwarf-2 -DRUN_FROM_ROM -DFRQ_XTL=11059
200UL -DPLL_MUL=0 main.c
arm-elf-gcc -o main.elf -MF s.o main.o -mcpu=arm7tdmi-s -I. -gdwarf-2 -DRU
N_FROM_ROM -DFRQ_XTL=11059200UL -DPLL_MUL=2 -MD -MP -nostartfiles -lc -lm -l
c -lgcc -T LPC2142-ROM.ld
arm-elf-objcopy -O ihex main.elf main.hex
make isp
lpc21isp -wipe main.hex com3 38400 12000
lpc21isp version 1.61
File main.hex:
loaded...
converted to binary format...
image size : 224
Synchronizing (ESC to abort). OK
Read bootcode version: 12
2
Read part ID: LPC2148, 512 kiB ROM / 40 kiB SRAM (0x402FF25)
Will start programming at Sector 1 if possible, and conclude with Sector 0 to en
sure that checksum is written last.
Wiping Device. OK
Sector 0: ..........
Download Finished... taking 1 seconds
Now launching the brand new code
点击此处下载 ourdev_570283.zip(文件大小:94K) (原文件名:gcc.2009年1月4日00时13分37秒.zip) 看了好久的.S文件,基本懂了一些
编译了下,能闪灯了
想整到codeblocks里面去,结果发现C::B默认编译.S文件的时候是使用如下命令行:
arm-elf-g++.exe -mcpu=arm7tdmi-s -I. -gdwarf-2 -DRUN_FROM_ROM -DFRQ_XTL=11059200UL -DPLL_MUL=2 -c s.s -o obj\Debug\s.o
只好为其它单独加入:-x assembler-with-cpp
但是在链接的时候发现C::B默认使用的是:
arm-elf-g++.exe -o bin\Debug\gcc.elf obj\Debug\s.o obj\Debug\main.o....(这里接自定义参数)
发现这样子不行,最终发现,要把 -MF 对数放在**.o文件的前面才行.
arm-elf-g++.exe -o bin\Debug\gcc.elf -MF obj\Debug\s.o obj\Debug\main.o....
而用C::B再怎么整也只能做到:
arm-elf-g++.exe -o bin\Debug\gcc.elf obj\Debug\s.o obj\Debug\main.o <font color=grenn> -MF ....</font>
卡住了,难道只能写Makefile?(关键是Makefile我倒是会写,但是为什么不能简单点呢....)
.
夜深了,睡觉...... to:【19楼】 aozima 残剑饮血
现在学uclinux,所以用的也是gcc,只不过不是跑裸机代码。
还有就是在弄这个
http://www.ouravr.com/bbs/bbs_content.jsp?bbs_sn=878820&bbs_page_no=1&search_mode=1&search_text=%C2%B7%D3%C9&bbs_id=1032
刚刚开始移植u-boot,不知道论坛里其他兄弟弄得怎样了 下午对.ld和.s文件研究了一下,大概也就上面那个意思吧..
要等完全弄明白可能还要假以时日
以下是我的个人理解:
AVRGCC中确实有这么一段,不过是内置的(因为AVR的芯片都确定,而ARM因为厂家太多了,没办法做到,即使是同一型号也有不同的用法)
而且没有"把位于rom中的数据段(也可以是代码段)复制到实际运行时的位于RAM中地址上"
继续研究中...
不知道楼主日常应用是不是用ARMGCC?我想应该不是! 【17楼】 aozima 残剑饮血:
*.ld文件是一种描述性质的文件,作用是告诉链接器各种代码段放在什么位置,所以只能按照所用的链接器要求的格式来写
Start.S个人理解主要是用于把位于rom中的数据段(也可以是代码段)复制到实际运行时的位于RAM中地址上,然后跳转到c代码中执行。
现在有点怀疑在avr中是否也存在这样的一段启动代码,希望能有哪位高手来解疑 Makefile倒是照着例子和以前的理解是可以自己去改写了
但是目前还是没搞清楚如果用C的话 .S和***.LD文件该怎么写
不知道楼主有没有这方面的资料?
WinARM-20060606里面的示例再自己修改下可以用了,写了几个小程序也可以跑了,但这样子始终还是没明白到底是怎么一回事..
本贴被 aozima 编辑过,最后修改时间:2009-01-03,12:50:29. 谢谢楼主的资料。
我想学习arm+linux,所以对winarm比较感兴趣
现在手头有一块QQ2440和配套购买的H-JTAG,如果按照楼主的方法安装winarm、cygwin、ocdremote
能不能进行u-boot、linux内核的调试呢(速度因素暂不考虑)?
不知道我的这个H-JTAG和wiggler有什么区别没 令人耳目一新的资料,感谢文档作者及楼主! 调试elf文件可以用keil to: 楼主,
我不是用winarm+ocdremote,用eclipse+jlink gdb server. 但用的complier也是gcc.所以遇到的问题基本上都是一样. 而我的target也是44b0, 有时间可以交流一下经验.
to: usecool.
哦,怎麼又是你? 又在推销用keil调试elf文档吗?
但想请问一下, 用测试版keil调试elf文档有没有代码大小限制? 如果没有我也去试试. 最近也在学习用winarm调44b0代码,中断和汇编老是没法搞清楚 很需要多一点这些资料!谢谢! jh 【10楼】 zm2002
你也太小瞧gcc了,
你看看gcc的代码吧:
a.o: file format elf32-littlearm
Disassembly of section .text:
00000000 <f>:
extern int a;
int f(int b) {
a += b >> 4;
0: e59f2010 ldr r2, ; 18 <f+0x18>
4: e5923000 ldr r3,
8: e0833240 add r3, r3, r0, asr #4
c: e5823000 str r3,
return 0;
}
10: e3a00000 mov r0, #0; 0x0
14: e12fff1e bx lr
18: 00000000 .word 0x00000000
使用:
arm-none-eabi-gcc -v
Using built-in specs.
Target: arm-none-eabi
Configured with: ../configure --target=arm-none-eabi --enable-threads --disable-libmudflap --disable-libssp --disable-libstdcxx-pch --with-gnu-as --with-gnu-ld --enable-languages=c,c++ --disable-shared --with-newlib --with-pkgversion='Sourcery G++ Lite 2009q1-161-minux' --with-bugurl=https://support.codesourcery.com/GNUToolchain/ --disable-nls --prefix=/opt/armgcc --with-headers=yes --disable-libgomp --enable-poison-system-directories --with-build-time-tools=/opt/armgcc/arm-none-eabi/bin
Thread model: single
gcc version 4.3.3 (Sourcery G++ Lite 2009q1-161-minux)
编译命令行 arm-none-eabi-gcc a.c -g -O1 -c
仅仅是-O1而已。
估计说gcc不会优化的人是不知道gcc不加选项的时候不优化。 jh 非常需要WINARM资料 我也用winarm,开发lpc2129.avr和arm的编辑器统一到uestudio,编译用winavr和windowsarm。无法进行调试,只能通过isp下到片子中开现象改程序。 mark 先记号下~~ 向所有开源软件者们致敬。 winarm是不是要有cygwin才行? mark 请问winarm在哪里下载?
页:
[1]