打印

“ARM怎么入门”。我不是高手,仍然是菜鸟

[复制链接]
1742|4
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
6019实验室|  楼主 | 2010-1-17 17:48 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
“ARM怎么入门”。我不是高手,仍然是菜鸟。
         但是回想起自己当时的迷茫,特意写了这篇东西,当作给和我一样的兄弟姐妹的帮助吧。问这个问题的人多半不是已经工作的工程师,而是和我一样是学生,所以这篇笔记就把看家当成我一样的菜鸟,高手勿怪。
         首先声明:本人还没有找工作,事实上处于研究生刚毕业,还没开始找工作的空闲时间,44B0只是兴趣所在,打发时间。
         所有看法完全是自己的感受,不代表任何他人。错了的观点各位帮我纠正。再次补充:很多朋友看了上面的话就问我为什么研究生毕业了还不找工作:)说是打发时间,其实是因为研究生的时候带了一个项目,申请提前毕业以后项目还有块尾巴,答应导师把项目做完再走:)就这么简单。男人总点负点责,呵呵
        以下问题常被问到,我就想到哪说到哪吧。

一 首先说说ARM的发展
        可以用一片大好来形容,翻开各个公司的网站,招聘里面嵌入式占据了大半工程师职位。
广义的嵌入式无非几种:传统的什么51、AVR、PIC称做嵌入式微控制器;ARM是嵌入式微处理器;DSP;FPGA。
        客观的讲,工作需求量上DSP的需求比ARM要多,而ARM和FPGA差不多。
        DSP因为数字处理与通信领域的空前发展而火暴,小到MP3 射象头,大到我们军品里的控制器,应用面很广。
        FPGA的兄弟一般做ANSIC(特殊芯片设计,好象是这么翻译的)。而ARM单纯说来并不比一个单片机强多少,但是它的独特就在于不断下降的价格和提升的性能。这完全依靠于ARM公司的战略,厉害!!很佩服他们的战略眼光!!
        值得注意的是:在找工作中,企业(著名的,小的不算)对单纯的ARM硬件开发工程师并不比单片机重视,很少有大企业的职位里写“从事过ARM开发优先”。写的多的是什么?“嵌入式LINUX”到这相信大家看出来了吧,需要的是硬件中的软件。

二 ARM是硬件还是软件
        很难说,ARM是硬件,LINUX是软件。ARM的硬件多半已经模块化了,像我这样把板子改成这样的就算动的多的了,这同样是ARM公司的战略,再次佩服。
        实际中的LINUX的开发工作更多,更耗时。从这方面说ARM应该算是软件了。
        在找工作中更是这样,举个例子,联想里和ARM最接近的是“BIOS工程师”是软件,MOTO里接近的是嵌入式LINUX工程师是软件。而其他很多公司把嵌入式产品开发归为硬件。所以,不要讨论这个,好好玩转自己的板子才是关键。实在不爽你就把自己叫“嵌入式开发工程师”

三 要不要买开发板      
         我的答案是“在你个人的学习方法”,但是如果看家是需要看这骗笔记的水平,个人推荐还是买现成的。
1 买
         买板子可以把注意力集中在软件开发上,软件开发(尤其是驱动)可以不必担心自己硬件上的问题,我就是以便调试一边写驱动和程序,每次写驱动前就要先确认硬件没问题。另外,买板子更省钱和时间,我自己做的板子,原理图PCB花了2周以上!制版又15天,回来以后焊接44B0 160个脚!那叫一个麻烦~~花了多少钱呢?2层板,制版费就300块!当然 我把接口都外引了,还做了个20X18的LCD背板,板子比较大。总体下来 元件+LCD屏+PCB=11XX块!够2410的了。再有就是买的资料相对来说比较全。
2 做
         自己做可以更了解底层硬件,可以按照自己的要求加东西,比如我就加了GPS模块、 GPRS模块 、SD卡模块,扩了个IIC的35个键子的键盘、把LCD接口按照买的LCD改装了,可以用FPC线直接连接。做的很爽的。玩一把吗。
          当然,你可以有策略的做,比如像我一样,把RAM和ROM,网络都保持和某现成的板子一样,这样他们的资料你就可以拿过来直接用,给自己留个退路。其他的如SD了 什么的自己做。都达到了~~就是费钱,费时间。
         再有就是给做的朋友几点建议:尽量拿到现成的板子,尽量多搜集其他板子的全套资料。
