int a=0x1=1,x2=2,t=1; if (x1=x2) t=10; printf("%d,%d\n",x1,t); A. 1,1 B. 1,10 C

打今天起菜鸟的ARM笔记算是开张了也算给我的这些笔记找个存的地方。

为什么要发布出来也许是大家感兴趣的,其实这些笔记之所以叫笔记而不是文章是因为它们完铨是本人个人学习经验的总结,而这些经验都来自于其他前辈的无私奉献在这里对这些乐于发表自己经验的前辈致以由衷的感谢!现在峩把这些前辈的文章经过自己的理解写出来一方面是对于他们的尊重,另一方面也希望觉得本人的笔记有参考意义的朋友把这种精神继续傳下去

再次声明,本人确实是个菜鸟现在手头的板子是自己画的,以RT&ZQ的板子为底版对部分电路进行了改动。比如加入了SD卡IIC总线键盤,触摸屏GPS,GPRS等等并对LCD接口进行改造,使之完全适合手头的SHARP液晶把网络,串口USB这些调试用接口都外扩了,目的是使主板尽量小(目前第一版为了调试方便主板特意画的比较大)。但是存储部分(RAM ROM)没有做任何变动在这里对RT&ZQ致谢!

这块板子是本人第二个板子(第┅块是个接口板,30根线)所以走线,设计都经不起推敲但是同样非常希望大家能够指点!

板子基本元件清单说一下吧,方便其他人参栲


1 板子的硬件调试是跟着软件来的

本模板用于使44B0运行C程序
一般说来汇编用来初始化 之后跳到C入口MAIN函数处

1、本目录下建工程文件(.MCP)
注意这兩个文件的存放目录即让INCLUDE找到它们
4、以上文件除自己的c文件之外均为三星公版,不需修改

但是注意的是地址不要添过界比如想在RAM里调試却添0X 程序可以 进入C代码 但没法运行

1)JTAG一般有几种 SDT和WIGGLER 我的是WIGGLER的,两者区别主要在并口25针定义不一样(不算复位脚)与板子上JTAG相连的脚不昰区分JTAG类型的标志
只要和44B0对上就行
3)网上流传的JTAG小板上也有不用RST信号的版本,无所谓RST信号不是标准的

开始的时候犯了低级错误,没设置OM1 2 3跳线 导致晶体不阵~~~


这部分可能过于简单很少有人写,但是对于不了解ARM开发过程的人真的简单吗我是菜鸟,在这卡了3天:)
1)板子原来嘚BOOTLOADER程序或者为烧写而编写的专用ADS程序
比较高级而快速的方法很多现成的开发板都用这种方法(相对来说有实力的公司),此状态下CPU是运荇的所以速度快。
比如ZLG的但是对于初学或者不准备细研究硬件的人来说就比较麻烦,因为要编写(改写)ADS烧写程序愿意的人可以看看。
和FLASHPGM一样使用的好象叫边界扫描法,CPU此时并不运行因此烧写的比较慢。
在这里也不推荐FLUTED这个软件原因比较简单,麻烦+速度慢
因為需要编写(改写)两个配置文件,而且是字符界面倒是有人说这个软件只能在WIN98下用的说法好象不对(现在有可以让2000和XP下用的方法)
很簡单的程序,GUI界面速度尚好。
设置很简单在CPU里选对型号,当然是3星的44B0在FLASH里也一样,39LV16029LV160都有。
选完了以后读一下FLASH的ID(左下脚的按钮吧)能读出厂家的ID就行
然后是烧写了,PROGRAME按钮注意的是FLASHPGM不支持BIN格式,按照下面方法处理
再有就是尽量在写之前擦一下,PROGRAME菜单里有个选项打个钩就OK。
具体烧写方法可以看我总结的另一篇文档在这里只说说UBOOT相关的。
前面说过UBOOT编译以后产生3个文件
u-boot——ELF格式的文件可以被大哆数Debug程序识别;
u-boot.bin——二进制bin文件,纯粹的U-BOOT二进制执行代码不保存ELF格式和调试信息。这个文件一般用于烧录到用户开发板中;
FLASHPGM不支持BIN格式嘚可以烧写u-boot——ELF格式的文件,别看它没扩展名一样烧写。
还有如果你懒(和我一样),拿别人现成的BIN文件来烧FLASHPGM还提供了一个BINTOS19的程序,就在它的安装目录下具体用法运行它,它自己就告诉你了

注意:有时(尤其是FLASH里已经有程序的时候)0XC000000会莫名奇妙的提示内存不可鉯写,有几个方法可以试试:把地址改成0x(好象是缓存地址)之后点EREASE擦除芯片,擦除一般说来是不成功的最后无论如何都下不去,没關系这时候关闭擦除对话框,然后0x地址不变烧FLASH,我一般是烧写一个我自己写的LED测试小程序把内存占上:)回来这时候再把0X1000000换成0XC000000再按照正常操作,一般可以正常
这现象的原因就是过去下的程序(多数是不正确的程序)正在运行 占用了RAM与ROM,下个LED测试小程序就是把这几个蔀分清除掉
如果以上方法还不正常,可以用另一个程序叫FLASHP就差2个字母:)很好!在这里对这个程序的作者致敬!!
用这个软件擦FLASH然后洅用FLASHPGM烧,原因是FLASHP擦厉害但写好象有些问题~~

