第一篇:ARM学习心得体会
ARM四天学习心得体会
1.懂得了如何使用IAR的软件使用,使用前要先进行环境的设置,具体见文档IAR使用说明。
2.第一次是学习点亮LED灯,在点亮LED灯中学习到如果要点亮LED灯必须学会调用已经写好的库函数,对系统进行初始化SystemInit();对IO口进行初始化GPIOInit();,还得对GPIO口的设置GPIOSetDir--设置GPIO口为输入为1的IO口,设置完成后就可以对IO口成为输入输出方向,当要点亮LED灯时,要使用到GPIOSetValue();函数,当为确定好某个IO口确定时,后一个为0时可以设置LED灯为点亮了,然后就可以对IO口进行设置了,用法和单片机基本一致,具体可以参考程序《闪灯》。
3.蜂鸣器的鸣响很简单,就是首先对蜂鸣器的IO端口进行设定以驱动蜂鸣器,GPIOSetDir(PORT3, 3, 1);当蜂鸣器需要鸣响时,直接对PORT3_3端口进行赋值0《GPIOSetValue(PORT3, 3, 0);》不让蜂鸣器鸣响则是(GPIOSetValue(PORT3, 3, 01);)就可以了。4.串口的使用
串口开始时要初始化出口,并且通过串口打印前会把数据存在数据缓存区里面,如果我们需要通过输入值来控制ARM板子的功能时,可以读取缓存区(UARTBuffer[UARTCount-1])的内容(缓存区的内的数据都是字符型数据【char】)然后就可以通过输入的值来处理,可以用中断方式,也可以用查询方式,可参考串口中断程序 5.中断的使用
使用中断时需要初始化中断例如:
init_timer32(TEST_TIMER_NUM,TIME_INTERVAL);
// 初始化定时器 enable_timer32(TEST_TIMER_NUM);
//使能定时器使定时器工作 LPC_SYSCON->SYSAHBCLKCTRL |=(1<<6);//能AHB时钟,为GPIO提供时钟源
通过定时器就可以在定时器内直接操作例如图1:
图1 定时器的使用操作要先开使能,与定时器的定时方式如 图2
图2 6.外部中断
外部中断时要先对外部中断的方式进行设置,是下降沿触发还是上升沿触发方式或其他,图3 7.步进电机
InitStep();
//步进机相关引脚初始化
对了步进电机的引脚初始化后就可以对步进电机的转动方向进行控制了,如图4
图4 当MOTOR_CCW 时,为反转方式 8.键盘扫描
对键盘进行操作时,可以对键盘进行操作,可以通过串口输入1~8来控制灯的闪动情况,初始化如图5
图5 对键盘的操作时使用可以参考如下图6:
图6 9.I2C 在I2C中首先要在头文件定义一个#define __DEBUG_FLASH,使后面的程序生效。图7所示:
图7 在I2C里面要输出温度值的后面三位小数要经过处理,如图8所示:
图8 10.ADC芯片
在用到ADC芯片时,可以显示阻值或者mv显示,需经过处理如图9所示:
图9
第二篇:学习ARM的心得体会
arm四天学习心得体会 1.懂得了如何使用iar的软件使用,使用前要先进行环境的设置,具体见文档iar使用说明。
2.第一次是学习点亮led灯,在点亮led灯中学习到如果要点亮led灯必须学会调用已经写好的库函数,对系统进行初始化systeminit();对io口进行初始化gpioinit();,还得对gpio口的设置gpiosetdir--设置gpio口为输入为1的io口,设置完成后就可以对io口成为输入输出方向,当要点亮led灯时,要使用到gpiosetvalue();函数,当为确定好某个io口确定时,后一个为0时可以设置led灯为点亮了,然后就可以对io口进行设置了,用法和单片机基本一致,具体可以参考程序《闪灯》。3.蜂鸣器的鸣响很简单,就是首先对蜂鸣器的io端口进行设定以驱动蜂鸣器,gpiosetdir(port3, 3, 1);当蜂鸣器需要鸣响时,直接对port3_3端口进行赋值0《gpiosetvalue(port3, 3, 0);》不让蜂鸣器鸣响则是(gpiosetvalue(port3, 3, 01);)就可以了。
4.串口的使用
串口开始时要初始化出口,并且通过串口打印前会把数据存在数据缓存区里面,如果我们需要通过输入值来控制arm板子的功能时,可以读取缓存区(uartbuffer[uartcount-1])的内容(缓存区的内的数据都是字符型数据【char】)然后就可以通过输入的值来处理,可以用中断方式,也可以用查询方式,可参考串口中断程序 5.中断的使用
使用中断时需要初始化中断例如: init_timer32(test_timer_num,time_interval);
// 初始化定时器 enable_timer32(test_timer_num);
//使能定时器使定时器工作 lpc_syscon->sysahbclkctrl |=(1<<6);//能ahb时钟,为gpio提供时钟源 通过定时器就可以在定时器内直接操作例如图 1:
图1 定时器的使用操作要先开使能,与定时器的定时方式如 图2 图2 6.外部中断
外部中断时要先对外部中断的方式进行设置,是下降沿触发还是上升沿触发方式或其他,图3 7.步进电机
initstep();//步进机相关引脚初始化
对了步进电机的引脚初始化后就可以对步进电机的转动方向进行控制了,如图 4 图4 当motor_ccw 时,为反转方式 8.键盘扫描
对键盘进行操作时,可以对键盘进行操作,可以通过串口输入1~8来控制灯的闪动情况,初始化如图 5 图5 对键盘的操作时使用可以参考如下图6:
图6 9.i2c 在i2c中首先要在头文件定义一个#define __debug_flash,使后面的程序生效。图7所示:
图7 在i2c里面要输出温度值的后面三位小数要经过处理,如图8所示:
图8 10.adc芯片
在用到adc芯片时,可以显示阻值或者mv显示,需经过处理如图9所示:
图9篇二:arm学习心得etc arm 学习心得
一、通用i/o口设置:
1、使用pinselx定义端口作为通用i/o功能, 每个引脚可能有4个功能, 因此需要用2位来确定其功能
2、设置scs寄存器第0位为1, 使其作为快速i/o端口
3、使用pinmodex定义端口的模式, 分为上拉, 下拉, 浮空, 因此需要用2位来确定其模式
4、使用fioxdir来确定端口方向
5、使用fioxmask与fioxclr, fioxset, fioxpin联合来设置端
口的值
6、由于通用i/o一般情况下方向是确定的, 通常或者为输入, 或者为输出, 要模拟数据总线, 必须在需要的时候, 随时改变端口的方向, 可使用fioxdir寄存器完成此项工作
7、除extint0-extint3外,端口0和端口2均可以作为外部
中断源,它们共用extint3这个外部中断。
8、根据实际情况合理选用。主要对上电时的初始值。上拉或
下拉都是弱的,有时也用外部分电阻上/下拉。对于输入,上拉表示通用端口所连接的外部信号不存在时, 端口值为1, 下拉为0。对于输出,如果没有更改时,上拉输出为高(1), 下拉输出为低(0)。fioxpin总是可以读出端口的状态。fioxpin对非通用i/o端口也可读出其状态。
9、对于内置(片上)外设, 如uart, can, spi等:使用pinselx定
义端口作为特定外设。通常情况作为外设的引脚的方向是确定的,如果可能,还会自动改变方向。大多情况下,无须设置上拉或下拉模。设置外设的参数,如果需要的话,安装中断服务程序外设上电(有些外设默认是上电的,有些不是)启动外设
二、以太网模块心得
实例1:
以微处理器lpc2368为核心、dp83848c为以太网物理层
接口芯片,介绍嵌入式以太网接口的实现方法。
以太网接口电路主要由mac控制器和物理层接口
(physical layer,phy)两大部分构成。lpc2368内嵌一个以太网控制器,支持精简的媒体独立接口(reduced media independent interface,rmii)和带缓冲dma接口(buffered dma interface,bdi),可在半双工和全双工模式下提供10m/100mbps的以太网接入。因此,lpc2368内部实际上己经包含了以太网mac控制,但并未提供物理层接口,所以,需要外接一片物理层芯片以提供以太网的接入通道。在这里选用national semiconductor公司的dp83848c作为以太网物理层接口芯片,它提供了包括mii/rmii/sni接口,可以很方便地与lpc2368连接。dp83848c是一个10/100mb/s单端低功耗物理层器件,有几种智能降功耗模式,包括有25mhz时钟输出,很容易通过
外接变压器和双绞线媒体接口;支持两种ieee 802.3u mii和rmii rev 1.2,方便了设计;集成的亚层支持10base-t和100base-tx以太网协议;低功耗小于270mw、3.3v mac接口;可配置的sni接口;48引脚lqfp封装(7x7mm)。dp83848c作为一种以太网物理层收发器,广泛应用于高端外围设备、工业控制和工厂自动化操作、通用的嵌入式应用领域 lpc2368与dp83848c连接比较简单,直接通过rmii接口连接即可。连接好后,dp83848c再通过网络隔离变压器和rj45接口接入传输媒体,其电路框图如图1所示。
16st8515为网络隔离变压器,其主要是起信号传输、阻抗匹配、波形修复、杂波抑制以及高电压隔离等作用,以保护系统的安全
电路原理图:
实例2: s3c4510b 内嵌一个以太网控制器,支持媒体独立接口(media independent interface,mii)和带缓冲 dma 接口(buffered dma interface,bdi)。在该系统中,使用 rtl8201 作为以太网的物理层接口。篇三:arm的linux常用指令学习心得体会 2010 arm的linux常用指令学习心得体会 2010-01-26 15:42:19 阅读29 评论0 字号:大中小
****************************************************************************************** tar *.tar.bz2 ——>参数 jxfv *.tgz ——>参数 zxfv 或 zxf *.tar.gz ——>参数zxfv 注: j 表示针对bzip2压缩文件; z 表示gzip压缩文件; x 表示释放文件;
f 表示使用档案文件或设备,必选参数; v 表示显示解压信息。
****************************************************************************************** 挂载windows fat32分区 mount-t vfat /dev/hda1 /mnt/c-o codepage=936,iocharset=cp936 注: vfat表示加载fat格式分区;(转载于:学习arm的心得体会)936是为了支持中文提供的代码页字符集选项,如果不加codepage=936,iocharset=cp936的话,加载的fat分区中的文件名不能正确显示中文字符串; codepage=936,iocharset=cp936中间无空格分开的;
可以使用tab键获得硬盘分区信息的提示; /mnt/c是预先建立的挂载目录。
****************************************************************************************** rm rm-rf filename r 表示recuisive递归删除目录下的所有子目录及文件; f 表示force,强制删除,不提示; i 表示interactive,交互的,删除的时候出现提示。??
****************************************************************************************** linux基本操作命令
基本操作命令
--------ls--------ls #以默认方式显示当前目录文件列表 ls –a #显示所有文件包括隐藏文件 ls –l #显示文件属性,包括大小,日期,符号连接,是否可读写及是否可执行 ls--color=never *.so > obj #不显示文字颜色,将所有so文件记录到obj文件中 cd--------cd dir #切换到当前目录下的dir目录 cd / #切换到根目录
cd..#切换到到上一级目录 cd../..#切换到上二级目录 cd ~ #切换到用户目录,比如是root用户,则切换到/root下 rm--------rm file #删除某一个文件
rm-fr dir #删除当前目录下叫dir的整个目录 cp--------cp source target #将文件source 复制为 target cp /root/source.#将/root下的文件source复制到当前目录 cp –av soure_dir target_dir #将整个目录复制,两目录完全一样 cp –fr source_dir target_dir #将整个目录复制,并且是以非链接方式复制,当source目录带有符号链接时,两个目录不相同 mv--------mv source target #将文件source更名为target diff--------diff dir1 dir2 #比较目录1与目录2的文件列表是否相同,但不比较文件的实际内容,不同则列出
diff file1 file2 #比较文件1与文件2的内容是否相同,如果是文本格式的文件,则将不相同的内容显示,如果是二进制代码则只表示两个文件是不同的--------echo--------echo message #显示一串字符 echo message message2 #显示不连续的字符串 cat--------cat file #显示文件的内容,和dos的type相同 cat file | more #显示文件的内容并传输到more程序实现分页显示,使用命令less file可实现相同的功能 more--------more #分页命令,一般通过管道将内容传给它,如ls | more export--------export lc_all=zh_cn.gb2312 #将环境变量lc_all的值设为zh_cn.gb2312 export display=0:0 #通过该设置,当前字符终端下运行的图形程序可直接运行于xserver date--------date #显示当前日期时间
date-s 20:30:30 #设置系统时间为20:30:30 date-s 2002-3-5 #设置系统时期为2003-3-5 clock--------clock –r #对系统bios中读取时间参数 clock –w #将系统时间(如由date设置的时间)写入bios eject--------eject #umout掉cdrom并将光碟弹出,但cdrom不能处于busy的状态,否则无效 du--------du #计算当前目录的容量
du-sm /root #计算/root目录的容量并以m为单位 find--------find-name /path file #在/path目录下查找看是否有文件file grep--------grep-ir “chars” #在当前目录的所有文件查找字串chars,并忽略大小写,-i为大小写,-r为下一级目录 vi--------vi file #编辑文件file vi 原基本使用及命令:
输入命令的方式为先按ctrl+c,然后输入:x(退出),:x!(退出并保存):w(写入文件),:w!(不询问方式写入文件),:r file(读文件file),:%s/oldchars/newchars/g(将所有字串oldchars换成newchars)这一类的命令进行操作 man--------man ls #读取关于ls命令的帮助 man ls | grep color #读取关于ls命令的帮助并通过grep程序在其中查找color字串 startx--------startx #运行linux图形有环境 xfree86 #只运行x图形server reboot--------reboot #重新启动计算机 halt--------halt #关闭计算机 init--------init 0 #关闭所有应用程序和服务,进入纯净的操作环境 init 1 #重新启动应用及服务 init 6 #重新启动计算机--------扩展命令
--------tar--------tar xfzv file.tgz #将文件file.tgz解压 tar xfzv file.tgz-c target_path #将文件file.tgz解压到target_path目录下 tar cfzv file.tgz source_path #将文件source_path压缩为file.tgz tar c directory > directory.tar #将目录directory打包成不压缩的directory.tar tar xf directory.tar #可将不压缩的文件解包 gzip--------gzip directory.tar #将覆盖原文件生成压缩的 directory.tar.gz gunzip--------gunzip directory.tar.gz #覆盖原文件解压生成不压缩的 directory.tar。demsg--------dmesg #显示kernle启动及驱动装载信息 uname--------uname #显示操作系统的类型篇四:arm学习心得,arm入门,arm基础,什么是arm arm学习心得,arm入门,arm基础,什么是arm 一个电子工程师的arm学习心得 目录:
一 首先说说arm的发展 二 arm是硬件还是软件 三 要不要买开发板 买哪家
四 要不要有51 avr等单片机基础 五 开发都需要学习哪些软件
七 选ucos?uclinux?linux?vxworks?还是当单片机用 八 学习要用多长时间 九
arm都玩什么十 我用的什么板子 十一 开发流程
十二 关于jtag访真器十三 哪个公司的arm 我的笔记刚公布就有很多朋友来找我,把我当高手,问我“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了 什么的自己做。都达到了~~就是费钱,费时间。
再有就是给做的朋友几点建议:尽量拿到现成的板子,尽量多搜集其他板子的全套资料,一定要拿到一张没问题的原理图。
网上流传的原理图多数是龚俊03年画的,再这里对龚俊表达一下我的敬意!牛人!但是那个图有个小bug,我指的是03版的,后来的没这问题了。8019那地址线和地址有问题。还有人仿照他的pdf图画的sch,更是漏洞百出!谴责!顺便谴责把龚俊板子偷卖 的人。3 买哪家
个人感觉分3类吧 1)首先是zlg的,资料非常的全,感觉他是真正想教你怎么开发arm,而不是像有的公司自己技术都没做好就做个板子出来卖钱。但是最大的不利就是价格太贵!而且主要是philip的,货源比较麻烦~~可能有人说21xx系列的不贵啊,那是总线不外扩的,只能跑ucos,不能跑uclinux。但是说是话,21xx系列才是arm7的价格性能结合点。arm7最适合做工业控制,arm普及,销量都是怎么来的?都是arm7来的,而44b0是典型的商业片子。但是,这里如果你看中的是为工作做准备,还是选能跑uclinux的吧。但是仍然作为第一个推荐,因为菜鸟时期,合适的资料太重要了!在这里被zlg的务实*感动!你看人家那代码写的。2)感觉硅谷芯微的2440不错
硬件没别的,就是资料比较全的说,不像有些家,原理图直接拿人家的,还错的~~ 3)找个最便宜的好象最便宜的有卖350的吧?也是没别的,就是即省了钱 还省时间搜集资料,至于资料全不全,别计较了~~硬件肯定好使就行吧。
四 要不要有51 avr等单片机基础 有更好,但没有也无所谓。两个月以前,我只是看别人做,耳濡目染~~,本科学过单片机,从来没做过。我们这的技术主干做avr和51,我就跟他们调过c语言程序。你看出来了?我是个不折不扣的菜鸟吧? 但是做这个之前我特意找了zlg的两本书,看了里面的例子和原理图,这很重要。例程里有汇编有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,安装方法在我另一篇笔记里。
七 选ucos?uclinux?linux?vxworks?还是当单片机用 1 搞开发,工程设计,用ucos,小巧,多进程,简单,体现了arm7的精髓。2 linux 正根的嵌入式系统,linux消费与通信领域用的比较多,但缺点是必须arm9才能跑,arm9的板子自己做就不行了,6层板太贵。买开发板500-1500吧。但是还是推荐选arm9+linux 3 uclinux 算投机嵌入式系统:)arm7上可以跑,由有linux近亲,学好好可以比较方便的转向linux,像我一样的穷鬼用吧,呵呵 4 vxworks 学好后可以找到高薪工作,但工作机会本身并不比linux好找。5 当单片机用
不推荐,虽然我景仰的zlg一直号召这么干。因为对于学习来说多进程的系统设计才是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个键子的键盘
用的zlg的7290,不占用cpu,最大支持64个键子,只上了35个,其他留接口。4 把lcd接口按照买的lcd改装了,可以用fpc线直接连接。
所以改动虽然多,但真正很移植了,初期调试有关的并没动,就是为了现在不那么菜的时候做准备:)
十一 开发流程
这里是我的开发流程 1 设计原理图(含wiggler的jtag访真器)2 设计pcb(含wiggler的jtag访真器)3 制版
焊接电压,确定电压没问题 5 焊接44b0+jtag电路+wiggler的jtag访真器+周边电路,用banyant+仿真器连接,篇五:嵌入式心得体会
这学期才接触嵌入式系统感觉还称不上入门,我通过学习知道了嵌入式的发展前景很大,各个领域都用到了嵌入式,学好嵌入式不愁没饭吃。
广义上讲,凡是带有微处理器的专用软硬件系统都是嵌入式系统。如各类单片机和dsp系统。从狭义上讲,那些使用嵌入式微处理器构成独立系统,具有自己操作系统,具有特定功能,用于特定场合的专用软硬件系统称为嵌入式系统。嵌入式系统由嵌入式硬件与嵌入式软件组成;嵌入式硬件以芯片、模板、组件、控制器形式埋藏于设备内部。理解“嵌入”的概念 主要从三个方面上来理解。
1、从硬件上,将基于cpu的处围器件,整合到cpu芯片内部,比如早期基于x86体系结构下的计算机,cpu只是有运算器和累加器的功能,一切芯片要造外部桥路来扩展实现,象串口之类的都是靠外部的16c550/2的串口控制器芯片实现,而目前的这种串口控制器芯片早已集成到cpu内部,还有pc机有显卡,而多数嵌入式处理器都带有lcd控制器,但其种意义上就相当于显卡。比较高端的arm类intel xscale架构下的ixp网络处理器cpu内部集成pci控制器(可配成支持4个pci从设备或配成自身为cpi从设备);还集成3个npe网络处理器引擎,其中两个对应于两个mac地址,可用于网关交换用,而另外一个npe网络处理器引擎支持dsl,只要外面再加个phy芯片即可以实现dsl上网功能。ixp系列最高主频可以达到1.8g,支持2g内存,1g×10或10g×1的以太网口或febre channel的光通道。ixp系列应该是目标基于arm体系统结构下由intel进行整合后成xscale内核的最高的处理器了。
2、从软件上前,就是在定制操作系统内核里将应用一并选入,编译后将内核下载到rom中。而在定制操作系统内核时所选择的应用程序组件就是完成了软件的“嵌入”,比如wince在内核定制时,会有相应选择,其中就是wordpad,pdf,mediaplay等等选择,如果我们选择了,在ce启动后,就可以在界面中找到这些东西,如果是以前pc上将的windows操作系统,多半的东西都需要我们得新再装。
3、把软件内核或应用文件系统等东西烧到嵌入式系统硬件平台中的rom中就实现了一个真正的“嵌入”。
嵌入式系统分为4层,硬件层、驱动层、操作系统层和应用层
1、硬件层,是整个嵌入式系统的根本,如果现在单片机及接口这块很熟悉,并且能用c和汇编语言来编程的话,从嵌入式系统的硬件层走起来相对容易,硬件层也是驱动层的基础,一个优秀的驱动工程师是要能够看懂硬件的电路图和自行完成cpld的逻辑设计的,同时还要对操作系统内核及其调度性相当的熟悉的。但硬件平台是基础,增值还要靠软件。硬件层比较适合于,电子、通信、自动化、机电一体、信息工程类专业的人来搞,需要掌握的专业基础知识有,单片机原理及接口技术、微机原理及接口技术、c语言。
2、驱动层,这部分比较难,驱动工程师不仅要能看懂电路图还要能对操作系统内核十分的精通,以便其所写的驱动程序在系统调用时,不会独占操作系统时间片,而导至其它任务不能动行,不懂操作系统内核架构和实时调度性,没有良好的驱动编写风格,按大多数书上所说添加的驱动的方式,很多人都能做到,但可能连个初级的驱动工程师的水平都达不到,这样所写的驱动在应用调用时就如同windows下我们打开一个程序运行后,再打开一个程序时,要不就是中断以前的程序,要不就是等上一会才能运行后来打开的程序。想做个好的驱动人员没有三、四年功底,操作系统内核不研究上几编,不是太容易成功的,但其工资在嵌入式系统四层中可是最高的。
驱动层比较适合于电子、通信、自动化、机电一体、信息工程类专业尤其是计算机偏体系结构类专业的人来搞,除硬件层所具备的基础学科外,还要对数据结构与算法、操作系统原理、编译原理都要十分精通了解。
3、操作系统层,对于操作系统层目前可能只能说是简单的移植,而很少有人来自已写操
作系统,或者写出缺胳膊少腿的操作系统来,这部分工作大都由驱动工程师来完成。操作系统是负责系统任务的调试、磁盘和文件的管理,而嵌入式系统的实时性十分重要。据说,xp操作系统是微软投入300人用两年时间才搞定的,总时工时是600人年,中科院软件所自己的女娲hopen操作系统估计也得花遇几百人年才能搞定。因此这部分工作相对来讲没有太大意义。
4、应用层,相对来讲较为容易的,如果会在windows下如何进行编程接口函数调用,到操作系统下只是编译和开发环境有相应的变化而已。如果涉及java方面的编程也是如此的。嵌入式系统中涉及算法的由专业算法的人来处理的,不必归结到嵌入式系统范畴内。但如果涉及嵌入式系统下面嵌入式数据库、基于嵌入式系统的网络编程和基于某此应用层面的协议应用开发(比如基于sip、h.323、astrisk)方面又较为复杂,并且有难度了。
通过网上查询我发现目前国内外这方面的人都很稀缺。一方面,是因为这一领域入门门槛较高,不仅要懂较底层软件(例如操作系统级、驱动程序级软件),对软件专业水平要求较高(嵌入式系统对软件设计的时间和空间效率要求较高),而且必须懂得硬件的工作原理,所以非专业it人员很难切入这一领域;另一方面,是因为这一领域较新,目前发展太快,很多软硬件技术出现时间不长或正在出现(如arm处理器、嵌入式操作系统等),掌握这些新技术的人当然很少。嵌入式人才稀缺,身价自然就高,越有经验价格就越高。其实嵌入式人才稀少,根本原因可能是大多数人无条件接触,这需要相应的嵌入式开发板和软件,另外需要有经验的人进行指导开发流程。我们软件系的人学习嵌入式,显然应偏重于嵌入式软件,特别是嵌入式操作系统方面。对于搞嵌入式软件的人,最重要的技术显然是掌握主流嵌入式微处理器的结构与原理,必须掌握一个嵌入式操作系统,必须熟悉嵌入式软件开发流程并至少做过一个嵌入式软件项目。然而我们都没有做过一个嵌入式软件项目,甚至连嵌入式的开发流程我也不清楚,我只了解了使用简单工具做一个简单的实验。只有去专研才能在嵌入式的领域站住脚,只有知道的比别人多才会更有竞争力。通过网上了解,我查询了嵌入式的入门和所需要的知识,其中c语言尤为重要,不管是做嵌入式软件还是硬件开发的人员,对c语言的掌握这个是必需的,特别是对于以后致力于嵌入式软件开发的人,现在绝大部分都是用c语言。其次,应该对操作系统有所了解,这对你对硬件和软件的理解,绝对有很大的帮助。应该把系统的管理理解一下,比如进程、线程,系统如何来分配资源的,系统如何来管理硬件的;知道了c语言和操作系统之后,再来看看嵌入式系统,我们主要学的是arm,用的是arm7,深入理解arm不是件容易的事,只有在知道arm相关知识之后才能称得上嵌入式已经入门了。与嵌入式有关的知识我也学了不少就是不能够综合在一起运用,组成原理,数据结构,操作系统,c++,这3门与嵌入式密切相关的学科都系统的学了一遍,但由于长时间没用到都有点忘记了,从网上得知嵌入式的学习与这些书有很大关系之后,我把嵌入式与以前学过的知识结合起来发现嵌入式的实验中很多都是共通的,我对嵌入式有了初步的理解。
我以为学习嵌入式应该分为2个部分:软件和硬件。关于硬件方面我接触到了数字电路教材和模拟电路方面的知识,但由于没有嵌入式cpu很难亲自动手来实现嵌入式的相关理论;嵌入式入门则需要不断地实验与分析,我只在实验课时做几个与所给的程序相关的小程序来实现一下;而软件方面则学过c语言,里面通常的语法曾今熟悉过;我通过下列方法来适应c语言在嵌入式中应用:首先重新翻看了下c的教材,看了些常见的语法,接着在编译器的角度来看待c,编译原理我刚学过,其中将高级语言与低级语言的翻译感觉在嵌入式中用到了很多;最后冲硬件的角度来看待c。嵌入式的核心包括嵌入式操作系统,嵌入式软件开发平台及工具以及嵌入式应用软件。这些决定怎样才能开发一个好的嵌入式系统。下面谈谈我了解的嵌入式的相关知识与应用: 首先,嵌入式系统是以应用为中心,以计算机技术为基础,且软硬件可裁减,适应应 用系统对功能、可靠性、成本、体积、功耗有严格要求的专用计算机系统。嵌入式有如下几个突出的有点1.系统内核小,2专用性强,3系统精简4高实时性os5嵌入式系统的应用程序可以没有操作系统直接在芯片上运行,6嵌入式系统需要开发工具和环境。嵌入式系统是近几年才风靡起来的,但是这个概念并非新近才出现。从20世纪七十年代单片机(最早的单片机是intel公司的 8048,出现在1976年)的出现到今天各式各样的嵌入式微处理器,微控制器的大规模应用,嵌入式系统已经有了近30年的发展历史。经过30年的发展,嵌入式技术已经日趋成熟,在中国嵌入式机一般由嵌入式微处理器、外围硬件设备、嵌入式操作系统以及用户的应用程序等四个部分组成,用于实现对其他设备的控制、监视或管理等功能。
其次,嵌入式系统无疑是当前最热门最有发展前途的it应用领域之一。嵌入式系统用在一些特定专用设备上,通常这些设备的硬件资源(如处理器、存储器等)非常有限,并且对成本很敏感,有时对实时响应要求很高等。特别是随着消费家电的智能化,嵌入式更显重要。嵌入式系统是软硬结合的学科,通常有两类人会去专研嵌入式:一类是学电子工程、通信工程等偏硬件专业的,另一类是学软件、计算机专业出身的人,主要从事嵌入式操作系统和应用软件的开发。我是软件专业的学习嵌入式,越是智能设备越是复杂系统,软件越起关键作用,而且这是目前的趋势。嵌入式应用在很多方面,具体的可以分为工业控制,交通管理,信息家电,家庭智能管理系统,pos网络及电子商务,环境工程与自然,机器人,机电产品方面应用等方面。其中目前在服务领域,如远程点菜器等已经体现了嵌入式系统的优势。例外还有很多地方用到了嵌入式系统,最近飞利浦和arm共同推出32位risc嵌入式控制器,适用于工业控制,采用最先进的0.18微米cmos嵌入式闪存处理技术,操作电压可以低至1.2伏,它还能降低25%到30%的制造成本,在工业领域中对最终用户而言是一套极具成本效益的解决方案。
那么该如何学好嵌入式我觉得应该从以下几点入手:
首先c语言,这个是毋庸置疑的,不管是做嵌入式软件还是硬件开发的人员,对c语言的掌握这个是必需的,特别是对于以后致力于嵌入式软件开发的人,现在绝大部分都是用c语言,你说不掌握它可以吗?至于如何学习c语言,我想这些基础的知识每个人都有自己的方法,关键要去学习,看书也好,网上找些视频看也好。很多人会问,c语言要学到怎么样,我觉得这没有标准的答案。我想至少你在明白了一些基础的概念后,就该写代码了,动手才是最重要的,当你动手了,遇到问题了,再反过来学习,反过来查查课本,那时的收获就不是你死看书能得到的。其次,应该对操作系统有所了解,这对你对硬件和软件的理解,绝对有很大的帮助。应该把系统的管理理解一下,比如进程、线程,系统如何来分配资源的,系统如何来管理硬件的,当然,不是看书就能把这些理解透,如果不是一时能理解,没关系,多看看,结合以后的项目经验,会有更好的理解的。
还有应该学习下linux或者wince下的编程,这些对以后做应用的编程很有帮助,当然,如果做手机的话,那可以学习mtk、塞班、android等操作系统,android是以后发展的趋势,现在很热门,android也是基于linux系统封装的,所以建议先学习下linux。
还有,应该学习下单片机或者arm或者mips,很多人说我没有单片机的经验,直接学arm可以吗?我觉得那完全没有问题的,当然如果你学习过单片机,那最好不过了,以后学习arm就更简单了。
最后如果你把以上的知识都有所了解后,就该去阅读阅读一些优秀的代码,比如结合arm芯片手册学习去学习下uboot的源代码,了解下最小的系统开发,那对你整个嵌入式开发的非常有帮助的,可以的话,还可以学习下linux的源代码,当然如果你直接阅读2.6的代码,我想你会很痛苦的,可以先看看linux 代码早期的版本,比如0.12 的代码等等,麻雀虽
小,五脏俱全,如果你全看完了,那我想你就是一名很成功的嵌入式工程师。
以上就是我在本学期学习嵌入式后的心得及感想。
第三篇:ARM学习规划(经典).
ARM 学习规划
ARM+LINUX路线,主攻嵌入式 Linux 操作系统及其上应用软件开发目标:(1 掌握主流嵌入式微处理器的结构与原理(初步定为 arm9(2 必须掌握一个嵌入式操作系统(初步定为 uclinux 或 linux, 版本待定(3 必须熟悉嵌入式软件开发流程并至少做一个嵌入式软件项目。从事嵌入式软件开发的好处是:(1目前国内外这方面的人都很稀缺。这一领域入门门槛较高,所以非专业 IT 人员很难切入这一领域;另一方面,是 因为这一领域较新,目前发展太快,大多数人无条件接触。
(2与企业计算等应用软件不同,嵌入式领域人才的工作强度通常低一些(但收入不低。
(3哪天若想创业,搞自已的产品,嵌入式不像应用软件那样容易被盗版。硬件设计一般都是请其它公司给订做(这 叫 “ 贴牌 ” :OEM ,都是通用的硬件,我们只管设计软件就变成自己的产品了。
(4兴趣所在,这是最主要的。从事嵌入式软件开发的缺点是:(1 入门起点较高,所用到的技术往往都有一定难度,若软硬件基础不好,特别是操作系统级软件功底不深,则可能 不适于此行。
(2这方面的企业数量要远少于企业计算类企业。
(3有少数公司经常要硕士以上的人搞嵌入式,主要是基于嵌入式的难度。但大多数公司也并无此要求,只要有经验 即可。
(4平台依托强,换平台比较辛苦。兴趣的由来:
1、成功观念不同,不虚度此生,就是我的成功。
2、喜欢思考,挑战逻辑思维。
3、喜欢 C C 是一种能发挥思维极限的语言。关于 C 的精神的一些方面可以被概述成短句如下: 相信程序员。
不要阻止程序员做那些需要去做的。保持语言短小精干。一种方法做一个操作。
使得它运行的够快,尽管它并不能保证将是可移植的。
4、喜欢底层开发,讨厌 vb 类开发工具(并不是说 vb 不好。
5、发展前景好,适合创业,不想自己要死了的时候还是一个工程师。方法步骤:
1、基础知识: 目的:能看懂硬件工作原理,但重点在嵌入式软件, 特别是操作系统级软件 ,那将是我的优势。
科目:数字电路、计算机组成原理、嵌入式微处理器结构。
汇编语言、C/C++、编译原理、离散数学。
数据结构和算法、操作系统、软件工程、网络、数据库。
方法:虽科目众多,但都是较简单的基础,且大部分已掌握。不一定全学,可根据需要选修。
主攻书籍:the c++ programming language(一直没时间读、数据结构-C2。
2、学习linux : 目的:深入掌握 linux 系统。
方法:使用 linux — 〉 linxu 系统编程开发 — 〉驱动开发和分析 linux 内核。先看深,那主讲原理。看几遍后,看情景分析, 对照深看,两本交叉,深是纲,情是目。剖析则是 0.11版,适合学习。最后深入代码。
主攻书籍:linux 内核完全剖析、unix 环境高级编程、深入理解 linux 内核、情景分析和源代。
3、学习嵌入式 linux : 目的:掌握嵌入式处理器其及系统。方法:(1嵌入式微处理器结构与应用:直接 arm 原理及汇编即可,不要重复 x86。(2嵌入式操作系统类:ucOS/II简单,开源,可供入门。而后深入研究 uClinux。(3必须有块开发板(arm9以上 ,有条件可参加培训(进步快,能认识些朋友。主攻书籍:毛德操的《嵌入式系统》及其他 arm9手册与 arm 汇编指令等。
4、深入学习:
A、数字图像压缩技术:主要是应掌握 MPEG、mp3等编解码算法和技术。B、通信协议及编程技术:TCP/IP协议、802.11, Bluetooth , GPRS、GSM、CDMA 等。
C、网络与信息安全技术:如加密技术,数字证书 CA 等。
D、DSP 技术:Digital Signal Process, DSP 处理器通过硬件实现数字信号处理算法。
说明:太多细节未说明,可根据实际情况调整。重点在于1、3,不必完全按照顺序作。对于学习c++,理由是 c++不只 是一种语言,一种工具,她还是一种艺术,一种文化,一种哲学理念、但不是拿来炫耀得东西。对于 linux 内核,学习编程,读一些优秀代码也是有必要的。
注意:要学会举一反多,有强大的基础,很多东西简单看看就能会。想成为合格的程序员,前提是必须熟练至少一种 编程语言,并具有良好的逻辑思维。一定要理论结合实践。
不要一味钻研技术,虽然挤出时间是很难做到的,但还是要留点余地去完善其他的爱好,比如宇宙,素描、机械、管理, 心理学、游戏、科幻电影。还有一些不愿意做但必须要做的!技术是通过编程编程在编程编出来的。永远不要梦想一步登天,不要做浮躁的人,不要觉得路途漫上。而是要编程编程 在编程,完了在编程,在编程!等机会来了在创业(不要相信有奇迹发生,盲目创业很难成功,即便成功了发展空间也 不一定很大。
嵌入式书籍推荐 Linux 基础
1、《 Linux 与 Unix Shell 编程指南》
C 语言基础
1、《 C Primer Plus, 5th Edition》 【美】 Stephen Prata着
2、《 The C Programming Language, 2nd Edition》 【美】 Brian W.Kernighan David M.Rithie(K & R着
3、《 Advanced Programming in the UNIX Environment, 2nd Edition》(APUE
4、《嵌入式 Linux 应用程序开发详解》 Linux 内核
1、《深入理解 Linux 内核》(第三版
2、《 Linux 内核源代码情景分析》毛德操 胡希明着 研发方向
1、《 UNIX Network Programming》(UNP
2、《 TCP/IP详解》
3、《 Linux 内核编程》
4、《 Linux 设备驱动开发》(LDD 硬件基础
1、《 ARM 体系结构与编程》杜春雷着
2、S3C2410 Datasheet 英语基础
1、《计算机与通信专业英语》
系统教程
1、《嵌入式系统 ―― 体系结构、编程与设计》
2、《嵌入式系统 ―― 采用公开源代码和 StrongARM/Xscale处理器》毛德操 胡希明着
3、《 Building Embedded Linux Systems》 理论基础
1、《算法导论》
2、《数据结构(C 语言版 》 阿斯事实上
第四篇:ARM学习心得
ARM linux学习心得(zt)
2008-08-13 13:55
由于很多人总问这个问题,所以这里做一个总结文档供大家参考。
这里必须先说明,以下的步骤都是针对Linux系统的,并不面向WinCE。也许你会注意到,现在做嵌入式的人中,做linux研究的人远比做WinCE的人多,很多产家提供的资料也是以linux为主。我一直很难理解,其实WinCE的界面比linux的界面好看多了,使用起来也很方便,更为重要的是,WinCE的开发和Windows下的开发基本一样,学起来简单得多,但是学linux或者使用linux做嵌入式的人就是远比WinCE多。在和很多工作的人交流时我了解到,他们公司从没考虑使用WinCE,因为成本高,都是使用linux进行开发。我读研究生的的实验室中也没有使用WinCE的,大都研究linux,也有少部分项目使用vxwork,但是就没有听说过使用WinCE的,原因就是开源!当然现在WinCE6.0听说也开源,不过在成本和资源上linux已经有了无人能挡的优势。与此相对应的是,越来越多的电子厂商已经开始使用linux开发产品。举个例子,Google近期开发的智能手机操作系统Android其实就是使用linux-2.6.23内核进行改进得到的。
第一,学习基本的裸机编程。
对于学硬件的人而言,必须先对硬件的基本使用方法有感性的认识,更必须深刻认识该硬件的控制方式,如果一开始就学linux系统、学移植那么只会马上就陷入一个很深的漩涡。我在刚刚开始学ARM的时候是选择ARM7(主意是当时ARM9还很贵),学ARM7的时候还是保持着学51单片机的思维,使用ADS去编程,第一个实验就是控制led。学过一段时间ARM的人都会笑这样很笨,实际上也不是,我倒是觉得有这个过程会好很多,因为无论做多复杂的系统最终都会落实到这些最底层的硬件控制,因此对这些硬件的控制有了感性的认识就好很多了
学习裸机的编程的同时要好好理解这个硬件的构架、控制原理,这些我称他为理解硬件。所谓的理解硬件就是说,理解这个硬件是怎么组织这么多资源的,这些资源又是怎么由cpu、由编程进行控制的。比如说,s3c2410中有AD转换器,有GPIO(通用IO口),还有nandflash控制器,这些东西都有一些寄存器来控制,这些寄存器都有一个地址,那么这些地址是什么意思?又怎么通过寄存器来控制这些外围设备的运转?还有,norflash内部的每一个单元在这个芯片的内存中都有一个相应的地址单元,那么这些地址与刚刚说的寄存器地址又有什么关系?他们是一样的吗?而与norflash相对应的nandflash内部的储存单元并不是线性排放的,那么s3c2410怎么将nandflash的地址映射在内存空间上进行使用?或者简单地说应该怎么用nandflash?再有,使用ADS进对ARM9行编程时都需要使用到一个初始化的汇编文件,这个文件究竟有什么用?他里面的代码是什么意思?不要这个可以吗?
诸如此类都是对硬件的理解,理解了这些东西就对硬件有很深的理解了,这对以后更深一步的学习将有很大的帮助,如果跳过这一步,我相信越往后学越会
觉得迷茫,越觉得这写东西深不可测。因为,你的根基没打好。
不过先声明一下,本人并没有使用ADS对ARM9进行编程,我是学完ARM7后直接就使用ARM9学linux系统的,因此涉及使用ADS对ARM9进行编程的问题我很难回答^_^,自己去研究研究吧。
对于这部分不久将提供一份教程,这个教程中的例程并不是我为我们所代理的板子写的,是我在我们学院实验室拿的,英培特为他们自己的实验箱写的,不过很有借鉴意义,可以作为一份有价值的参考。
第二,使用linux系统进行一些基本的实验。
在买一套板子的时候一般会提供一些linux的试验例程,好好做一段时间这个吧,这个过程也是很有意义的,也是为进一步的学习积累感性认识,你能想象一个从没有使用过linux系统的人能学好linux的编程吗?好好按照手册上的例程做一做里面的实验,虽然有点娃娃学走路,有点弱智,但是我想很多高手都会经历这个过程。
在这方面我们深蓝科技目前没有计划提供相应的例程,主要是开发板的提供商会提供很丰富的例程,我们不做重复工作,只提供他们没有的、最有价值的东西给大家。
第三,研究完整的linux系统的的运行过程。
所谓完整的linux系统包括哪些部分呢?
三部分:bootloader、linux kernel(linux内核)、rootfile(根文件系统)。那么这3部分是怎么相互协作来构成这个系统的呢?各自有什么用呢?三者有什么联系?怎么联系?系统的执行流程又是怎么样的呢?搞清楚这个问题你对整个系统的运行就很清楚了,对于下一步制作这个linux系统就打下了另一个重要的根基。介绍这方面的资料网上可以挖掘到几吨,自己好好研究吧。第四,开始做系统移植。
上面说到完整的linux有3部分,而且你也知道了他们之间的关系和作用,那么现在你要做的便是自己动手学会制作这些东西。
当然我不可能叫你编写这些代码,这不实现。事实上这个3者都能在网下载到相应的源代码,但是这个源代码不可能下载编译后就能在你的系统上运行,需要很多的修改,直到他能运行在你的板子上,这个修改的过程就叫移植。在进行移植的过程中你要学的东西很多,要懂的相关知识也很多,等你完成了这个过程你会发现你已经算是一个初出茅庐的高手了。
在这个过程中如果你很有研究精神的话你必然会想到看源代码。很多书介绍你
怎么阅读linux源代码,我不提倡无目的地去看linux源代码,用许三多的话说,这没有意义。等你在做移植的时候你觉得你必须去看源代码时再去找基本好书看看,这里我推荐一本好书倪继利的《linux内核的分析与编程》,这是一本针对linux-2.6.11内核的书,说得很深,建议先提高自己的C语言编程水平再去看。
至于每个部分的移植网上也可以找到好多吨的资料,自己研究研究吧,不过要提醒的是,很多介绍自己经验的东西都或多或少有所保留,你按照他说的去做总有一些问题,但是他不会告诉你怎么解决,这时就要靠自己,如果自己都靠不住就找我一起研究研究吧,我也不能保证能解决你的问题,因为我未必遇到过你的问题,不过我相信能给你一点建议,也许有助你解决问题。
这一步的最终目的是,从源代码的官方主页上(都是外国的,悲哀)下载标准的源代码包,然后进行修改,最终运行在板子上。
盗用阿基米德的一句话:“给我一根网线,我能将linux搞定”。
第五,研究linux驱动程序的编写。
移植系统并不是最终的目的,最终的目的是开发产品,做项目,这些都要进行驱动程序的开发。
Linux的驱动程序可以说是五花八门,linux2.4和linux2.6的编写有相当大的区别,就是同为linux2.6但是不同版本间的驱动程序也有区别,因此编写linux的驱动程序变都不是那么容易的事情,对于最新版本的驱动程序的编写甚至还没有足够的参考资料。那么我的建议就是使用、移植一个不算很新的版本内核,这样到时学驱动的编程就有足够的资料了。
这部分的推荐书籍可以参考另一篇文章《推荐几本学习嵌入式linux的书籍》。第六,研究应用程序的编写。
做作品做项目除了编写驱动程序,最后还要编写应用程序。现在的趋势是图形应用程序的开发,而图形应用程序中用得最多的还是qt/e函数库。我一直就使用这个函数库来开发自己的应用程序,不过我希望你能使用国产的MiniGUI函数库。盗用周杰伦的广告词就是“支持国产,支持MiniGUI”。MiniGUI的编程比较相似Windows下的VC编程,比较容易上手,效果应该说是相当不错的,我曾使用过来开发ARM7的程序。不过MiniGUI最大的不好就是没有像qtopia这样的图形操作平台,这大大限制了他的推广,我曾经幻想过与北京飞漫公司(就是MiniGUI的版权拥有者)合作使用MiniGUI函数库开发像qtopia这样的图形操作平台,不过由于水平有限这只能是幻想了,呵呵。
完成这一步你基本就学完了嵌入式linux的全部内容了。
还有一个小小的经验想和大家分享。我在学习嵌入式linux的过程中很少问人,客观原因是身边的老师、同学师兄都没有这方面的高手,主观原因是我不喜欢问人,喜欢自己研究解决问题。这样做有个好处,就是可以提高自己解决问题的能力,因为做这些东西总有很多问题你难以理解,别人也没有这方面的经验,也不是所有问题都有人给你答案,这时必须要自己解决问题,这样,个人的解决问题能力就显得非常关键了。因此我的建议就是一般的问题到网上搜索一下,确实找不到答案了就问问高手,还是不行了就自己去研究,不要一味去等别人帮你解决问题。
记住,问题是学习的最好机会。
第五篇:arm心得.
心得体会(许晶)
本次实习时间是一周,我们组所选的题目是直流电动机转速控制设计,其要求有:硬件部分要求在LPC2100系列ARM的最小系统的基础上,设计通过按键控制直流电动机速度的驱动电路,要求通过LPC2100内置的PWM发生器控制直流电动机;并将电动机速度通过串口送至PC机。软件部分要求设计以上功能的脱机运行程序,并在试验室调试通过。我负责的是硬件部分。首先我将系统分为两部分。一是电动机控制驱动电路;二是ARM最小系统。在电动机驱动中,直流电机控制使用了H桥驱动电路,控制口线为P0.21、P0.22。在ARM最小系统中,分为5部分:电源电路、复位电路、JTAG接口电路、RS232串口电路、时钟电路。
在制作原理图中,我查阅了实验指导书和课本。我所选用的是2114板子。因为LPC2114是基于一个支持实时仿真和跟踪的16/32位ARM7TDMI-STM CPU的微控制器,并带有128/256 k字节(kB)嵌入的高速Flash存储器。128位宽度的存储器接口和独特的加速结构使32位代码能够在最大时钟速率下运行。对代码规模有严格控制的应用可使用16位Thumb模式将代码规模降低超过30%,而性能的损失却很小。
在这个过程中,我注意到了许多问题。通过最小系统的制图,我对一些问题逐渐了解,不像刚开始学习一样,感觉什么也不懂,硬装知识。我画了5部分,这几个部分让我对书上的内容更加深了学习。如:时钟电路中,我就把时钟系统和晶体振荡两节课程,重新学习。
而在软件设计中,在我的搭档编程完之后,我也对程序进行了研究。在主程序中,我们用的是i、j表示速度与方向,正转为“+”、反转为“—”;最小速度为1,最大速度为4。先让电机正向慢慢的加速,加到正传的最大速后,在按下就变成反转,然后在依次加速,往返循环,直至没有按键按下。所运用的是,调节PWM的占空比就能达到电机的速度调节。
我们组在硬件中遇到的问题并不多,主要是在画各部分原理图时找器件很不熟练,不能很快的找到。这说明我不经常用软件。其实这个软件制图很方便,各种器件几乎都能找到,找不到时也可以在上面画图。
软件中,程序在编译正确后,下载方面出现了许多问题,如连接不上;不能生成hex文件等。其实这些问题,都是因为我们对软件不熟悉所造成的。在我们多次调试、链接之后,终于完成。
经过一周实习,是我对ARM系统有了更深刻的认识。因为前期大家都找工作的原因,我并没有特别认真的学习,而这次的实习,可以让我重新再次拿起课本,认真学习。并且使我感触最深的是,由于嵌入系统的广泛应用,我应该更好的去学习它、掌握它。像掌握办公自动化一样,成为必不可少的技术。