嵌入式系统开发试题
本人绝对能体会到学习的艰辛,而且视任何对知识技术有强烈追求的人(不管目前水平高低)为同路人,所以整理短文一篇写出一些学习感受,替所有渴望知识的人企盼高手指点学习之路,分享经验。
爱因斯坦说过,”我是站在巨人的肩膀上“
实践当然是最锻炼人的方式,但是我想在校生很少有这样的机会,别说本科生,硕士生也未必有条件。所以我想学习嵌入式要从个人的知识背景和现实条件出发。订立合适的阶段目标,在允许的条件下多动手多思考。
一般情况下对于硬件设备是比较短缺的。但是可以从软件方面和嵌入式系统开发模式上下功夫,提醒大家一点,嵌入式系统开发设计的内容知识很多,所以大家不要乱,在了解嵌入式系统开发的体系结构后,一步一步的下手,最容易上手的是linux下的C,比如ucos(有开放源代码),虽然可能无法在硬件上仿真,但也不必着急。wince,palmos上手都很容易。无论对于初学者还是自以为是高手的人来说,编程水平(这可不受硬件条件限制)绝对是没有止境的,有了较高的编程水平(嵌入式主要是C,当然OO的几种语言c++,java是发展趋势),等到有机会的时候及时的补充硬件知识,会很快的成为高手。
还有,一定记住,学习嵌入式,”要想办法,不要找理由“。当年在dos下用tc编程时的条件,现在回想起来建筑就是奇迹。
我推荐一条学习之路吧,仅供参考,1、C开发经验
条件:linux(这都有吧)
方法:随便,主要是掌握ansiC编程(不包括gtk,qt等图形可视化开发)
2、网络、操作系统、体系结构
条件:linux,各种书,算法、例程。
方法:通过C编程实现简单的网络等知识的算法和过程。
3、嵌入式系统概念
条件:各个嵌入式网站,讨论组,书籍
方法:少提问(尤其是等着天上掉馅饼,这主要是防止增长惰性,也解决不了实际问题),多思考。
4、嵌入式开发实践
条件:各种嵌入式系统开发工具的demo版(或者D版,如果有的话),包括编译器,仿真器。可以找高手们要,也可以下载。
方法:这里有两个分支,一个是基于mcu/dsp的嵌入式系统开发,一个是象palmos,wince,ucos等rtos下的应用软件开发。对硬件感兴趣,想成为真正高手的由第一个分支入手,以后进入第二个分支;如果十分厌烦硬件,只想停留在软件开发上的,可以只由第二个分支入手,以后就和pc上的开发没有什么本质上的区别了,找份不错的工作应该没问题,可以不用进行下面的步骤了,感兴趣可以参考第6条。
5、硬件开发
条件:各种嵌入式芯片、存储器等电路器件,protel99等电路设计软件,电路板制作。
方法:这时候该有开发条件了,最起码是51系列,这个比较方便。电路的设计内容较多,不过看起来吓人,实际上比软件要简单的多。只要下功夫,实践会告诉你一切。
6、硬件工程/软件工程/项目管理
条件: 各个芯片详细资料和使用经验,软件工程知识,项目管理知识,培训,大型项目参与经验
方法:已经是高手了,但是学无止境,沾沾自喜于已有的知识是致命的。那个下一步。。,你该是管理者了。
抛砖引玉,以上出自我的经验,欢迎各路高手们补一下 再告诉你一些我的收藏夹的网站
国内有关嵌入式开发的论坛
电子产品世界的论坛
http://bbs.edw.com.cn/index.asp
恒颐高科论坛
http:///
中国单片机公共实验室
http:///
北京科银京成技术公司
http:///
微芯力科技
http://
驱动开发网之嵌入式版块,挺综合的一个网站
http:///index.php
电子爱好者家园[2004年09月30日] http://home.ee521.com/main.asp
广州友善之臂电子有限公司
http://www.arm9.net/index.asp
关键词:嵌入式系统,设计原则
嵌入式系统 (embedded system) 的中心目标是具体应用, 技术基础是计算机技术, 具有可裁剪的软硬件特点, 能够满足应用系统在可靠性、功能、成本、功耗和体积的严格要求。当前, 在消费和通信类产品的开发过程中嵌入式技术已经成为主流的发展方向。嵌入式系统几乎融入了所有生活中电器设备的开发中, 如移动计算设备、掌上电脑、手机上网、电视机顶盒、多媒体、数字电视、微波炉、汽车、家庭自动化系统、数码相机、空调、电梯、消费类电子设备和工业自动化仪表与医疗仪器等。嵌入式系统集成了先进的半导体技术、计算机技术、电子技术与不同领域具体应用, 这个特点决定了嵌入式系统的特点, 它是一个资金与技术密集、系统构建高度分散、组成部分不断创新的集成系统。嵌入式系统通常情况下都是PC以外的软硬件系统。简而言之, 嵌入式系统是将硬件与应用软件相结合, 以PC系统中BIOS工作方式为形式, 集成高度自动化的软件代码的极高的响应速度为一身, 在现代系统结构的多任务与实时性高的要求中具有很好的适应性。嵌入式系统的构成包括了嵌入式处理器、核心硬件、嵌入式操作系统及应用软件系统等。
1 嵌入式系统的选型原则
1.1 硬件平台的选择
多种不同类型的嵌入式处理器是嵌入式系统构成的核心部件, 而嵌入式处理器的选择是嵌入式硬件开发平台的核心内容。嵌入式系统中嵌入式处理器内核的确定主要以用户需求、应用领域、开始时间、成本和开发的困难程度所决定。在嵌入式处理器内核种类确定以后, 就需要对系统外围设备的需求情况进行综合考虑, 来确定适合开发目标的处理器。下面列出考虑系统外围设备的一些因素:总线的需求;有没有通用串行接口;是否需要USB总线;有没有以太网接口;系统内部是否需要I2C总线和SPI总线;音频D/A连接的IIS总线;外设接口;系统是否需要A/D或D/A转换器;系统是否需要I/O控制接口。
另外, 还要考虑到是否有片上的Flash存储器、处理器的寻址空间大小、处理器调试的容易程度、调试和仿真工具的易用性和成本等相关的因素。在嵌入式系统的实际实现过程中, 硬件的选择是相当复杂的工序, 需要排除多种因素的干扰和多方面的顾忌, 还需要对其它工程进行综合考虑, 且容易缺乏准确和完整的信息。
1.2 嵌入式操作系统的选择
实时嵌入式系统的种类有很多, 大致可以根据费用情况分为两种, 免费型和商用型。商用型的实时操作系统具有可靠和功能稳定的特点, 还有良好的售后服务与完善的技术支持, 但价格方面要高很多。而免费型的实时操作系统具有价格方面的优势。当前主流的操作系统有μC/OS与Linux。在操作系统的选择上, 都要考虑以下几个方面:操作系统的硬件支持;开发工具的支持程度;能否满足应用需求。
由此可见, 选择一款既能满足应用需求, 性价比又可达到最佳的实时操作系统, 对开发工作的顺利开展意义重大。
2 嵌入式系统的开发工具
嵌入式软件开发工具:Keil是业界最受欢迎的51单片机开发工具之一, 它拥有流畅的用户界面与强大的仿真功能。Real View MDK开发工具源自德国Keil公司, 被全球超过10万的嵌入式开发工程师验证和使用, 是ARM公司目前最新推出的针对各种嵌入式处理器的软件开发工具。MPLAB是一种易学易用的PIC系列单片机产品的集成开发工具软件。该软件由MPLAB编辑程序、MPLAB项目管理程序 (Project manager) 、MPASM汇编程序 (Windows版) 和MPLAB-SIM模拟调试程序等工具软件组成。Visual DSP++是一款针对ADI Blackfin、SHARC和Tiger SHARC等处理器易安装易使用的软件开发和调试集成环境 (IDDE) 。通过单一界面可以从始至终高效地管理项目。该集成开发环境可以使您在编辑、构建、调试操作间快速轻松地切换。Xilinx Platform Studio集成开发环境包含很多嵌入式工具、IP、库、向导和设计生成器, 能帮助快速创建定制的嵌入式平台。Nios II IDE提供了一个统一的开发平台, 用于所有Nios II处理器系统。仅仅通过一台PC机、一片Altera的FPGA以及一根JTAG下载电缆, 软件开发人员就能够往Nios II处理器系统写入程序以及和Nios II处理器系统进行通讯。风河公司的新一代Workbench开发平台继承了其原有的Tornado集成开发平台的一贯优势, 并且功能更加强大, 由于新采用了先进的Eclipse软件框架结构, 从而使整个系统更加开放和易于扩展。IAR EWARM集成开发环境支持多种代码优化方式, 极高的代码效率ARM7/ARM9内核芯片操作简单, 易学易用。
3 单片机与嵌入式系统
广义上单片机系统也属于嵌入式系统。不过目前嵌入式系统更多指安装有嵌入式操作系统 (UCOS, LINUX, WINCE, WINDOWS MOBILE, EMBEDDED XP, PALM等) 的装置。常用于工控机、路由器、PDA、手机等。一般具有便携、低功耗的特点。开发时除须具备底层知识外, 还必须掌握操作系统定制、裁减, 和在操作系统下的应用开发。
嵌入式系统的基础是单片机技术, 经过长期的独立发展道路, 主要的功能是以8位的单片机为基础, 进行底层的系统开发。这样的嵌入式系统包含了相当明显的电子系统设计的风格。而单片机应用的开发人员, 都是面向对象系统领域的电子系统工程师, 由于单片机的特点, 距离计算机专业领域较远, 嵌入式系统的明显特点是智能化硬件, 而非嵌入式结构的综合系统。所以, 大多单片机领域的技术人员对于嵌入式系统的概念不够明确, 将嵌入式系统片面鬼介入计算机领域中, 如以32位处理器为基础的嵌入式系统在多媒体、通信和网络等方面的应用。如此嵌入式系统完全脱离了单片机概念的土壤, 而单片机是独立发展的典型的嵌入式系统, 在学科建设规划的角度上, 单片机应当“认祖归宗”。而单片机具有电子系统底层应用的特点, 可以将嵌入式系统在应用层面上划分, 单片机应用做为嵌入式系统的底层应用, 将其底层应用特点与对象系统紧密结合起来,
数字化的信息网络时代, 嵌入式开发模式具有巨大的发展潜力, 也获得了很大的成功。而技术的发展变化, 也对嵌入式系统提出了更高的要求。在产品需求方面, 不单单需要具有个性的创新工程, 还需要建立起适当的原则体系, 让嵌入式系统开发系统化, 从而提高系统开发的效率。
参考文献
[1]周维虎, 石良臣, 何嘉扬.ARM嵌入式系统设计与开发指南[M].中国电力出版社, 2009.
[2]孙天泽, 袁天菊.嵌入式设计及Linux驱动开发指南——基于ARM9处理器[M].电子工业出版社, 2009.
[3]王洪辉.嵌入式系统Linux内核开发实战指南 (ARM平台) [M].电子工业出版社, 2009.
[4]范延滨.嵌入式系统原理与开发[M].机械工业出版社, 2010.
关键词 嵌入式系统 微内核 内存管理单元
中图分类号:TP273 文献标识码:A
随着中国的数字信息的快速发展,嵌入式系统程序的持续发展也更加开放和更加广泛,它甚至已经深入人们的生活,被利用于设计军人,工程,研究和其他领域,可以说进入了人们的生活和工作的各个方面,并已成为人类活动密不可分的伙伴。最传统的嵌入式系统中实现控制的程序要控制外部,可以是简单的请求,但不是实际的操作系统,这就是传统的嵌入式系统的最大的缺点。后来,由于C语言在操作应用程序的开发,嵌入式系统也开始涉足操作系统,最好的例子就是Windows CE,而且由于其具有相对较低的成本和不错的网络功能,因此在现代信息技术中有着广泛的应用范围。
1 嵌入式系统的关键技术
1.1 嵌入式开发技术
主机和目标机器的作用点在嵌入式开发过程中是不同的:主机进行编译,链接,并解决计算机运行过程中的问题,而目标机器就是运行嵌入式软件的硬件平台。主机必须先将应用程序转换为可以运行在目标机器上的二进制代码。这个过程包括三个步骤:编译、链接、处理。所谓翻译就是指一个交叉编译器实现的编译过程。也就是利用交叉编译器将运行的电脑平台转换至另一个平台在通过编译器时生成的代码。常用工具是交叉编译器和嘴闪光灯UC/C ++(GCC)。在编纂过程中所产生的所有目标文件都会链接到一个对象文件,这个过程被称为连接。而在寻址物理内存地址的过程中,系统会自动将被分配给每个目标的文件相对偏移。该过程生成的文件,就是可以执行对嵌入式平台的二进制文件。
嵌入式开发过程中的第二个重要阶段是在目标机器上调试应用程序,嵌入式调试通常运用交叉调试器,通常设置成一个目标机调试模式,他们是利用电缆或直接以太网或串行端口BDM电缆连接。在进行任务级调试,源级和汇编级的调试时候,都需要将在主机上的应用程序和操作系统的内核下载保存至目标机的RAM或直接转换成目标机器的ROM。目标监控调试器就是主机在目标机器上运行的用来控制应用程序的代理(DebuggerAgent) ,前者被固定在目标机器的内存或者ROM,在目标机器上电后能够自动启动,并等待主机端的调试器发送命令,并与应用程序调试器下载完成后,自动运行调试功能,将目标机基本的调试信息反馈到主机。
1.2 嵌入式系统的软件移植技术
1.2.1 字节顺序
一般可以分为大小端字节顺序,无论是大字节顺序还是小字节顺序,它们代表的主要是冗余的数据在程序的存放顺序。低字节,高地址字节的数据存储在内存中,是小字节顺序。而数据存储在内存中,以低地址高字节顺序就称为大字节顺序。根据PC字节在不同平台的顺序不同,也会有些改变的存储顺序。
1.2.2 字节对齐
在嵌入式系统开发过程中,我们需要字节对齐,这是一个大问题。我们经常使用的字节对齐的方法有很多,例如在GCC编译器和makefile添加ACK结构,这种办法可以有效地解决文章结构的空隙,但由这种方法引起的转换错误,是不能够解决的错误。那么为了有效提高软件的可移植性和互操作性,我们决定在同一个地方,同时安装闭幕包拆包功能,添加一组发送报文的功能的数据包,这样就可以轻松有效地解决字节序列比对问题。
1.2.3 位段
在嵌入式系统硬件平台的开发过程中需要确定和分配空间段,而位段分配大多是由右至左,但有的特殊的却是由左到右,因为不同数据就导致比特分配序列段访问错误。为了解决这个问题,你必须使用条件编译的方式来编译,这取决于不同的平台上的定义位段的顺序。
1.2.4 代码优化
由于嵌入式软件的固有特性,它有一个对软件具有非常高品质的要求,因此在嵌入式系统开发过程中需要非常重要的代码优化,通过优化的代码就能够很好地提高代码工作效率,使代码更小。
2 嵌入式系统的应用探讨
2.1 人机对话
我们的手机已经可以实现人机对话,甚至一些儿童玩具也可以。如一些玩具可以被输入我们的声音,通过他们的控制来调用它。一些智能手机也可以通过简单地喊他们的名字就可以自动拨打对方的电话,这主要是由于语音相关技术通过嵌入式语音芯片在嵌入式操作系统中,实现了人与机器之间的对话,也使科技变得更加人性化。
2.2 多媒体网关
从南京东路移动互联网技术有限公司开发的多媒体网关,通过蓝牙设备之间的信息传输,使家庭的每个设备都可以连接在一起,共同使用于固网,互联网和其他网络之间。这是什么,这就是流行在今天的家庭网络,可以通过网络交换信息,这使我们的家庭交流更方便,其工作原理是在操作系统的控制下,使用本机的硬件设备和各种执行机构,对于归属网络中的个别设备进行控制和检查活动。
2.3 移动数据库
中国人正在开发自己的移动数据库,主要是通过嵌入式系统,使得移动终端可以同步服务器,数据将被带入到上述移动终端,使得它可以在一定的时间内访问相关的资源数据库,也可以移动数据库,例如,病人在救护车上抢救的过程中,医务人员可以在汽车上查询附近的医院。
总之,在快速发展、科技日新月异的今天,嵌入式产品将会有更加广泛的应用。我们相信,只要发现嵌入式产品的发展规律,就可以满足市场的需求,而我们也将能够开发出越来越多越来越好的嵌入式产品。
参考文献
[1] 张勇.项目比较法在嵌入式系统实训教学模式中的应用探讨[J].网络与信息,2012.
[2] 罗丽丽,尹俊文,毛晓光.基于Hi3510和Linux2.6内核嵌入式系统的存储研究与应用[J].计算机研究与发展,2009.
姓名: 学号: 学院: 日期:
实验一 熟悉嵌入式系统开发环境
一、实验目的
熟悉 Linux 开发环境,学会基于S3C2410 的Linux 开发环境的配置和使用。使用Linux的armv4l-unknown-linux-gcc 编译,使用基于NFS 方式的下载调试,了解嵌入式开发的基本过程。
二、实验内容
本次实验使用 Redhat Linux 9.0 操作系统环境,安装ARM-Linux 的开发库及编译器。创建一个新目录,并在其中编写hello.c 和Makefile 文件。学习在Linux 下的编程和编译过程,以及ARM 开发板的使用和开发环境的设置。下载已经编译好的文件到目标开发板上运行。
三、实验设备及工具
硬件::UP-TECH S2410/P270 DVP 嵌入式实验平台、PC 机Pentium 500 以上, 硬盘10G 以上。
软件:PC 机操作系统REDHAT LINUX 9.0+超级终端(或X-shell)+AMR-LINUX 开发环境。
四、实验步骤
1、建立工作目录
[root@localhost root]# mkdir hello [root@localhost root]# cd hello
2、编写程序源代码
我们可以是用下面的命令来编写hello.c的源代码,进入hello目录使用vi命令来编辑代码:
[root@localhost hello]# vi hello.c 按“i”或者“a”进入编辑模式,将上面的代码录入进去,完成后按Esc 键进入命令状态,再用命令“:wq!”保存并退出。这样我们便在当前目录下建立了一个名为hello.c的文件。hello.c源程序: #include
3、编写Makefile
要使上面的hello.c程序能够运行,我们必须要编写一个Makefile文件,Makefile文件定义了一系列的规则,它指明了哪些文件需要编译,哪些文件需要先编译,哪些文件需要重新编译等等更为复杂的命令。使用它带来的好处就是自动编译,你只需要敲一个“make”命令整个工程就可以实现自动编译。Makefile源程序:
CC= armv4l-unknown-linux-gcc EXEC = hello OBJS = hello.o CFLAGS += LDFLAGS+= –static all: $(EXEC)$(EXEC): $(OBJS)$(CC)$(LDFLAGS)-o $@ $(OBJS)clean:-rm-f $(EXEC)*.elf *.gdb *.o 下面我们来简单介绍这个Makefile 文件的几个主要部分: CC 指明编译器
EXEC 表示编译后生成的执行文件名称 OBJS 目标文件列表 CFLAGS 编译参数 LDFLAGS 连接参数 all: 编译主入口
clean: 清除编译结果
注意:“$(CC)$(LDFLAGS)-o $@ $(OBJS)”和“-rm-f $(EXEC)*.elf *.gdb *.o”前空白由一个Tab 制表符生成,不能单纯由空格来代替。
与上面编写 hello.c的过程类似,用vi来创建一个Makefile文件并将代码录入其中。
[root@localhost hello]# vi Makefile
4、编译应用程序
在上面的步骤完成后,我们就可以在hello 目录下运行“make”来编译我们的程序了。如果进行了修改,重新编译则运行: [root@localhost hello]# make clean//编译应用程序 [root@localhost hello]# make//下载调试
注意:编译、修改程序都是在宿主机(本地PC 机)上进行,不能在超级终端下进行。
5、下载调试
在宿主PC计算机上启动NFS服务,并设置好共享的目录,(这里将刚生成的根目录/arm2410cl作为共享目录,以下实验同理)具体配置请参照前面第一章第四节中关于嵌入式Linux 环境开发环境的建立。在建立好NFS共享目录以后,我们就可以进入超级终端中建立开发板与宿主PC机之间的通讯了。
[/mnt/yaffs] mount-t nfs-o nolock 192.168.0.56:/arm2410cl /host //超级终端中执行
如果不想使用我们提供的源码的话,可以再建立一个NFS 共享文件夹。如/root/share,我们把我们自己编译生成的可执行文件复制到该文件夹下,并通过超级终端挂载到开发板上。
[root@localhost hello]# cp hello /root/share //虚拟机中
[/mnt/yaffs] mount-t nfs-o nolock 192.168.0.56:/root/share /host //超级终端中 再进入/host目录运行刚刚编译好的hello程序,查看运行结果。[/mnt/yaffs] cd /host //超级终端中 [/host]./hello hello world(1)在PC计算机上启动NFS 服务,并设置好共享的目录。
启动 Red Hat Linux –>点击“主菜单”->选择“系统设置”->“服务器设置”->“NFS服务器”->“增加”->“基本”下:点击“浏览”选择“/”下的“arm2410cl/”;“确定”;“主机:192.168.0.* ”;“基本权限”选择“读/写”;“确定”。->“常规选项”下:选择:“允许来自高于1024的端口的连接”,其他不选;确定。(2)在建立好NFS共享目录以后,进入minicom 中建立开发板与宿主PC机之间的通讯
新建终端
[root@localhost root]# minicom//服务器 新建终端
[root@localhost root]#ifconfig eth0 192.168.0.10 //设置主机地址 [root@localhost root]#ifconfig //查看地址 在服务器下:
[/mnt/yaffs] mount-t nfs –o nolock 192.168.0.56:/arm2410cl /var 注意:开发板挂接宿主计算机目录只需要挂接一次便可,只要开发板没有重起,就可以一直保持连接。这样可以反复修改、编译、调试,不需要下载到开发板。
6、实验截图
7、测试结果
测试挂载成功,用mplayer xyz.avi命令播放视频 [root@localhost /]#cd /mnt/yaffs/mm [root@localhost /]#mplayer xyz.avi
五、实验心得
本次实验比较简单,旨在让我们熟悉Linux开发环境,学会基于S3C2410的Linux开发环境的配置和使用。实验中我们创建了一个新目录,并在其中编写hello.c和Makefile文件。我们学习在Linux下的编程和编译过程,以及ARM开发板的使用和开发环境的设置,下载已经编译好的文件到目标开发板上运行。学会使用Linux的armv4l-unknown-linux-gcc编译和基于NFS方式的下载调试,了解嵌入式开发的基本过程。实验二 S3C2410处理器A/D模块硬件设计
一、实验目的
1.熟悉硬件电路设计
2.掌握简单的S3c2410处理器的电路设计。3.掌握protel软件的使用。
二、实验内容
使用protel 99se 做s3c2410处理器最小系统电路设计,A/D数据采集模块电路设计。
三、实验设备及工具
硬件:UP-TECH S2410/P270 DVP 嵌入式实验平台、PC 机Pentium 500 以上, 硬盘10G以上。
软件:PC 机操作系统REDHAT LINUX 9.0、超级终端(或X-shell)、ARM-LINUX 开发环境
五、实验原理
1、A/D 转换器
A/D 转换器是模拟信号源和CPU 之间联系的接口,它的任务是将连续变化的模拟信号转换为数字信号,以便计算机和数字系统进行处理、存储、控制和显示。在工业控制和数据采集及许多其他领域中,A/D 转换是不可缺少的。
A/D 转换器有以下类型:逐位比较型、积分型、计数型、并行比较型、电压-频率型,主要应根据使用场合的具体要求,按照转换速度、精度、价格、功能以及接口条件等因素来决定选择何种类型。常用的有以下两种:(1)双积分型的 A/D 转换器;(2)逐次逼近型的 A/D 转换器。
2、A/D 转换的重要指标(1)分辨率(Resolution)
(2)精度(Accuracy)
(3)ARM 自带的十位A/D 转换器(4)A/D 转换器在扩展板的连接(A/D 转换器在扩展板的接法如图2.4.2 所示,前三路通过电位器接到3.3v 电源上。)
图 2.4.2 A/D 转换器在扩展板上的接法
六、实验步骤
1、阅读理解源码
进入/arm2410cl/exp/basic/04_ad 目录,使用vi 编辑器或其他编辑器阅读理解源代码。
2、编译应用程序
运行make产生ad可执行文件
[root@localhost /]# cd /arm2410cl/exp/basic/04_ad/ [root@localhost 04_ad]# make armv4l-unknown-linux-gcc-c-o main.o main.c armv4l-unknown-linux-gcc-o../bin/ad main.o-lpthread armv4l-unknown-linux-gcc-o ad main.o-lpthread [root@localhost 04_ad]# ls ad hardware.h main.o Makefile.bak s3c2410-adc.h bin main.c Makefile readme.txt src
3、下载调试
到超级终端窗口,使用 NFS mount 开发主机的/arm2410cl 到/host 目录。[/mnt/yaffs] mount-t nfs-o nolock 192.168.0.56:/arm2410cl /host [/mnt/yaffs]insmod ad/s3c2410-adc.o [/mnt/yaffs]cd /host/exp/basic/04_ad [/host/exp/basic/04_ad]./ad Press Enter key exit!a0= 0.0032 a1= 3.2968 a2= 3.2968 我们可以通过调节开发板上的三个黄色的电位器,来查看a0、a1、a2 的变化。
4、原理图
5、实验截图
七、实验心得
通过本次试验,我学会了A/D接口原理,了解实现A/D系统对于硬件要求。阅读ARM芯片文档,掌握ARM的A/D相关寄存器的功能,熟悉ARM系统硬件的A/D相关接口,还了解在Linux环境下对S3C2410芯片的8通道10位A/D模块的硬件设计。实验三
Kernel与root的设计和烧写
一、实验目的
1.掌握Linux内核配置与裁剪的方法 2.理解根文件系统配置。
3.掌握嵌入式系统内核和根文件系统的烧写的过程。
二、实验内容
对嵌入式Linux系统进行裁剪、配置和编译,生成自己需要的操作系统映像文件,并将其烧写到flash中。
三、实验设备及工具
硬件:UP-NETARM2410-S嵌入式实验仪、PC机pentumn500以上、硬盘40G以上、内存大于256M。
软件:PC机操作系统REDHAT LINUX 9.0、MINICOM、AMRLINUX开发环境.四、实验步骤
1、设计过程:
2、烧写过程:
(一)、超级终端设置
1、运行Windows 系统下开始→所有程序→附件→通讯→超级终端(HyperTerminal),新建一个通信终端。如果要求输入区号、电话号码等信息请随意输入,出现如图1.5.1 所示对话框时,为所建超级终端取名为arm,可以为其选一个图标。单击“确定”按钮。
2、在接下来的对话框中选择ARM 开发平台实际连接的PC 机串口(如COM1),按确定后出现如图1.5.2 所示的属性对话框,设置通信的格式和协议。这里波特率为115200,数据位8,无奇偶校验,停止位1,无数据流控制。按确定完成设置。
3、完成新建超级终端的设置以后,可以选择超级终端文件菜单中的另存为,把设置好的超级终端保存在桌面上,以备后用。用串口线将PC 机串口和平台UART0 正确连接后,就可以在超级终端上看到程序输出的信息了。
(二)、串口下载烧写
在 Windows xp平台下通过超级终端烧写vivi(bootloader)、内核(Kernel)、根文件系
统(root)的步骤如下:
1、格式化flash 打开超级终端,先按住PC 机键盘的Back Space 键,然后启动2410-S,进入vivi,按照以下命令格式化flash,重新分区。
vivi>bon part 0 128k 192k 1216k 4288k:m 64704k 回车
2、烧写vivi 这时已格式化flash,运行的是SDRAM 中的vivi.vivi>load flash vivi x 回车 此时超级终端提示:
Ready for downloading using xmodem...Waiting...点击超级终端任务栏上“传送”下拉菜单中的“发送文件”,选择协议为Xmodem,选择
镜像文件vivi,点击“发送”,10 秒左右vivi 就烧写到flash 里了.这时要复位2410-S,重新进入vivi>来烧写kernel,root.3、烧写内核映象zImage vivi>load flash kernel x 回车 出现提示:
Ready for downloading using xmodem...Waiting...点击超级终端任务栏上“传送”下拉菜单中的“发送文件”,选择镜像文件zImage,协议
为Xmodem,点击“发送”,4 分钟左右zImage 传输完毕,zImage先传输到SDRAM中,再把数据从SDRAM 复制到flash 里,请等待这一过程结束到出现vivi>,再烧写root,否则会导致烧写kernel 失败。
4、烧写根文件系统(root)vivi>load flash root x 回车
Ready for downloading using xmodem...Waiting...点击超级终端任务栏上“传送”下拉菜单中的“发送文件”,选择镜像文件root.cramfs,协议为Xmodem,点击“发送”,8 分钟左右root.cramfs 烧写完毕;
5、烧写应用程序
用2410-S 实验箱配套网线连接好2410-S 的NIC-1 网口和PC 机的网口,重启2410-S 进
入linux 操作系统的[/mnt/yaffs]下,注意配置IP 在同一网段,执行以下指令: [/mnt/yaffs]ifconfig --查看IP [/mnt/yaffs]ifconfig eth0 192.168.0.111 --配置eth0 IP [/mnt/yaffs]inetd --启动ftp
打开ftp 软件FlashFXP(在光盘中/img/flashvivi 目录中提供),点击界面中上部黄色闪
电符号,建立快速连接,输入地址192.168.0.111,用户名:root,密码:无。连接进入ftp 服务,上传“yaffs.tar.bz2”到2410-S 的/var 文件夹下,3 分钟左右上传完毕。
这时不能重启2410-S,否则上传过程白费。接下来在超级终端中输入: [/mnt/yaffs]cd..--转换到/mnt 下 [/mnt]rm-rf /yaffs/* --删除/yaffs 下文件 [/mnt]cd /var --转到var 目录下
[/var]tar xjvf yaffs.tar.bz2 –C /mnt/yaffs --解压yaffs.tar.bz2 到mnt/yaffs 目录下
如图1.5.9 所示,注意大小写(C 为大写),需5 分钟左右
解压缩结束,整个烧写实验就完成了。
五、实验心得
了解了Linux内核与root的知识,能够利用串口通讯下载方式完成它们的烧写过程。实验四 嵌入式软件设计与交叉编译
一、实验目的
1.掌握嵌入式Linux软件设计方法原理 2.掌握Makefile文件设计方法。
3.熟悉Linux下静态库和共享库的设计。
二、实验内容
(1)编写一个带输入、输出的由5个文件组成的嵌入式软件;(2)写好makefile文件,并上机调试;(3)用变量指明两种编译器。
三、实验设备及工具
硬件:UP-NETARM2410-S嵌入式实验仪、PC机pentumn500以上、硬盘40G以上、内存大于256M。
软件:PC机操作系统REDHAT LINUX 9.0、MINICOM、AMRLINUX开发环境.四、程序分析
input.h: #define N 10 void input(char *s);
input.c:
#include CC=armv4l-unknown-linux-gcc EXEC=zc OBJS=main.o input.o output.o $(EXEC):$(OBJS)$(CC)-o $(EXEC)$(OBJS)install: $(EXP_INSTALL)$(EXEC)$(INSTALL_DIR)clean:-rm-f $(EXEC)&.o 五、实验结果 pc机上执行时 # make //若已执行过,则用# make clean 清除后再执行# make #./zc 结果: [/mnt/yaffs]cd /host/exp/basic/zc/ [/host/exp/basic/zc]./zc input your name,please:zc hello zc!hello zc!hello zc!hello zc!hello zc! 六、实验心得 初步了解了交叉编译原理,GUN开发套件包括一系列开发测试工具,主要组件为Gcc。实验详细说明了基于ARM和Linux的嵌入式系统的交叉编译环境的建立方法,并给出了具体的步骤。实验结果表明,可以在x86平台编译调试ARM平台上运行的程序。并通过实验认识嵌入式系统上C语言编程与普通PC机上C语言编程的不同点,掌握使用交叉编译环境编译嵌入式系统程序的方法。实验五 嵌入式驱动程序设计 一、实验目的 1.学习在LINUX下进行驱动设计的原理。 2.掌握使用模块方式进行驱动开发调试的过程。 二、实验内容 在PC 机上编写简单的虚拟硬件驱动程序并进调试,实验驱动的各个接口函数的实现,分析并理解驱动与应用程序的交互过程。 三、实验设备及工具 硬件:UP-NETARM2410-S嵌入式实验仪、PC机pentumn500以上、硬盘40G以上、内存大于256M。 软件:PC机操作系统REDHAT LINUX 9.0、MINICOM、AMRLINUX开发环境 四、实验步骤 1、在PC(宿主机)上编译调试驱动程序。(1)阅读和理解源代码 进入/arm2410cl/exp/drivers/01_demo,使用vi 编辑器或其他编辑器阅读理解源代码。 (2)编译驱动模块及测试程序 上面介绍了在Makefile 中有两种编译方法,可以在本机上使用gcc 也可以使用交叉编 • 确定 • # KERNELDIR = /arm2410cl/kernel/linux-2.4.18-2410cl • KERNELDIR = /usr/src/linux(3)测试驱动程序 如果使用gcc 编译的话,需要通过下面的命令来建立设备节点,如果使用交叉编译器的话,不需要建立设备节点。#mknod /dev/demo c 254 0 首先要插入驱动模块demo.o,然后可以用lsmod 命令来查看模块是否已经被插入,在不使用该模块的时候还可以用rmmod 命令来将模块卸载。• insmod demo.o • lsmod demo.o •./test_demo 2、使用arm编译器在实验箱调试驱动程序。 五、实验结果分析 1.编译demo.c 为demo.o;编译test_demo.c 为test_demo。 gcc-c demo.c gcc-o test_demo test_demo.c 2.若编译器选择的是gcc(请查看Makefile文件),需要用以下命令建立节点: #mknod /dev/demo c 254 0 若编译器选择的是armv4l-unknown-linux-gcc 则不需要mknod命令建立节 点。 3.使用insmod demo.o插入模块,使用lsmod 列出所有插入的模块。查看demo的插入情况: #insmod demo.o 6.运行test程序测试驱动的各个接口运行情况。 #./test_demo 结果: PC机上的运行结果: 实验箱上的运行结果: 7.运行ad程序测试驱动的各个接口运行情况 六、实验心得 掌握了在Linux下常用编译器的使用,进一步掌握了Makefile的编写和使用以及Linux下的程序编译与交叉编译的过程。实验六 触摸屏驱动程序设计 一、实验目的 1、了解在 UP-TECH S2410/P270 DVP平台上实现触摸屏Linux 驱动程序的基本原理。 2、了解 Linux 驱动开发的基本过程。 二、实验内容 以一个简单字符设备驱动程序为原型,剖析其基本结构。进行部分改写之后并编译实现其相应功能。 三、预备知识 1、掌握在 Linux 集成开发环境中编写和调试程序的基本过程。 2、了解 ARM 芯片(本实验是针对ARMS3C2410 系列)的基本结构。 3、了解 Linux 内核中关于设备控制的基本原理。 四、实验设备及工具 硬件:UP-NETARM2410-S嵌入式实验仪,PC机pentumn500以上, 硬盘40G以上,内存大于128M。软件::PC 机操作系统REDHAT LINUX 9.0 +超级终端(或X-shell)+ AMRLINUX 开发环境 五、实验原理 1、Linux 设备驱动概述 Linux 设备驱动程序属于Linux 内核的一部分,并在Linux 内核中扮演着十分重要的角色。它们像一个个“黑盒子”使某个特定的硬件响应一个定义良好的内部编程接口,同时完全隐蔽了设备的工作细节。用户通过一组标准化的调用来完成相关操作,这些标准化的调用是和具体设备驱动无关的,而驱动程序的任务就是把这些调用映射到具体设备对于实际硬件的特定操作上。 我们可以把设备驱动作为内核的一部分,直接编译到内核中,即静态编译,也可以单独作为一个模块(module)编译,在需要它的时候再动态的把它插入到内核中。在不需要时也可把它从内核中删除,即动态连接。显然动态连接比静态连接有更多的好处,但在嵌入式开发领域往往要求进行静态连接,尤其是像S3C44B0 这种不带MMU 的芯片。但在S3C2410等带MMU 的ARM 芯片中我们依然可以使用动态连接。目前Linux 支持的设备驱动可分为三种:字符设备(character device),块设备(blockdevice),网络接口设备(network interface)。当然它们之间的也并不是要严格的加以区分。 2、Linux 关于字符设备的管理 驱动程序在 Linux 内核中往往是以模块形式出现的。与应用程序的执行过程不同,模块通常只是预先向内核注册自己,当内核需要时响应请求。模块中包含两个重要的函数:init_module 和cleanup_module。前者是模块的入口,它为模块调用做好准备工作,而后者则是在模块即将卸载时被调用,做一些清扫工作。 驱动程序模块通过函数: int register_chrdev(unsigned int major, const char *name, struct file_operations *fops);来完成向内核注册的。其中unsigned int major 为主设备号,const char *name 为设备名,至于结构指针struct file_operations *fops 它在驱动程序中十分重要。 在我们编写好一个驱动程序模块后,按传统的主次设备号的方法来进行设备管理,则我们应手工为该模块建立一个设备节点。命令: mknod /dev/ts c 254 0 其中/dev/ts 表示我们的设备名是ts,“C”说明它是字符设备,“254”是主设备号,“0”是次设备号。一旦通过mknod 创建了设备文件,它就一直保留下来,除非我们手工删除它。 3、触摸屏的控制 本系统触摸屏的控制是使用的 S3c2410 处理器自带的触摸屏控制器,这部分的开发主要参考S3c2410 处理器的芯片手册的第416 页到第419 页,具体详见流程图。这部分的控制主要是设置触摸屏的采样模式,处理器提供的模式: 1.正常的转换模式 2.手动的x/y 位置转换模式 3.自动的x/y 位置转换模式 我们这里使用的是第3 种转换模式。需要注意的是在完成一次x/y 坐标采样的过程中需要一次模式转换即在点击触摸屏之前是等待中断模式,当有触摸动作产生触摸屏中断以后,在x/y 的坐标采集驱动中设置成自动的x/y 位置转换模式,在完成采集以后再转换回等待中断。ADC控制寄存器 ADC触摸屏控制寄存器 注意:在自动模式,ADC触摸屏控制寄存器要在开始读之前重新配置ADC开始延迟寄存器 ADC转换数据寄存器(ADCDAT1) 4.触摸屏相关电路图 六、实验步骤 1、改写该驱动程序,在其基础上实现一些你想要的简单功能。由于驱动程序的复杂性,不容易上手且又容易出问题,所以建议你先只对其中的调试信息做一些改动,在运行该驱动程序时看看其在屏幕上的打印信息。在你对整个过程及相关硬件有较多的一些了解之后再动手做一些功能上的调整。 2、结合 ARM-Linux 的移植实验中的相关内容,把改动的驱动程序编译进内核,并下载内核验证结果。你只要把该驱动在必要地方修改后(注意修改前的代码一定要做备份)保存代码,回到内核目录,make bzImage 编译内核,然后下载编译好的内核。 进入expbasic4_ad目录,使用vi编辑main.c: #include #include //采样0~2 路A/D 值 d=((float)GetADresult(i)*3.3)/1024.0;printf(“a%d=%8.4ft”,i,d);} usleep(1);printf(“r”);} /* Wait until producer and consumer finish.*/ pthread_join(th_com, &retval);printf(“n”);return 0;} 七、实验结果与分析 在PC机终端 [ root @ localhost / ]# cd /arm2410cl/exp/basic/04_ad/ [ root @ localhost 04_ad]# make armv4l-unknown-linux-gcc-c-o main.o main.c armv4l-unknown-linux-gcc-o../bin/ad main.o-lpthread armv4l-unknown-linux-gcc-o ad main.o-lpthread [root@ localhost 04_ad]# ls ad hardware.h main.o Makefile.bak s3c2410-adc.h bin main.c Makefile readme.txt src 把makefile文件中cc=gcc改为cc=arm4vl-unknown-linux-gcc用于机箱上,[ root @ localhost 04_ad]# make clean [ root @ localhost 04_ad]# make 新建终端 [root@ localhost root]# minicom [/mnt/yaffs] mount-t nfs 192.168.0.10:/arm2410cl /host [/mnt/yaffs] cd /host/exp/basic/04_ad/ [/host/exp/basic/04_ad]./ad Press Enter key exit!a0= 0.6316 a1= 2.3880 a2= 1.9594 七、实验心得 1. GDB中,用来显示源代码的命令是( B ) A.kill B.list C.make D.break 2. 1KB等于( B ) A.1024MB B.1024B C.1024GB D.8bit 3. 以下不是嵌入式系统应用领域的是( A ) A.通用软件 B.工业控制 C.消费类电子产品 D.机器人 4. 十进制数100,用十六进制表达为( C ) A.62 B.63 C.64 D.65 5. ARM采用定长指令格式,所有指令都是32位,Bit[24:21]为( C ) A.目标寄存器编码 B.条件执行 C.指令操作符编码 D.永远是0 6. 80386处理器是( C ) A.8位处理器 B.16位处理器 C.32位处理器 D.64位处理器 7. ARM采用定长指令格式,所有指令都是32位,Bit[24:21]为( B ) A.目标寄存器编码 B.操作符编码 C.第一个操作数寄存器 D.永远是0 8. 80486处理器是( B ) A.64位处理器 B.32位处理器 C.16位处理器 D.8位处理器 9.1024KB等于( C ) A.1TB B.1B C.1MB D.1GB 10. 在做低功耗优化时,以下说法错误的是( A ) A.采用什么算法与降低功耗无关 B.在采集系统中应尽量降低采集速率 C.在通讯模块中应尽量提高传输的波特率 关键词:人机界面,ARM,Linux,Qt/Embedded,交叉编译 0 引言 数控系统中一个重要组成部分就是优秀的人机界面模块。数控系统中, 应用程序是特定的, 要求编译工具必须定制;硬件资源有其有限性、专用性的特点, 要合理分配和管理;人机交互的方式上, 需要设计有针对性的交互软件。 本文就高性能处理器S3C6410, 利用开源嵌入式Linux操作系统, 对数控系统中人机交互系统进行了一定研究及开发, 主要完成了嵌入式UI开发环境的搭建、输入输出设备的驱动移植、人机交互界面的设计, 其中UI开发环境的搭建又包括两方面内容:PC开发环境搭建, 即PC主机上交叉编译环境及Qt开发环境的建立;嵌入式系统运行环境搭建, 即开发板上内核移植、文件系统、Qt应用库文件及环境变量配置等内容。 本设计主要在操作系统层、用户程序层进行论述, 对嵌入式操作系统移植、文件系统制作、驱动程序加载等方面做了一定的分析与实践。同时基于硬件及操作系统环境将Qt库移植到开发板上, 然后在Qt库的基础上设计与实现交互程序, 如图1所示。 其中作为软件载体的UT-S3C6410目标板为基于ARM内核技术的运算和信息处理平台。嵌入式Linux操作系统则以其精简、稳定、开源等诸多优点, 在顺利运行Qt程序的同时使得开发过程简便许多。最终搭建的系统最突出的特点在于其可移植性强、开放性强。 1 PC开发环境搭建 设计的主要开发任务是在PC主机上完成的, 而嵌入式平台仅是目标测试平台。PC主机上的开发环境主要包括交叉编译工具和Qt开发环境。为了对嵌入式系统进行交叉编译, 并考虑到兼容性等问题, 在PC主机上安装Linux操作系统 (此为Ubuntu10.10) , 主要的搭建工作都在Linux环境下完成。 交叉编译即一种计算机环境中运行的编译程序编译出在另外一种环境下运行的代码的编译过程。要实现针对特定两种计算机的交叉编译, 特制的交叉编译工具必不可少。建立针对ARM的交叉编译链, 与其他的体系结构相类似, 过程大致有以下几个步骤[1]: (1) 下载源文件 (包括binutils、gcc、glibc、linux kernel) 、补丁和建立编译的目录 (2) 建立内核头文件 (3) 建立二进制工具 (binutils) (4) 建立初始编译器 (bootstrap gcc) (5) 建立c库 (glibc) (6) 建立全套编译器 (full gcc) 通过交叉编译工具制作得到合适的编译工具之后, 还需要在PC主机Linux系统下安装该编译工具并修改环境变量使之生效, 可以使用export指令查看添加是否成功。 完成交叉编译工具的安装之后, 就可以开始安装需要使用到的开发工具了, 本设计主要的开发工具为开源的Qt界面开发套件。Qt工具的安装包括了Qt Creator、Qt Designer和Qt/Embedded的安装, 其中Qt/Embedded的编译比较复杂, 但它提供了将应用程序使用于目标嵌入式平台的编译工具和必要支持库, 所以必须在主机上安装。 首先进入主机工作目录, 在Linux终端下修改使用的交叉编译工具, 然后对Qt/Embedded的源代码进行交叉编译: 2 嵌入式运行环境搭建 如图2所示, 一个完整的嵌入式Linux系统组成包括:bootloader、boot parameters、kernel、root filesystem。嵌入式运行环境的搭建包括内核配置、根文件系统制作、库文件移植等内容。嵌入式系统上电启动直至进入内核文件系统的过程中, 我们从启动装载程序 (bootloader) 开始逐一搭建。 嵌入式系统运行平台千差万别, 必须要使用适合于自身平台的内核及工具软件。本设计中建立开发环境使用到的部分工具如下[2]: (1) 交叉编译器:cross-4.2.2-eabi (2) 内核版本:linux2.6.28 (3) Bootloader版本:u-boot-1.1.6 (4) 根文件系统:yaffs2 Bootloader代码是芯片复位后进入操作系统之前执行的一段代码, 主要用于完成由硬件启动到操作系统启动的过渡, 从而为操作系统提供基本的运行环境, 如初始化CPU、堆栈、存储器系统等, 其功能类似于PC机的BIOS程序, 本设计中选用比较流行的u-boot版本。而Linux从技术上来说是一个内核 (kernel) , 提供硬件抽象层、磁盘及文件系统控制、多任务等功能, 向外部提供了对计算机设备的核心管理调用。Linux是开源的, 其内核源码可以在www.kernel.org网站上下载到。 制作适用于目标平台的bootloader和kernel同样需要使用到之前安装的交叉编译工具。内核制作时, 可根据自身平台的资源和应用要求修改内核配置参数 (本设计主要须添加LCD) 。最后将编译得到的二进制映像文件烧写到目标平台中。 之后还须制作必要的根文件系统。文件系统是包括在一个磁盘 (包括光盘、软盘、闪盘及其它存储设备) 或分区的目录结构[3]。Linux引入了虚拟文件系统VFS (Virtual File System) , 为各类文件系统提供一个统一的操作界面和应用编程接口, 它将低层数据结构映射到高层数据结构, 决定目录项中存储文件的哪些信息等。Linux启动时, 第一个必须挂载的是根文件系统, 之后可以自动或手动挂载其他的文件系统。 通过借助Busybox工具可以完成文件系统的制作, 大致步骤如下: (1) 配置Busybox, 配置制作的文件系统 (2) 编译Busy Box, 生成bin、sbin、linuxrc文件夹 (3) 创建文件系统其它目录 (boot、dev、etc、home、lib、mnt、proc、root、sys、tmp、var、usr) (4) 建立、复制文件系统所需的文件 (包括console和null节点文件、fstab和inittab文件、rc S文件) (5) 复制lib库文件, 完成文件系统制作 制作完成文件系统之后还须将文件系统烧写到目标平台的存储设备内, 并设置启动参数使之开机后能自动加载该文件系统。 最后需要将程序在目标平台运行必要的支持库文件下载到目标平台中。本设计中将编译好的tslib库和Qt Embedded-arm下/lib、/plugin文件夹下载到目标平台文件系统相同路径下, 同时修改目标平台的环境变量, 包括库链接路径、触摸屏设备、字体文件等。 3 Qt交互界面设计 Qt/Embedded是著名的Qt库开发商Troll Tech发布的面向嵌入式系统的Qt版本。同样基于客户/服务器体系结构, Qt/Embedded延续了Qt在X上的强大功能, 在底层摒弃了X lib, 针对高端嵌入式图形领域的应用而设计, 仅采用Framebuffer作为底层图形接口, 支持键盘、GPM鼠标、触摸屏以及用户自定义的设备等。Frame Buffer是出现在Linux 2.2.xx内核当中的一种驱动程序接口, 而Qt/Embedded就是采用Framebuffer作为底层图形接口的。 Qt包含了许多支持嵌入式系统开发的工具, 其中有两个完全集成在一起实用工具:qmake和Qt designer (图形设计器) [4]。qmake是一个为编译Qt/Embedded库和应用而提供的Makefile生成器。它能够根据一个工程文件 (.pro) 产生不同平台下的Makefile文件。qmake支持跨平台开发和影子生成, 易于在不同的配置之间切换。Qt图形设计器可以使开发者可视化地设计对话框而不需编写代码, 图3所示为Qt开发流程图。 如图4所示, 信号和插槽机制是Qt的核心机制[5]。信号和插槽是Qt自行定义的一种通信机制, 它独立于标准的C/C++语言, 因此要正确地处理信号和插槽, 必须借助一个称为moc (Meta Object Compiler) 的Qt工具, 该工具是一个C++预处理程序, 它为高层次的事件处理自动生成所需要的附加代码。所谓GUI就是要对用户的动作做出响应, 程序中必须把事件和相关代码联系起来, 这样才能对事件做出响应。信号与插槽机制则是一种强有力的对象间通信机制, 完全可以取代原始的回调和消息映射机制。在Qt中信号和插槽取代了函数地址指针, 使得通信程序更为简洁明了, 而且不会像回调函数那样产生core dumps。 一般情况下, 数控系统人机界面需要实现对特定类型文件的读取, 将其以图形形式显示, 并且能够提供基本图形来组建比较复杂的图形来满足用户的加工需求。同时, 通过交互界面, 数控切割机的运行参数情况可以由用户来设置保存以及实时显示。针对这些基本需求, 如图5所示, 本设计中在主界面下创建4个子界面入口, 分别为: 文件导入:该子界面下可以选择打开指定格式的文档, 将文档中指定的图形在绘图区域绘制出来, 并提供了运行管理界面的入口; 图形选择:此界面提供直线、弧线、矩形等六种基本图形作为构图元素, 可以设置这些基本图形的参数来绘制所需要的图形, 也提供了运行界面的入口; 参数设置:数控系统中所需设置的参数众多, 此界面中罗列了三块十余个可设置参数, 并可以将设置好的参数保存, 下次启动时将自动载入保存过的参数设置; 运行管理:此界面主要设计用来启停数控切割机的运行, 目前为对模拟运行的操作, 其中将部分参数显示出来, 并将所要切割的图形显示出来, 返回显示走线过程中当前坐标的位置, 如图6所示。 4 结束语 本文在ARM11高性能处理器的基础上, 使用嵌入式Linux操作系统平台, 详细地阐述了嵌入式开发平台的构建过程, 包括交叉编译环境、PC主机平台、嵌入式应用平台和嵌入式应用程序支持库等。最后依靠Qt/Embedded工具, 初步完成了一款针对数控系统的人机界面的实现。 参考文献 【关键词】Cortex-M3;?C/OS-II;嵌入式系统开发与应用;本科教学 1.引言 ARM是目前嵌入式领域应用最广泛的RISC微处理器,它以低成本、低功耗、高性能等优点占据了嵌入式系统应用领域的领先地位。当前ARM系列的处理器有ARM7、ARM9、ARM9E、ARM10、ARM11等多个产品。Cortex-M3内核是ARM公司于2006年推出的一款高性能处理器内核,是ARM新型V7指令集结构系列的微控制器版本,可用于企业应用、汽车系统、家庭网络和无线技术等领域。其主要特点是: (1)功耗低; (2)内核的门数少,具有优异的性价比; (3)中断延时短; (4)调试成本低; (5)具有嵌套向量中断控制器(NVIC),与处理器内核紧密结合实现低延迟的中断处理; (6)具有可裁减的存储器保护单元(MPU),用于对存储器进行保护。 Cortex-M3内核的处理器本身的资源不是特别复杂,特别适合高等院校本科生对ARM的体系结构学习,可移植小型开源操作系统UCOS-II,能加深学生对嵌入式操作系统认识。 2.Cortex-M3+?C/OS-II嵌入式系统开发与应用教学内容 《Cortex-M3+?C/OS-II嵌入式系统开发与应用》课程是电子信息类的一门专业课。该课程的主要任务是:通过本课程的学习,使学生对嵌入式系统原理与技术有系统的、全面的了解;掌握嵌入式处理器的概念、组成和体系结构特点;通过对?C/OS-II详细剖析,掌握RTOS实时操作的原理,对其内核结构、任务调度等有深入的了解,培养嵌入式系统的设计和开发应用能力。 通过学习本课程后,应达到下列基本要求: (1)具有一定的计算机体系结构、操作系统、接口与通信等专业基础理论知识; (2)熟悉基于Cortex-M3架构的微处理器体系结构及应用特点,用?C/OS-II进行应用开发的技术点; (3)了解LCD、UART、IIS、I2C等常用外设的设计和开发,为实际应用开发打下基础。 3.Cortex-M3+?C/OS-II嵌入式系统开发与应用教学的难点 学习嵌入式的重点和难点关键在操作系统,如果没有掌握操作系统,笔者认为很难把握一个嵌入式系统。即使在做嵌入式开发中,作应有层的开发几乎可以不知道操作系统也可以开发,那是浮在表面的,很难深入和提高自己的层次。选择μc/os-II这样的小型操作系统,对本科教学最为合适。本课程教学的难点在于: (1)Cortex-M3指令集 ARM7、ARM9内核都支持有ARM指令集和Thumb指令集,目前的Cortex-M3内核是Thumb-2指令集。了解Thumb-2指令集,可以更深层次的理解Cortex-M3的启动过程。 (2)μc/os-II操作系统 实时操作系统μC/OS-II是一个基于优先级的抢占式实时内核,程序可读性强,移植性好,代码固定,可裁剪,非常灵活。至今,从8位到64位,μC/OS-II已在超过40种不同架构的微处理器上运行。μC/OS-II的主要特点有:是优先级可剥夺的实时多任务操作系统;可处理和调度56个用户任务,任务的优先级可以动态调整;提供任务间通信、同步使用的信号量、邮箱和消息队列;具有良好的可裁剪性,可尽量减小系统的ROM和RAM大小。 (3)寄存器配置 Cortex-M3系列微处理器,可以有众多的片内外设。不同的需求有不同的配置,它的寄存器配置是学习中的重点与难点。 4.Cortex-M3+?C/OS-II嵌入式系统开发与应用教学与实验方法 首先改善教学方法。考虑到目前的本科课程门类已大为增加,任何一门非公共课的学时都不会很多。显然,突出要点才能更有效。建议这门课可安排32学时理论课,另加16学时实验课。这就要求主要以引导性教学为主。例如对嵌入式系统的教学就不能像C或汇编语言那样逐条语句讲授,而是应结合具体实例讲解寄存器配置与片内外设接口。 其次是注重教学实践性。本课程具有很强的实践性。针对性强的实验应该是教学的重要环节,嵌入式系统实验更应注重实验质量,而决非仅使用ARM开发软件。先熟悉开发环境,但这并非嵌入式系统实验的关键。因为ST公司对Cortex-M3的大力开发,有很多库文件,给开发者带来很大的便利。如全国大学生电子设计竞赛时间短,编程量大,程序结构让参赛者陷入困境,选择Cortex-M3的系统可以加快开发速度。因此,嵌入式系统课程的实验,除了必须完成的基础性项目外,引导学生完成一些传统单片机不能实现的内容,从而突出Cortex-M3系统设计的优势。例如TFT LCD显示+触摸屏,重点在人机界面;UART、PS/2或USB接口,关注通信协议与寄存器配置;μC/OS-II应用突出了实时操作系统的多任务操作实现等。在这些实践过程中,会使学生发现,诸如ISP下载方式、ARM指令与寄存器等本身都成了配角,而唯有更高质地完成实验项目而不懈追求的设计能动性和创造性成了主角,从而有效提高这门以培养工程实践能力为主的教学效果。 再次就是注重实用。教学内容上,在讲清内容的同时,对每部分内容均需安排有针对性的教学实验。对设置的大部分的实验除给出详细的实验目的、实验原理、实验思考题和实验报告要求外,还应包含3种实验项目,即:基础实验项目是与该部分内容相关的接口实验,对于该部分实验,学生只须将提供的程序输入到计算机,并按要求进行编译通过,并在实验系统上实现即可;功能实验项目是在上一实验基础上进一步发挥性实验;系统实验项目属于自主设计或创新性质的实验。这样,学生就可以循序渐进进行多层次的实验项目。 最后,注重系统调试。一般认为嵌入式系统技术难点和学习费时的根源在于存储器配置。对此,根据电子类专业的特点,教师需放弃流行的ARM的教学模式,放弃常规的教学思路,以ARM体系结构为基点,从实例介绍中引出寄存器配置内容,通过少数几个简单、直观、典型的实例将寄存器配置中最核心、最基本的内容解释清楚,使学生在很短的时间内就能有效地把握片上外设的配置,而不必花费大量的时间去“系统地”学习ARM指令与接口内容。要求教师从时间中抓效益,从效益中提高学生学习与研究能力的培养。 总之,高校教师需力争在不增加课时的情况下,保持嵌入式系统教学内容的系统性和完整性,使学生通过大量寄存器配置,掌握嵌入式系统开发方法。通过接口实验,初步掌握ARM技术最基本的内容。同时通过向几个典型实用示例的设计练习,使学生在只有微处理器基础知识的条件下即能迅速学会使用Cortex-M3库文件编程的设计方法和学会利用μc/os-II完成较复杂系统的多任务设计实验真正达到培养创新型人才培养的目的。 参考文献 [1]陈瑶等.Cortex-M3 +μC/OS-II嵌入式系统开发入门与应用[M].人民邮电出版社,2010. [2]李宁.基于MDK的STM32处理器开发与应用[M].北京航空航天大学出版社,2008. [3]李宁.ARM开发工具RealView MDK使用入门编著[M].北京航空航天大学出版社,2008. [4]ARM Limited.Cortex-M3 Technical Reference Manual.2005. 本文获2012年上海理工大学重点课程建设基金资助(NO:20090702)。 【嵌入式系统开发试题】推荐阅读: 嵌入式系统试题库09-20 嵌入式开发学习心得11-16 嵌入式毕业论文:嵌入式系统的应用06-19 构建嵌入式linux系统10-25 嵌入式系统学习心得07-11 嵌入式系统设计课程设计大纲(给学生)10-22 嵌入式笔试题及答案11-22 嵌入式培训总结06-17 实习总结嵌入式11-11 嵌入式应用实践总结12-17嵌入式系统开发试题 篇5
嵌入式数控系统人机界面开发 篇6
嵌入式系统开发试题 篇7