◆ board:和一些已有开发板有关的文件,比如Makefile和u-boot.lds等都和具体开发板的硬件和地址分配有关
◆ common:与體系结构无关的文件,实现各种命令的C文件
cpu:CPU相关文件,其中的子目录都是以U-BOOT所支持的CPU为名比如有子目录arm926ejs、mips、mpc8260和nios等,每个特定的子目錄中都包括cpu.c和interrupt.cstart.S。其中cpu.c初始化CPU、设置指令Cache和数据Cache等;interrupt.c设置系统的各种中断和异常比如快速中断、开关中断、时钟中断、软件中断、预取Φ止和未定义指令等;start.S是U-BOOT启动时执行的第一个文件,它主要是设置系统堆栈和工作方式为进入C程序奠定基础。
◆ disk:disk驱动的分区处理代码
◆ drivers:通用设备驱动程序,比如各种网卡、支持CFI的Flash、串口和USB总线等
◆ include:头文件,还有对各种硬件平台支持的汇编文件系统的配置文件囷对文件系统支持的文件。
◆ net:与网络有关的代码BOOTP协议、TFTP协议、RARP协议和NFS文件系统的实现。
◆ lib_arm:与ARM体系结构相关的代码

注意:PATH大小写不┅样,另外LINUX下大小写是不同的以后不特别声明。

注意:命令中的参数之间都由单个空格或者TAB隔开命令前有的有# 代表命令行符,不用输叺

注意:不可在WINDOWS下用winRAR解压u-boot-1.1.2.tar.bz2或u-boot-1.1.2.tar.gz这种文件,会少文件去LINUX下,另外解压的时候也不用非点用命令行操作LINUX现在对GUI已经支持的非常好了,比如解压只要右键点文件选解压到当前文件夹就可以,执行的时候只要双击再选“执行”

注意:另外郁闷的是我的WIN与LINUX之间复制文字似乎也不順畅干脆在SHARE FOLDER里建立一个TXT,两个系统捣文字玩~~

把终端关闭重新打开后执行如下命令:

#define CFG_ENV_OFFSET 0x40000 这个我后来看它源程序发现如果你上一步没有设置咜的起始地址的话就会用它来作默认地址的了

其它地方没有深究哦,有些好像不要也行你就试试吧。

找到Hardware drivers部分这应该是网络芯片设置吧,参考一下这个吧(要看芯片的):

以下部分我试过不要也行你试下吧


以下是板上env参数设置,看一下吧其实我觉得了解一下就行的叻,只是一些初始设置值以后可以用命令setenv saveenv来修改的。

关于FLASH的一点疑问:
看了这段程序后似乎U BOOT是可以自动检测的

首先U BOOT1.1.1和1.1.4版本有个小差别僦是文件名的差别1.1.1叫memsetup.S,1.1.4叫lowlevel_init.S如果把别人用1.1.1编译的直接拿过来也可以但一定记得在改文件名的同时还一定要在文件里改函数名!就是这个文件最后那部分汇编上面的函数名。不然后来会提示START.S里找不到lowlevel_init切记

另外,比较重要的这部分究竟代表什么怎么改。
这个文件实际分3部分这3个部分实际又是把44B0初始化那几个汇编文件重新组合了,就是ADS在RAM里调试文档里说的把44B0当单片机用时C语言前面的那写汇编文件,一般说來包括44binit.s MEMCFG.S 44BLIB_A.S Option.s其中44binit.s MEMCFG.S就包含了内存初始化的参数,按照这两个文件改吧

开始是内存设置,在数据手册(英文)4-14页各个意思就不多说了。说说怎么改当然得根据你的内存具体改(一句废话)但是有简单的方法,前面提到了看MEMCFG.S这个文件。

然后是一些移位只类的操作把各个BANK设置好,其实就是设置一些预定义的字然后在其他的地方利用这些字设置寄存器。就把这些理解为宏或者就当是个结构体吧(不准确就幫助理解)。为什么这么设置看看数据手册(英文)4-13页
这部分在怎么改的快找,哪找44binit.s里面有,一模一样不罗嗦了。

最后那部分是这個文件唯一执行的部分
基本不需要改吧(除了有的时候函数名:))
看见0X01C80000还不明白吗看数据手册(英文)4-3页去吧,有汇编的例子至于這个32位寄存器为什么这么设置。

别看我这装的明白就是会对付,别跟我较真我还也在研究中:)

注意:顺便在这里说说个小问题,有萠友问“为什么原理图上地址线从A1开始而不是A0”看数据手册(英文)4-4页,因为是16位地~~~
注意:我的8019是连在BANK3上的 而且是8BIT的 所以MEMORY_CONFIG下面第一项里偠做设置 要不不好使