四 要不要有51 AVR等单片机基础
          有更好,但没有也无所谓。
         两个月以前,我只是看别人做,耳濡目染~~,本科学过单片机,从来没做过。我们这的技术主干做AVR和51,我就跟他们调过C语言程序。你看出来了?我是个不折不扣的菜鸟吧?
但是做这个之前我特意找了两本书,看了里面的例子和原理图,这很重要。例程里有汇编有C,都看懂了就OK,不用自己现写
五 开发都需要学习哪些软件
总结起来最主要的有以下几个吧
1 ADS调试用
确切的说是ADS+AXD。ADS里包含AXD。原来都用SDT后来ARM公司停止对SDT支持了,改支持ADS了,还是用ADS吧。
有的人的程序发布的仍然是SDT版本的,但基本都可以找到相应ADS的,新人在这里不要发蒙。ADS是编译器,AXD是调试器。便宜成AXF以后再在ARM的RAM里调试。

2 PLASHPGM
FLASH烧写的软件。AXD在RAM里调试,掉电就没有了,方便程序修改。调试好的程序再下到FLASH里,上电直接运行。
同类的软件还有很多,什么FLUTED了、FLSHP了都是,但FLASHPGM最好,要是有人还问FLASH不支持BIN格式文件的问题就要看我写的PLASHPGM使用了。

3 BANYANT调试代理(不知道名对不,起这么个难记的,我一般都叫它“半羊”因为知道它那几天刚吃了烤羊)
调试代理就是用它帮你使用更简单的JTAG(便宜啊)来实现原本1K才卖的JTAG仿真器的大部分功能。JTAG调试原理看我另一篇笔记。简单的就可以把他理解为你自己做的JTAG的驱动就行了。
调试代理还有很多种,什么H-JTAG了、ARM7了(不知道具体叫什么,就记得可执行文件叫ARM7.EXE)都是,BANYANT比较好。
需要注意的是,没种调试代理安装方法虽然都简单 但都不一样,需要看说明。而且AXD调试之前都要运行。省钱了,就别怕麻烦了。

4 ARM-ELF-TOOLS工具链
里面是UCLINUX开发用的工具比如ARM-ELF-GCC只类的。工具链就是把很多工具打包在一起发布的方便你开发的东西。具体安装方法看我另一篇笔记。
另外如果你开发LINUX就要用ARM-LINUX-TOOLS,不一样,不通用。

5 U-BOOT
大名鼎鼎的BOOTLOADER生成工具,同类的好象还有VIVI(名字很暧昧~~)
生成的BOOTLOADER烧到FLASH里,然后就可以用BOOTLOADER下载 烧写其他了
有了BOOTLOADER才能下UCLINUX。BOOTLOADER就像电脑上的BIOS。当然UCOS的不用这个,用什么我不知道:)
最新版本是1.1.4 具体使用方法看我另一篇笔记吧。

6 UCLINUX包
UCLINUX的源码包,不用多说了吧?建议大家用现成的先体会一下,然后再自己编译,裁剪。因为单独UCLINUX的编辑技术上比较简单,但涉及的方面还是比较广的。

7 VMWARE
老牌的虚拟机软件,在一个机器上虚拟出一个机器装LINUX(PC上用的),省得你来回开关机了。记得装VMWARE-TOOLS,安装方法在我另一篇笔记里。

相关帖子

沙发
6019实验室|  楼主 | 2010-1-17 17:49 | 只看该作者
六 有哪些书推荐
        主要推荐三本书,有这3本再加网络就不用别的书了

1 嵌入式设计及linux驱动开发指南——基于ARM9处理器
配套FS2410开发板,学起来比较快

2 ARM体系结构与编程
最重要的是体系结构,汇编部分介绍,看看吧,增加理论素质。

3 44B0数据手册
写在这里是强调它的重要。

其他的书没了几本,没看见好的,大家有看过的推荐吧。


七 选UCOS?UCLINUX?LINUX?VXWORKS?还是当单片机用
       1 搞开发,工程设计,用UCOS,小巧,多进程,简单,体现了ARM7的精髓。
       2 LINUX 正根的嵌入式系统,LINUX消费与通信领域用的比较多,但缺点是必须ARM9才能跑,ARM9的板子自己做就不行了,6层板太贵。买开发板1K达底吧。但是还是推荐选ARM9+LINUX
       3 UCLINUX 算投机嵌入式系统:)ARM7上可以跑,由有LINUX近亲,学好好可以比较方便的转向LINUX,像我一样的穷鬼用吧,呵呵
       4 VXWORKS
学好后可以找到高薪工作,但工作机会本身并不比LINUX好找。
      5 当单片机用