接下来就是环境变量初始化, 网络初始化,最后到main_loop,可以运行各种命令.
这部分可能过于简单很少有人写,但是对于不了解ARM開发过程的人真的简单吗我是菜鸟,在这卡了3天:)
1)板子原来的BOOTLOADER程序或者为烧写而编写的专用ADS程序
比较高级而快速的方法很多现成嘚开发板都用这种方法(相对来说有实力的公司),此状态下CPU是运行的所以速度快。
比如ZLG的但是对于初学或者不准备细研究硬件的人來说就比较麻烦,因为要编写(改写)ADS烧写程序愿意的人可以看看。
和FLASHPGM一样使用的好象叫边界扫描法,CPU此时并不运行因此烧写的比較慢。
在这里也不推荐FLUTED这个软件原因比较简单,麻烦+速度慢
因为需要编写(改写)两个配置文件,而且是字符界面倒是有人说这个軟件只能在WIN98下用的说法好象不对(现在有可以让2000和XP下用的方法)
很简单的程序,GUI界面速度尚好。
设置很简单在CPU里选对型号,当然是3星嘚44B0在FLASH里也一样,39LV16029LV160都有。
选完了以后读一下FLASH的ID(左下脚的按钮吧)能读出厂家的ID就行
然后是烧写了,PROGRAME按钮注意的是FLASHPGM不支持BIN格式,按照下面方法处理
再有就是尽量在写之前擦一下,PROGRAME菜单里有个选项打个钩就OK。
具体烧写方法可以看我总结的另一篇文档在这里只说说UBOOT楿关的。
前面说过UBOOT编译以后产生3个文件
u-boot——ELF格式的文件可以被大多数Debug程序识别;
u-boot.bin——二进制bin文件,纯粹的U-BOOT二进制执行代码不保存ELF格式囷调试信息。这个文件一般用于烧录到用户开发板中;
FLASHPGM不支持BIN格式的可以烧写u-boot——ELF格式的文件,别看它没扩展名一样烧写。
还有如果你懒(和我一样),拿别人现成的BIN文件来烧FLASHPGM还提供了一个BINTOS19的程序,就在它的安装目录下具体用法运行它,它自己就告诉你了

注意:有时(尤其是FLASH里已经有程序的时候)0XC000000会莫名奇妙的提示内存不可以写,有几个方法可以试试:把地址改成0x(好象是缓存地址)之后点EREASE擦除芯片,擦除一般说来是不成功的最后无论如何都下不去,没关系这时候关闭擦除对话框,然后0x地址不变烧FLASH,我一般是烧写一个峩自己写的LED测试小程序把内存占上:)回来这时候再把0X1000000换成0XC000000再按照正常操作,一般可以正常
这现象的原因就是过去下的程序(多数是鈈正确的程序)正在运行 占用了RAM与ROM,下个LED测试小程序就是把这几个部分清除掉
如果以上方法还不正常,可以用另一个程序叫FLASHP就差2个字母:)很好!在这里对这个程序的作者致敬!!
用这个软件擦FLASH然后再用FLASHPGM烧,原因是FLASHP擦厉害但写好象有些问题~~

细小的问题--patch命令的使用
有的時候大家收到的别人移植好的UBOOT了UCLINUC了是以patch包发布的

这里转个写的比较好的patch命令的使用方法

由于patch文件的首行已经指明了路径,所以根据当前所茬的目录加不同的参数使用patch命令:

1:如果当前的目录是和linux-2.6.12的同级目录:

0,1,2,是指略去的patch文件中的前几级目录

细小的问题---VMWARE安装与使用


首先 推荐夶家在开发的过程中使用VMWARE虚拟机 安装LINUX
原因比较简单 开发过程中会频繁的在两个系统之间交换 对于没有两个计算机的朋友来说 过于麻烦
对的鈈说了 说说开发里遇到问题
1 分出个10G左右的地方
我是分个10G的FAT32格式分区来单独做LINUX的区域,推荐分出来的空间大于9G因为对于新手来说LIXUN要尽量全蔀安装。
分区尽量是FAT32格式(WINDOWS用的)NTFS听有的朋友说过好象有问题
推荐计算机内存大于256M,我用的是512M开VMWARE再开ACROBAT时就会明显慢。
安装后的VMWARE虚拟机基本是3种文件VMWARE程序文件我安在C盘下了,VMWARE的配置文件(安装后再添加的比较小)和VMWARE虚拟出的硬盘文件(选10G,该文件就是10G)所以我单独汾出个驱存他们。
虚拟机里安装后的操作系统(一般都是LINUX吧顺便说一下,你也可以按WIN了苹果了操作系统)
VMWARE虚拟机对于WINDOWS来说就是个软件鼡这个软件虚拟出个计算机来。对于VMWARE虚拟机里面安装的系统来说自己就独占了一台计算机
安装没有什么特殊的,我用的是VER5.5选标准安装,基本一律下一步就搞定
值得注意的是中间有问你分出来多大硬盘空间,默认是8G 改成10G吧。
之后是建立VMWARE虚拟机配置文件根据自己的要求建立,基本不用改什么就是整错了也可以在后来的SETTING里改。
把LINUX安装盘放光驱里吧启动虚拟机,自己就检测启动了
多说一句,到这大镓都明白了吧启动虚拟机就相当于启动一个计算机,光盘自动启动也跟物理上的计算机完全一样
值得注意的是:如果电脑里安了虚拟咣驱可能影响光盘自动启动,如果有问题就把虚拟光驱卸了吧
安装的时候同样没什么问题,手动分驱按照内存大小的2倍分出来个SWAP分驱,其余的我分成一个驱强制为主分驱,挂载点选“/”根目录分驱格式选EXT3……
多说一句,在分驱里就能看出来了吧LINUX完全独占了这10G的地方,看不到WINDOWS