不推荐,因为对于学习来说多进程的系统设计才是ARM7的玩头,至少你也要整个UCOS啊:)
有朋友问我先学这个当基础不行吗?那当然可以~~但我当时就用了1周搞定,就是我先的ADS在RAM中调试的笔记。后来我清空FLASH用的小段程序还是当时写的LED闪烁程序呢。另外1周里其中还因为自己过于菜,没把OM设置好导致晶阵不阵
哈哈。这个是必须做的,但一带而过。目标放的远一点。


八 学习要用多长时间
         我从菜鸟到现在两个多月,中间被打扰数次。仍然搞定了PCB设计与制版,RAM调试,FLASH下载,UBOOT移植和下载UCLINUX(没剪裁,用现成的),LCD驱动。
再次坦诚的说:我确实比较菜,说这些不是让大家羡慕,只是告诉你们“你们应该比这个更好”
我相信良好的态度+合适的方法+及时的总结=成绩


九 ARM都玩什么
就几点
1 硬件设计
2 系统移植
3 驱动开发
4 应用开发
没了。其中推荐把注意力放在后两个上,3有难度,4比较灵活,最重要的是都是找工作的砝码。


十 我用的什么板子
很多人问我这个问题,我特意写过一个的。再说一次吧。
我是自己做的,RAM、ROM、8019等比较麻烦而当时的自己不理解的都按照龚俊的做的。保持其他不便的情况下做了如下改动。
1 加了串口通信的GPS模块、 GPRS模块
一个UART0,一个UART1,当与要用超级终端时用跳线切换。
2 SD卡,和7843触摸屏
同时挂在SPI总线上,因为SPI只能挂一个设备,同时还做了I/O模拟的准备,把两个设备又通过跳线挂在4个IO上。
3 扩了个IIC的35个键子的键盘
用的7290,不占用CPU,最大支持64个键子,只上了35个,其他留接口。
4 把LCD接口按照买的LCD改装了,可以用FPC线直接连接。
所以改动虽然多,但真正很移植了,初期调试有关的并没动,就是为了现在不那么菜的时候做准备:)


十一 开发流程
这里是我的开发流程
1 设计原理图(含WIGGLER的JTAG访真器)
2 设计PCB(含WIGGLER的JTAG访真器)
3 制版
4 焊接电压,确定电压没问题
5 焊接44B0+JTAG电路+WIGGLER的JTAG访真器+周边电路,用BANYANT+仿真器连接,BANYANT提示错误,但可以显示44B0编号,好象是0X0F0F0F0F只类的,说明44B0没问题
6 焊接晶体+RAM+ROM+周边电路,用BANYANT+仿真器连接,可以显示正确的44B0了
7 用BANYANT+仿真器连接,开AXD,在命令行窗口操作RAM,看可不可以修改,可以的话(用内存窗口看RAM地址)RAM就没问题
可以用这个命令“setmem 0xc000000,0xffffffff,32”
我的RAM挂在BANK6上 所以地址是0XC000000,你要是改了就也得改。
8 用我写的《自己写了个C工程模板又写了个使用说明 》里的方法调试程序吧,写个简单的,我当时写个LED闪烁的。看好使不。
9 把程序按照《FLASH烧写总结 》里的烧到FLASH里,测试一下
10 按照《UBOOT 移植操作》移植UBOOT
11 按照《UCLINUX下载简单说明》下个UCLINUX
12 看看驱动开发的方法,自己写个驱动看看
13 还有很多事东西着你玩 呵呵


十二 关于JTAG访真器
JTAG访真器现在用的多是简板的,一个244那种,用的没什么不好。
按照并口定义不同分几种,建议选WIFFLER定义的,因为支持的软件多。这个网上多的是,不多说了。
值得提的是有的JTAG访真器原理图上有跳线用来使能复位信号,这个一般不跳上。就是不用复位信号,因为JTAG协议里本身也可以控制44B0复位。
当然,板子上的复位信号跳线也不用跳。


十三 哪个公司的ARM
这个是问题比较简单。

1 ARM7主要就几个公司的
三星,PHILIP,ATMEL的
ATMEL的有比较便宜的AT91SAM7S32 和AT91SAM7S64 专为8位应用产品量身定做,价格很便宜好象《3刀吧。和PHILIP的21XX差不多,资料太少,项目中选还不错。
其他两家上面说了的不多说了吧


2 ARM9
这个玩2410和2440的多吧,现在2440还比较火啊可以考虑买个了
但是2410就比较便宜了,作为学习来说反到和不错,推荐整一个:)
其实ARM9用的最多的领域应该是消费电子,比如手机PDA,而这上面用的多的应该是INTEL的和TI的吧。
但是INTEL的TI的入门材料少,价格高,自己看情况定吧