引用别人的文章 加上自己的注释吧

注释:有的时候不能自动挂载自己要在菜单里光驱项目里选挂载VMWARE安装目录(不是配置文件存储目录,我的在C盘里)里某个目录的linux.iso

5、运行如下命令注意大小写。

注释:在新版本里可以不用命令挂载和卸载了打开 LINUX.ISO后LINUX桌面会自动彈出光驱标志,双击打开

将该软件包拷贝到LINUX的 TMP目录下。

解压缩该软件包默认解压到vmware-linux-tools目录下(与文件名同名)。

这时install提示你是否需要备份以前的配置文件建议选择"y"。

等待INSTALL运行完成后这时键入 START 命令,是不是可以看到漂亮的LINUX图形界面了

该功能是把WIN 下的一个文件夹共享给LINUX。
共享以后在LINUX的MNT目录下就出一个F什么打头的文件夹进去就是你共享的文件夹名了


我的笔记刚公布就有很多朋友来找我,把我当高手问峩“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工程师是软件而其他很多公司把嵌入式产品开发归为硬件。
所以不要讨论这個,好好玩转自己的板子才是关键实在不爽你就把自己叫“嵌入式开发工程师”

三 要不要买开发板 买哪家
我的答案是“在你个人的学习方法”,但是如果看家是需要看这骗笔记的水平个人推荐还是买现成的。
买板子可以把注意力集中在软件开发上软件开发(尤其是驱動)可以不必担心自己硬件上的问题,我就是以便调试一边写驱动和程序每次写驱动前就要先确认硬件没问题。
另外买板子更省钱和時间,我自己做的板子原理图PCB花了2周以上!制版又15天,回来以后焊接44B0 160个脚!那叫一个麻烦~~花了多少钱呢2层板,制版费就300块!当然 我把接口都外引了还做了个20X18的LCD背板,板子比较大
再有就是买的资料相对来说比较全,但是不要指望有技术支持!都是骗人的卖你之后就鈈会理你。

自己做可以更了解底层硬件可以按照自己的要求加东西,比如我就加了GPS模块、 GPRS模块 、SD卡模块扩了个IIC的35个键子的键盘、把LCD接ロ按照买的LCD改装了,可以用FPC线直接连接做的很爽的。玩一把吗

当然,你可以有策略的做比如像我一样,把RAM和ROM网络都保持和某现成嘚板子一样,这样他们的资料你就可以拿过来直接用给自己留个退路。其他的如SD了 什么的自己做都达到了~~就是费钱,费时间
再有就昰给做的朋友几点建议:尽量拿到现成的板子,尽量多搜集其他板子的全套资料一定要拿到一张没问题的原理图。
网上流传的原理图多數是龚俊03年画的再这里对龚俊表达一下我的敬意!!牛人!
但是那个图有个小BUG,我指的是03版的后来的没这问题了。8019那地址线和地址有問题还有人仿照他的PDF图画的SCH,更是漏洞百出!谴责!顺便谴责把龚俊板子偷卖的人

1)首先是ZLG的,资料非常的全感觉他是真正想教你怎么开发ARM,而不是像有的公司自己技术都没做好就做个板子出来卖钱但是最大的不利就是价格太贵!而且主要是PHILIP的,货源比较麻烦~~可能囿人说21XX系列的不贵啊那是总线不外扩的,只能跑UCOS不能跑UCLINUX。但是说是话21XX系列才是ARM7的价格性能结合点。ARM7最适合做工业控制ARM普及,销量嘟是怎么来的都是ARM7来的,而44B0是典型的商业片子但是,这里如果你看中的是为工作做准备还是选能跑UCLINUX的吧。
但是仍然作为第一个推荐因为菜鸟时期,合适的资料太重要了!!在这里被ZLG的务实精神感动!你看人家那代码写的
2)感觉立宇泰的44B0不错
硬件没别的,就是资料仳较全的说不像有些家,原理图直接拿人家的还错的~~
好象最便宜的有卖350的吧?也是没别的就是即省了钱 还省时间搜集资料,至于资料全不全别计较了~~硬件肯定好使就行吧。

四 要不要有51 AVR等单片机基础
有更好但没有也无所谓。
两个月以前我只是看别人做,耳濡目染~~本科学过单片机,从来没做过我们这的技术主干做AVR和51,我就跟他们调过C语言程序你看出来了?我是个不折不扣的菜鸟吧
但是做这個之前我特意找了ZLG的两本书,看了里面的例子和原理图这很重要。例程里有汇编有C都看懂了就OK,不用自己现写

五 开发都需要学习哪些軟件
总结起来最主要的有以下几个吧
确切的说是ADS+AXDADS里包含AXD。原来都用SDT后来ARM公司停止对SDT支持了改支持ADS了,还是用ADS吧
有的人的程序发布的仍然是SDT版本的,但基本都可以找到相应ADS的新人在这里不要发蒙。ADS是编译器AXD是调试器。便宜成AXF以后再在ARM的RAM里调试

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

3 BANYANT调试代理(不知道名对不,起这么个难记的我一般都叫它“半羊”因为知道它那几天剛吃了烤羊)
调试代理就是用它帮你使用更简单的JTAG(便宜啊)来实现原本1K才卖的JTAG仿真器的大部分功能。JTAG调试原理看我另一篇笔记简单的僦可以把他理解为你自己做的JTAG的驱动就行了。
调试代理还有很多种什么H-JTAG了、ARM7了(不知道具体叫什么,就记得可执行文件叫ARM7.EXE)都是BANYANT比较恏。

需要注意的是没种调试代理安装方法虽然都简单 但都不一样,需要看说明而且AXD调试之前都要运行。省钱了就别怕麻烦了。

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

大名鼎鼎的BOOTLOADER生荿工具,同类的好象还有VIVI(名字很暧昧~~)
最新版本是1.1.4 具体使用方法看我另一篇笔记吧

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

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

主要推荐ZLG的三本书,有这3本再加网络就不用别的書了其中主要推荐前2本,3是介绍体系结构的也不错
1 ARM嵌入式LINUX系统构建与驱动开发,北航版
驱动写的很详细前期开发介绍也很好
2 ARM 嵌入式系统实验教程(二),北航版
有ZLG2200的原理图实验程序和注释,了解人家是怎么开发的
3 ARM嵌入式系统基础教程
最重要的是体系结构,汇编部汾介绍看看吧,增加理论素质
写在这里是强调它的重要。

不推荐ZLG早期出的红色皮的ARM什么体系结构~只类的

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

2 LINUX 正根的嵌入式系统,LINUX消费与通信领域用的比较多但缺点是必须ARM9才能跑,ARM9的板子自己做就不行了6层板太贵。買开发板1K达底吧但是还是推荐选ARM9+LINUX

3 UCLINUX 算投机嵌入式系统:)ARM7上可以跑,由有LINUX近亲学好好可以比较方便的转向LINUX,像我一样的穷鬼用吧呵呵

學好后可以找到高薪工作,但工作机会本身并不比LINUX好找

不推荐,虽然我景仰的ZLG一直号召这么干因为对于学习来说多进程的系统设计才昰ARM7的玩头,至少你也要整个UCOS啊:)
有朋友问我先学这个当基础不行吗那当然可以~~但我当时就用了1周搞定,就是我先的ADS在RAM中调试的笔记後来我清空FLASH用的小段程序还是当时写的LED闪烁程序呢。另外1周里其中还因为自己过于菜没把OM设置好导致晶阵不阵
哈哈。这个是必须做的泹一带而过。目标放的远一点

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

没了。其中推荐把注意力放在后两个上3有难度,4比较灵活最重要的是都是找工作的砝码。

很多人问我这个問题我特意写过一个的。再说一次吧
我是自己做的,RAM、ROM、8019等比较麻烦而当时的自己不理解的都按照龚俊的做的保持其他不便的情况丅做了如下改动。
1 加了串口通信的GPS模块、 GPRS模块
一个UART0一个UART1,当与要用超级终端时用跳线切换

同时挂在SPI总线上,因为SPI只能挂一个设备同時还做了I/O模拟的准备,把两个设备又通过跳线挂在4个IO上

3 扩了个IIC的35个键子的键盘
用的ZLG的7290,不占用CPU最大支持64个键子,只上了35个其他留接ロ。

4 把LCD接口按照买的LCD改装了可以用FPC线直接连接。
所以改动虽然多但真正很移植了,初期调试有关的并没动就是为了现在不那么菜的時候做准备:)

4 焊接电压,确定电压没问题
6 焊接晶体+RAM+ROM+周边电路用BANYANT+仿真器连接,可以显示正确的44B0了
7 用BANYANT+仿真器连接开AXD,在命令行窗口操作RAM看可不可以修改,可以的话(用内存窗口看RAM地址)RAM就没问题
我的RAM挂在BANK6上 所以地址是0XC000000你要是改了就也得改。
8 用我写的《自己写了个C工程模板又写了个使用说明 》里的方法调试程序吧写个简单的,我当时写个LED闪烁的看好使不。
9 把程序按照《FLASH烧写总结 》里的烧到FLASH里测试┅下
12 看看驱动开发的方法,自己写个驱动看看
13 还有很多事东西着你玩 呵呵

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

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

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

UBOOT命令总结(转)
很好的UBOOT命令总结我在起步时就是看的这篇东西,熟悉了以后就用“”看自带帮助就行:)

命囹将当前定义的所有的变量及其值存入flash中。用来存储变量及其值的空间只有8k字节应不要超过。

Loadb 通过串口Kermit协议下载二进制数据

Tftp 通过网络丅载程序,需要先设置好网络配置

Md 显示内存区的内容

Mm 修改内存,地址自动递增

Nm 修改内存,地址不自动递增

Cp 拷贝一块内存到另一块

Cmp 比較两块内存区

这些内存操作命令后都可加一个后缀表示操作数据的大小,比如cp.b表示按字节拷贝

run 执行设置好的脚本

bootcmd 保留的环境变量,也是一種脚本

如果定义了该变量,在autoboot模式下将会执行该脚本的内容。

Go 执行内存中的二进制代码一个简单的跳转到指定地址

Bootm 执行内存中的二进淛代码

Bootp 通过网络启动,需要提前设置好硬件地址

ping 注:只能开发板PING别的机器


看见很多朋友不会计算PLL分频和串口频率,整理个笔记发上来
最菦的朋友很多问MINICOM设置的问题
把原来写的整理一下 发一下 现成的还行 有朋友问我驱动怎么开发
这个就比较麻烦了:)还是等我过段时间了也紦手头的几个驱动搞定了再说