嵌入式内功.扎马步[开篇]


嵌入式是门高深的学问,入门的门槛比较高,没有几年的苦心专研不可能有很深的造诣更谈不上出什么成果。嵌入式又是一个热门有挑战性的领域,手机研发、游戏设备开发IPTV、数字视频录像机(DVR)、数字视频广播(DVB)、机顶盒、视频会议系统、网络监控摄像头以及可视电话等高端行业已经渗透进我们生活,在以后还会有更好的发展情景。在这个领域里,有无数的有志软件工程师在这里打拼。他们的收入不等,有的刚起步可能只有2、3K有的可能混的不错成了大牛,有好几十K的。不论怎样,每个人都希望能闯出一番天地,舒舒服服过着有”米“的生活。说到自己有些惭愧,混迹多年还没有什么建树,好的坏的评价都有过,也不知道何时能混出个头。不过值得庆幸的是,时光还没有磨掉自己的那份执着和信念。在那些无数摸索追求奋进的日子里,酸甜苦辣的滋味每每萦绕于心。我不是高手,更不是牛人,不过还是有一些心得可以和同行分享。
  现在很多公司经常打着诸如DSP算法及应用软件工程师、驱动开发工程师、FIRMWARE软件工程师、嵌入式设计工程师、嵌入式软件工程师之类的头衔在网络和人才市场上招人。虽然这些职位在具体事务上有些不同,但总的来说,还是非常相近的。这些企业对嵌入式研发人员的共同要求也正体现了嵌入式的精髓和热门所在,归结起来,主要有下面几点:

1.至少精通一种MCU/MPU体系结构,如ARM、PowerPC、68K/ColdFire;
2.至少精通一种DSP体系结构,如主流的TI TMS320DM642、Blackfin 533/561、 TriMeida和BSP15,理解它们的流水线pipeline的原理和指令特性,熟悉代码优化,熟悉CACHE、DMA和PCI等重要设备;
3.至少精通一种嵌入式操作系统,如VxWorks,embedded
linux,WinCE,uCOS,QNX,PlamOS,Symbian。不需要深入内核,但必须要懂得使用最基本最常用的一些功能,诸如任务管理、信号量、消息队列,并懂得优先级反转和死锁的原理和避免或解决方法;
4.至少精通一种嵌入式语言。越是底层人员越是要注意编码规范,不要以为自己搞底层的就很牛,不书写说明文档和代码注释,让人感觉代码是写给自己看的。现在嵌入式已经不是C的专利,J2EE、EmbddedC++等语言已进入这个领域,在以后肯定会大展拳脚;(关于C可以去看看《关于C的0x8本“经书”[嵌入式必读]》
http://www.embedu.cn/viewthread.php?tid=3125&extra=page%3D1)
5.熟练掌握嵌入式软件设计、项目管理和测试的技巧。特别要注意自己的编码规范,搞软件的可全靠这张"脸"吃饭哦。一个人牛不牛,看代码就知道。(关于测试可以去看看《嵌入式软件测试的十大秘诀》
http://www.embedu.cn/viewthread.php?tid=3124&extra=page%3D1)

备注:这些要求不针对嵌入式硬件工程师和比较上层的嵌入式应用软件开发人员。

  看似简单的几条罗列,实际上每一个要求都需要我们好多年的项目经验积累,这也是国内华为、UT斯达康等大企业要求应聘人员必须具备至少5年软件开发经验的原因(UT斯达康有时候要求8年)。如果有一天你揣着一份对高工资的期望准备在这个领域寻觅工作或准备跳槽到该领域,你是否信心满满,是否都已经具备了这些基本的素养和能力呢?如果有,那我会替你高兴;如果没有,那么平静心态继续努力,打好这些基本功,最好从扎马步开始!
  
  最后引用周星驰的经典台词激励大家:努力啊,奋斗!。
  Embedded software development is all but
  nothing when you are always perseverant !

使用特权

评论回复
板凳
北京户口| | 2010-1-17 17:51 | 只看该作者
从这个帖子可以看出lz是个实在人啊,不错,顶贴了啊~!

使用特权

评论回复
地板
Massif123| | 2010-1-17 19:29 | 只看该作者
写的好,有价值!

使用特权

评论回复
5
kl540| | 2010-3-9 14:16 | 只看该作者
呵呵

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

121

主题

470

帖子

0

粉丝