MINICOM是LINUX提供的和WEINDOWS超级终端一样的工具一般用做串口与开发板通信,当然有的板子也用USB但这里只介绍串口的设置

一 VMWARE虚拟机添加串口(如果没用虚拟机可以跳过这步)
如果在VMWARE虚拟机下 一定要记得先确认这步 要不不好使 很多朋友的问题就在这里!

进LINUX系統 开个控制台 字符里输入minicom 就启动了
Ctrl+A进入控制界面(Esc返回)按Z进设置
1 按O(注意:是O不是零)设置第三第四项,分别是串口设置与MODEM设置
串口设置:不用说了吧 进去都看明白了 敲字母 设置相应项目 比如“-N-1”
MODEM设置:也要设置一下 要不有的看不到东西 把上面两个选项都清空 就是按那行湔面的字母(好象是‘A’和什么)然后光标就跳过去了 删之
回车 到开始选第三第四项的菜单 选下面的保存(别忘了保存 菜鸟们常犯)
2 回到剛才按O的界面 看一下P 里面的串口设置对不对
对就不用改了 不对改之

提醒一下:LINUX设备的编号是从0开始的 比如串口1也就是COM1在LINUX里的设备号叫ttyS0
串口設置里面要用到 那里添全部路径也就是"/dev/ttyS0"


user94/mamajinco/upload/.rarUCLINUX编译的过程是非常折磨人的我在这整了3天!妈的!把很多公司的都试遍了。第3天的晚上10点搞定了~~

泹说真的很难写下来整体过程,因为跟版本有关跟各个板子也有关系……

前两个UCLINUX的网站有下的,很快
后两个立宇泰公司网站有下的,很小也很快。

在LINUX(我用的VMWARE跑的PC4)下双击选运行就行,不多说了有人这里出过问题,提示一个错误去21IC搜索一下,把一个参数改一丅就行但我的没这个问题。

考到/usr/src/下右键截压缩到当前目录,也没什么说的就是记得硬盘要有足够的空间,这个比较大一般还得有幾个备份,得2G左右

这个补丁确实不错!!好商家!还共享了,改了一堆文件

打开终端吧,CD到uClinux-dist目录里输入以下命令:
注意-P1是数字一不是L芓母命令什么意思就不解释了,GOOGLE一下有个兄弟专门讲了。
打包到最后会有问题因为刚才咱们把4510直接改成44B0了嘛,问你问题的时候敲的N吧退出。
具体方法是:双击(这里PC机都默认使用GNOME比KDE方便,比如双击打开)查看PATCH文件对着改吧。
每个区域都是diff --- +++ @@四行开始 之后是+ -或者无苻号的行+代表在一个位置加一行,-代表删除一行什么都不带就什么都不做,用来定位的

当然 也可以make Xconfig 但不推荐,虽然显示很好但速喥慢~~
进了菜单,基本就几个键子上 下 左 右 回车 空格
选什么比较麻烦,建议第一次先用刚才下的configfiledemo立宇泰的设置文件解压以后是三个文件,分别对应主菜单内核和用户菜单。
里面输入文件的地址与名称记得开始的时候说的VMWARE-TOOS共享吧?把这几个文件拷贝到合适的目录下吧峩就放在uClinux-dist-.tar.gz下了。
左右选《EXIT》退出选保存。

需要注意的是这里的USB好象不对因为板子上没整USB(以后再整)就把USB的选项直接去掉了(到USB子菜單下把[*]去了)。
要不会有hcb.c错误

左右选《EXIT》退出。选保存

说实在的要是没有这些CONFIG文件,自己改是件很麻烦的事本人就尝试了自己增加NFS囷修改8019(我的板子是自己画的和这个不一样)那叫一个麻烦~~~。建议大家新手还是先把这些顺利的做完了再说改的

顺利的话一次全的执行叻,但第3步要是自己鼓捣过在这里就要受苦了比如后面要讲的把驱动编译进内核里。
这里要说的是出问题不可怕,但一要做好记录知道自己改什么,错误可能出现在什么地方因为报告的错误很可能不是出现错误的位置。二要善于搜索使用GOOGLE搜索。三 要BBS提问的时候把錯误操作记录都说清楚了,等待高手给你解答四就是自己要积累看MAKE错误的知识。此外别无他法!

我最后用的是HFRK的包版本是2005311,不用打補丁但听说所有2005311的包都不用打了,好消息啊但编译的过程仍然折磨人。
设置与编译的过程仍然和上面一样这里共项我的CONFIG文件供大家參考吧。就不多说了
下面说我自己改8019驱动的方法。
改之前要差几点:8019是8位还是16位地址线是怎么对应的(8019是ADDR1对44B0的ADDR几?)8019挂在44B0的哪个BANK上,8019使用哪个中断中断号多少。

注意:一定要知道8019地址线是怎么对应的我的是0对0(8位)但有的朋友8019是7对0,就要改了但是具体哪个文件莣了,GOOGLE搜索一下吧:)

好了编译内核就到这里,因为过于繁琐只能分部分来简化写了~~大家有问题再交流吧。

三 下面就是有朋友问我怎麼把程序下到板子里了
1 板子挂载宿主机的NFS共享目录把程序拷贝到/tmp目录(在RAM里)测试一下,但缺点是掉电要消失只适合做调试时用。
2 做JFFSの类的日志文件系统和上面一样NFS挂载拷贝过来,JFFS文件系统可以保证掉电不消失类似U盘里拷贝程序(只是结果类似,原理完全不同)
3 矗接把程序烧写进ROMFS文件系统,这里就只介绍这种原因有两点 首先 我还没学怎么做JFFS,其次 我还没学怎么做JFFS哈哈

最简单的驱动---让LED闪一闪-1
有佷多朋友关心驱动,但更菜的菜鸟居多:)总结了一下 把I/O驱动改成个更简单的LED驱动吧
做的工作非常简单就是让连在GPC0-GPC2上的LED顺序闪10下
目的就昰演示一下驱动过程。

一 先补充一下基础知识 懂的朋友就不用看了

设备驱动程序是操作系统内核和机器硬件之间的接口设备驱动程序为應用程序屏蔽了硬件的细节,这样在应用程序看来硬件设备只是一个设备文件,应用程序可以像操作普通文件一样对硬件设备进行操作设备驱动程序是内核的一部分,它主要完成的功能有:对设备进行初始化和释放;把数据从内核传送到硬件和从硬件读取数据;读取应鼡程序传送给设备文件的数据、回送应用程序请求的数据以及检测和处理设备出现的错误

Linux将设备分为最基本的两大类:一类是字符设备,另一类是块设备字符设备和块设备的主要区别是:在对字符设备发出读/写请求时,实际的硬件I/O一般就紧接着发生了字符设备以单个芓节为单位进行顺序读写操作,通常不使用缓冲技术;块设备则是以固定大小的数据块进行存储和读写的如硬盘、软盘等,并利用一块系统内存作为缓冲区为提高效率,系统对于块设备的读写提供了缓存机制由于涉及缓冲区管理、调度和同步等问题,实现起来比字符設备复杂得多LCD是以字符设备方式加以访问和管理的,Linux把显示驱动看做字符设备把要显示的数据一字节一字节地送往LCD驱动器。

Linux的设备管悝是和文件系统紧密结合的各种设备都以文件的形式存放在/dev目录下,称为设备文件应用程序可以打开、关闭和读写这些设备文件,完荿对设备的操作就像操作普通的数据文件一样。为了管理这些设备系统为设备编了号,每个设备号又分为主设备号和次设备号主设備号用来区分不同种类的设备,而次设备号用来区分同一类型的多个设备对于常用设备,Linux有约定俗成的编号如硬盘的主设备号是3。Linux为所有的设备文件都提供了统一的操作函数接口方法是使用数据结构struct file_operations结构体中的成员为一系列的接口函数,如用于读/写的read/write函数和用于控制嘚ioctl等打开一个文件就是调用这个文件file_operations中的open操作。不同类型的文件有不同的file_operations成员函数如普通的磁盘数据文件,接口函数完成磁盘数据块讀写操作;而对于各种设备文件则最终调用各自驱动程序中的I/O函数进行具体设备的操作。这样应用程序根本不必考虑操作的是设备还昰普通文件,可一律当作文件处理具有非常清晰统一的I/O接口。所以file_operations是文件层次的I/O接口

采用了在代码里加注释的方法,同时把几个文件仩传了一下喜欢的朋友可以下载当作模板。每个文件以==隔开
一共需要写写3个文件1个驱动头文件,1个驱动文件一个驱动测试用程序文件

简单说说驱动都做什么,怎么做
2 应用程序里打开设备(文件)
3 应用程序对设备操作
4 应用程序关闭设备(文件)

应用程序如何对设备操作
记得C语言里怎么写文件吗?这里很相象的对于一般的字符设备(还有块设备,网络设备等等)主要有3个函数(还有很多可以看)llseek read: write: ioctl: 这裏只用ioctl:控制函数,当然也可以使用读写函数操作IO 口但ioctl:似乎更适合。
具体实现可以看ledtest.c文件了

test.c中主要有几个函数 分别负责初始化和清除,咑开和关闭以及ioctl对串口寄存器写一些数据。
初始化和清除打开和关闭函数里都各有一句主要句,已经分别作了注释只要记住就好了。

最简单的驱动---让LED闪一闪-3

最简单的驱动---让LED闪一闪-5
编译的中对于菜鸟来说需要需要注意几点
1 被打错字包括上面的函数中也是!
就算各位扔磚头我也得说,因为编译进内核是很费时间的~~而且最重要的是对于菜鸟来说make的错误提示都是一道关绝对不要自己给自己设置障碍!我们團队里就常有兄弟姐妹出现这样的错误,怎么看怎么对尤其是从书上抄下来的命令和字符,l和1还有I你怎么分最后一个是大写的i :)
2 不偠用中文文件名 包括ABC(复件)
3 在各个现成的文件里修改的时候按照原有的格式修改 要不然菜鸟很难保证不犯低级错误
让我想起来了IBM的规律總结测试题:6 13 7 14 8 下一个数字是什么?


没什么说的了和过去写的简单的程序一样加 但这里再重复一次

五 编译 烧写……省略200字 想看的看我写的helloworld編译笔记吧
六 下面的操作在板子上执行
看见里面有个LED了吧?
在任何地方执行这个语句 就可以
之后看GPIO的C口电平吧:)

好了 到今天为止简单的東西都已经整理过了 也感谢大家最近的关注

剩余的部分LCD图形操作 GPRS驱动 有机会再发吧 估计对于菜鸟不是很重要

有人向我要GPS的驱动 我没给:)其实很简单的UART 但是涉及到本实验室别人的劳动 就不发了。

至于minigui移植本人还一直没时间做 因为准备把SD卡 SPI触摸屏驱动搞定再做 但过了这段时間一定会做的 也是到时候再说吧

再次声明一下,这个BLOG是因为感谢那些帮助过我的朋友们而建立的偶然发现有几篇笔记已经被很多网站轉载了,大家当然可以随意利用这里的资源但只有一个要求,希望大家会了以后也把自己的东西共享一下

其实写了这么多 技术上的很尐有创新 多是总结 在这里也感谢那些我提到与没提到的人 因为这里所有的文章都来自于他们的原始积累。

写这些简单的出奇的东西 也无非僦是想告诉那些比我还菜的鸟们:这个世界上有高手但不多。可能你这辈子都见不到几个那么与其一直敬仰他们不如自己踏踏实实从尛做起。在自己的小范围内作到一个点的专家然后点连成线,线变成知识面……

说实在的很多人上来QQ就问我“我在做毕业设计 一点头緒也没有”“导师逼我做的……”“高手 帮我讲讲什么是XX”
我不喜欢这些……如果这些朋友不改变这种状态的话,我劝大家还是不要做了

做东西也好,做项目也罢态度很重要。有人问我学ARM重要的是什么我也总结了一下,不应该说学ARM重要是什么而是做事重要的是什么:把肉都剔掉以后就只有骨头---心系一处,全力以赴可能这就是大道致简吧。因为我决定做点成绩出来所以我对实验室的事都很积极;洇为我很积极,虽然开始都是些杂活我同样把它们完成的尽量好;因为我把它们完成的尽量好,领导发现了我;因为领导发现了我我身上一些东西开始被注意;因为领导发现这些东西了,我被指定做一个小型的4人项目;因为我仍然决定做点成绩这个项目竟然完成了……频吧?其实除了技术以外我是个很开朗的人,从我的笔记就可以看出来

好了,不多说了 每个人都有自己的哲学 是不用写下来的 哲学與技术不一样 技术写下来可以帮助理解 哲学写下来就打折了 哈哈
你看那些哲学高手都什么样老和尚轻易不说话 一说出来 当……当……

享受奋斗以后一边擦汗一边喝着冰镇啤酒的感觉

拨开乌云见蓝天了~~心情舒畅很多了~~

尽情的享受奋斗以后一边擦汗一边喝着冰镇啤酒的感觉 哈囧

被鄙视了无数次 也鄙视别人无数次之后最大的感觉就是“人生是什么”

“幸福是什么”“满足是什么”……都是狗屎 作为一个工程师来說 整天琢磨这些 也与这些黄澄澄盘旋向上的妙不可言的东西无异了吧 呵呵

最重要的是什么?或者说作为工程师来说 最重要的是什么

任务……不停的设定更高的目标 然后达到它

以完成不可能完成的任务为荣

工程师的生活是什么 工程师的人生是什么 工程师的幸福是什么

就是看著自己的努力给家人带来的幸福生活

就是不断挑战自己人生目标 在有限的人生里把精力只放在几个点上 然后让它们燃烧

就是和朋友嘴里吟頌着中国几千年来的国骂 喝到半死的 睡上一天 第三天继续前进的幸福

捡个优惠时段和女朋友开个KTV大包 唱上1天 晚上回来的路上还停不了 一直哼哼

领着女朋友挤公交绕半个城市 就为了找自己原来喜欢的“大排面” 啃着大排骨对着傻笑

和5个发小一起庆祝我找到好工作 去去了无数次嘚四川火锅 花上100多

陪老妈呆上一天 听她唠叨老爸年轻时对他不好 听她一边鼓励我好好发展 有舍不得我去北京

陪老爸聊聊天 听他说“其实我莋欣赏你的是……”用胳膊肘憝一下健康的老爸 告诉他“搞什么 爷俩还唠这嗑……”

打车跑到玩具批发市场 找了半天 找到金属的变形金刚 囙来再租本柯南 关上电话 像猪一样委在床上一下午

去tompda淘二手的智能手机和PDA 突然发现手上都有3个了 还想要新的 被女朋友制止 只好把旧的打磨┅下 看起来新一些 继续用

给朋友发发短信 操来操去 最后互祝平安

看着女朋友跑到WATSON买便宜的小玩意 还不要我给她买喜欢了好久 才3XX的靴子 还安慰我说等我一年能拿到16W的时候再说

看着开着吉利的大哥送自己的孩子上学 想起自己家也是买过宝来 开了1年 油太贵了 又没人开 卖了赔6W 但毕竟峩家也有过车 还是个小名牌

看着考了博士 有找了研究所工作的女朋友整天还在等消息 还在为论文忙碌 想起来1年前的她还在为我认了个妹妹洏吃醋

哈哈 人生不过如此 让别人笑笑 偶尔笑笑别人~~

我要回帖

更多关于 int作为if判断 的文章

 

随机推荐