1、ARM原理及应用实验指导书 作者: 日期:2 个人收集整理 勿做商业用途实验一 C/OS-II 任务创建实验目的:通过查看任务创建的源代码了解任务创建的过程及与系统的关系;掌握 C/OSII 任务 创建的方法;了解基于任务的系统设计方法.实验原理:任务可以是一个无限的循环,也可以是在一次执行完毕后被删除掉。这里要注意的是, 任务代码并不是被真正的删除了,而只是 C/OSII 不再理会该任务代码,所以该任务代码 不会再运行.任务看起来与任何 C 函数一样,具有一个返回类型和一个参数,只是它从不 返回.任务的返回类型必须被定义成 void 型.C/OS-II 可以管理多达 64 个任务,并从中保留
2、了四个最高优先级和四个最低优先级的 任务供自己使用,所以用户可以使用的只有 56 个任务。任务的优先级越高,反映优先级的 值则越低。在最新的 C/OS-II 版本中,任务的优先级数也可作为任务的标识符使用。想让 C/OS-II 管理用户的任务,用户必须要先建立任务。用户可以通过传递任务地址 和其它参数到以下两个函数之一来建立任务:OSTaskCreate() 或 OSTaskCreateExt() . OSTaskCreate()与 C/OS-II 是向下兼容的,OSTaskCreateExt()是 OSTaskCreate()的扩展版本, 提供了一些附加的功能.用两个函数中的任何一个都可以建
3、立任务。任务可以在多任务调度 开始前建立,也可以在其它任务的执行过程中被建立。在开始多任务调度(即调用 OSStart()) 前,用户必须建立至少一个任务。任务不能由中断服务程序(ISR)来建立。开发板部分引脚配置图:设备对应引脚LED1P1。16LED2P1.17LED3P1.18LED4P1.19LED5P1.20LED6P1.21LED7P1。22LED8P1。23按键P0.16蜂鸣器P1.25实验步骤:1、按照概述中“IAR Embedded Workbench 使用打开位于 D:pxa270实验程序实验 一Ex1 的工程文件.2、在 Workspace 一栏中打开 app。c 文件,
4、从文件中学习任务产生的方法和任务应用的 方法。3、建立一个任务,使用LED_Toggle()函数,定时对LED D3进行控制。4、编译工程后,通过概述中的“C/OS-II 实验烧写说明”,下载修改后的程序。5、通过通过LED闪烁情况检验任务建立的正确性.6、使用如下图的功能,查找 OSTaskCreate 函数,通过源代码深入了解任务产生的过程。思考题:1、建立任务的过程包括那些步骤。2、系统对任务产生需要那些初始化和设置.3、通过查看源代码,找出以下变量的是怎样定义的,并对其进行简单的意义说明。OS_STK,OSTCBPrioTbl,OS_TCB,OSTCBFreeList,OSTCBLis
5、t,OSRdyGrp,OSRdyTbl实验二 C/OSII 同步与通信实验目的:通过查看信号量创建和邮箱创建的源代码,了解信号量创建的过程及与系统的关系;掌 握 C/OSII 信号量创建和邮箱创建的方法;了解并使用信号量和邮箱对任务进行同步和通 信。实验原理:在 C/OS-II 中,有多种方法可以保护任务之间的共享数据和提供任务之间的通讯: 一是利用宏 OS_ENTER_CRITICAL()和 OS_EXIT_CRITICAL()来关闭中断和打开中断。当两个任务或者一个任务和一个中断服务子程序共享某些数据时,可以采用这种方法。 二是利用函数 OSSchedLock()和 OSSchekUnlo
6、ck()对 C/OS-II 中的任务调度函数上锁和开锁。用这种方法也可以实现数据的共享。 另外三种用于数据共享和任务通讯的方法:信号量、邮箱和消息队列. 一个任务或者中断服务子程序可以通过事件控制块 ECB(Event Control Blocks)来向另外的任务发信号。这里,所有的信号都被看成是事件(Event)。这也说明为什么上面把用于 通讯的数据结构叫做事件控制块。一个任务还可以等待另一个任务或中断服务子程序给它发 送信号。这里要注意的是,只有任务可以等待事件发生,中断服务子程序是不能这样做的. 对于处于等待状态的任务,还可以给它指定一个最长等待时间,以此来防止因为等待的事件 没有发生而
7、无限期地等下去。多个任务可以同时等待同一个事件的发生。在这种情况下,当该事件发生后,所有等待 该事件的任务中,优先级最高的任务得到了该事件并进入就绪状态,准备执行。上面讲到的 事件,可以是信号量、邮箱或者消息队列等。当事件控制块是一个信号量时,任务可以等待 它,也可以给它发送消息。邮箱是 C/OS-II 中另一种通讯机制,它可以使一个任务或者中断服务子程序向另一个 任务发送一个指针型的变量。该指针指向一个包含了特定“消息”的数据结构.为了在 C/OS-II 中使用邮箱,必须将 OS_CFG.H 中的 OS_MBOX_EN 常数置为 1。 使用邮箱之前,必须先建立该邮箱。该操作可以通过调用 OS
8、MboxCreate()函数来完成(见 下节),并且要指定指针的初始值。一般情况下,这个初始值是 NULL,但也可以初始化一 个邮箱,使其在最开始就包含一条消息.如果使用邮箱的目的是用来通知一个事件的发生(发 送一条消息),那么就要初始化该邮箱为 NULL,因为在开始时,事件还没有发生。如果用 户用邮箱来共享某些资源,那么就要初始化该邮箱为一个非 NULL 的指针。在这种情况下, 邮箱被当成一个二值信号量使用.实验步骤:1、确保实验一的程序运行成功.2、使用二值信号量或者邮箱按照程序中的提示进行程序填写。3、思考题:1、使用文字说明任务同步与通信的过程。2、通过查看源代码说明信号量和邮箱创建的
9、过程。3、通过查看源代码,找出以下变量的是怎样定义的,并对其进行简单的意义说明。OS_EVENT,OSEventFreeList,OSTCBCur。实验三 嵌入式 Linux 系统的基本操作实验目的:掌握实验箱嵌入式 Linux 运行环境的硬件的连接方法和软件的设置;掌握 Linux 基本的 操作;掌握 Linux 基本的命令。实验原理:Linux 正在嵌入式开发领域稳步发展。因为 Linux 使用 GPL,所以任何对将 Linux 定制于自己特定开发板或 PDA、掌上机、可佩带设备感兴趣的人都可以从因特网免费下载 其内核和应用程序,并开始移植或开发。嵌入式 Linux 的发展比较迅速。NEC
10、、索尼已经在销售个人视频录像机等基于 Linux 的消费类电子产品,摩托罗拉则计划在其未来的大多数手机上使用 Linux,IBM 也制定了在 手持机上运行 Linux 的计划.数年来,“Linux 标准库”组织一直在从事对在服务器上运行的 Linux 进行标准化的工作, 现在,嵌入式计算领域也开始了这一工作.嵌入式 Linux 标准吸引了“Linux 标准库以及 Unix 组织中有益的元素。文件编辑 vivi 编辑器的文字说明模式:命令模式,编辑模式,末行模式。 切换方式:命令模式i编辑模式,编辑模式Esc命令模式,命令模式:末行模式。功能:命令模式(Command Mode):控制光标移动,
11、删除字符,段落复制。 编辑模式(Insert Mode):新增文字及修改文字。末行模式(Last Line Mode):保存文件,离开 vi,以及其他设置.命令模式命令 命令说明h将光标向左移动一格l将光标向右移动一格 j将光标向下移动一格 k 将光标向上移动一格0数字 0,将光标移动到该行的行首$将光标移动到该行的行末H将光标移动到该屏幕的顶端M将光标移动到该屏幕的中间 L 将光标移动到该屏幕的底端 gg将光标移动到文章的首行G 将光标移动到文章的尾行 w 或 W将光标移动到下一单词 x删除光标所在处的字符X删除光标前的字符dd删除光标所在行*dd从光标所在行向下删除*行,*为数字D删除光标
12、所在处到行尾r取代光标处的一个字符R从光标处向后替换,按 Esc 结束u取消上步的操作U取消目前的所有操作yy复制光标所在行p将复制的内容放在光标所在行的下行编辑模式命令 命令说明a在光标后插入文本A在光标所在行后插入文本i在光标前插入文本I在光标所在行前插入文本o在光标所在行下插入新行(小写字母 o) O 在光标所在行上插入新行(大写字母 O)末行命令命令说明e创建新文件 n加载新文件 w 保存文件!强行操作w!强行保存文件q退出q!强行退出wq保存退出wq!强行保存退出set nu显示行号set nonu不显示行号/*/搜索,*任意字符串?同上实验步骤:1、连接实验箱 RS232 的 UA
13、RT0 到计算机。2、连接实验箱网络到计算机的网卡。3、双击Putty,并打开 COM 连接.4、连接实验箱电源,并按 Power 键,打开实验箱电源,Putty会有如下输出。 “rootIntel /就是嵌入式 Linux 的 shell 输出。5、双击图标,打开虚拟软件,如下图所示。6、点击启动此虚拟机,等待虚拟机启动起来,如下图所示。输入用户名:root,密码 是 123456,进入系统.7、在虚拟机中打开一个终端,并输入 ifconfig 来查看网络配置,确保网络在 192。168.1.*网段。如下图所示.8、检查配置好网络后,为了使操作统一,我们使用 Putty 登录 Redhat
14、9,下图所示。9、练习 Linux 基本操作.(注意以下操作只能在rootBC root,也就是 root 文件夹下 运行,不然会导致系统不能启动)9.1 ls,在rootBC root下输入 ls,可得到如下的结果。rootBC root lsanacondaks.cfginstall.loginstall。log。syslogrootBC root man ls可以看到 ls 命令的用法,及其参数的意义,对于初学者大多数情况下,学习命令都是 通过“man ”和“* -help”得到的命令使用方法.9。2 根据以上提示,学习并掌握以下的命令.cp ,mkdir, rmdir ,rm,del,
15、 file,cd 等命令10、简单的系统管理(以下的命令详细的使用发放都可以用“man *和“* -help)10。1 查看硬盘使用情况 df10。2 查看文件夹的大小 du10。3 查看 CPU 使用情况 top10。4 系统网络配置 ifconfig11、在虚拟机中练习完命令后,以上学习的命名大部分都可以在嵌入式的 Linux 中使用, 命令可以在 Xshell 的 COM 窗口练习。11。1 输入 qt,可以启动桌面,按 CRTC 退出,如果鼠标位置不准确可以输入 qtc进入校屏程序。在 LCD 的桌面上可以放音乐和 MTV,还有游戏程序。11.2 控制台下播放音乐及 MTV,输入:#c
16、d /mnt/yaffs/mm#ls查看文件名称mplayer *为文件名,进行播放文件。12、实验箱的 Linux 系统挂载 VMware 中的文件夹。 在 Xshell 中的 COM 窗口输入:#mountonolock192。168。1。101:/up-techpxa270/mnt/nfs只是输入#cd/mnt/nfs通过 ls 命令就可以看到 VMware 中 Linux 系统的文件.思考题:1、 请画出虚拟机、PC 机和 ARM 实验箱之间的硬件连接图。2、在 Linux 中怎样配置网络.实验四 嵌入式 Linux 系统的编程实验目的:掌握嵌入式 Linux 系统编程的硬件结构图;掌
17、握嵌入式 Linux 系统开发软件硬件的建立; 掌握 Linux 程序编译的方法;了解 Linux 系统编程的方法.实验原理:Linux 软件开发一直在 Internet 环境下讲行。这个环境是全球性的,编程人员来自世界 各地。只要能够访问 Web 站点,就可以启动一个以 Linux 为基础的软件项目。Linux 开发工 作经常是在 Linux 用户决定共同完成一个项目时开始的。当开发工作完成后,该软件就被放 到 Internet 站点上,任何用户都可以访问和下载它。由于这个活跃的开发环境,新的以 Linux 为基础的软件功能日益强大,而且呈现爆炸式的增长态势。大多数 Linux 软件是经过自
18、由软件基金会(Free Software Foundation)提供的 GNU(GNU 即 GNUs not UNIX)公开认证授权的,因而通常被称作 GNU 软件.GNU 软件免费提供 给用户使用,并被证明是非常可靠和高效的.许多流行的 Linux 实用程序如 C 编译器、shell 和编辑器都是 GNU 软件应用程序。Linux 程序需要首先转化为低级机器语言即所谓的二进制代码以后,才能被操作系统执 行。例如编程时,先用普通的编程语言生成一系列指令,这些指令可被翻译为适当的可执行 应用程序的二进制代码。这个翻译过程可由解释器一步步来完成,或者也可以立即由编译器 明确地完成。shell 编程
19、语言如 BASH、TCSH、GAWK、Perl、Tcl 和 Tk 都利用自己的解释 器。用这些语言编制的程序尽管是应用程序文件,但可以直接运行.编译器则不同,它将生 成一个独立的二进制代码文件然后才可以运行。Linux 原本被设计为桌面系统,现在广泛应用于服务器领域。而更大的影响在于它正逐 渐应用于嵌入式设备。Linux 可以说是最早的嵌入式 Linux 发行版本.它是为没有 MMU 的 处理器而设计的,进而发展了一个完整的开发平台,包括编译、调试等工具。gcc 使用gcc 可以使程序员灵活地控制编译过程.编译过程一般可以分为下面四个阶段,每个阶 段分别调用不同的工具进行处理,如图所示。Lin
20、ux 系统中可执行文件有两种格式。第一种格式是 a.out 格式,这种格式用于早期的 Linux 系统以及 Unix 系统的原始格式。a.out 来自于 Unix C 编译程序默认的可执行文件名。 当使用共享库时,a.out 格式就会发生问题.把 a。out 格式调整为共享库是一种非常复杂的操 作,由于这个原因,一种新的文件格式被引入 Unix 系统 5 的第四版本和 Solaris 系统中。它被称为可执行和连接的格式(ELF)。这种格式很容易实现共享库。ELF 格式已经被 Linux 系统作为标准的格式采用。gcc 编译程序产生的所有的二进制文 件都是 ELF 格式的文件(即使可执行文件的默
21、认名仍然是 a。out).较旧的 a。out 格式的程序 仍然可以运行在支持 ELF 格式的系统上.使用 GNU make 编辑 makefile要使用 make,必须编写一个叫做 Makefile 的文件,这个文件描述了软件包中文件之间的 关系,提供更新每个文件的命令。一般在一个软件包里,通常是可执行文件靠目标文件来更 新,目标文件靠编译源文件来更新。Makefile 写好之后,每次改变了某些源文件,只要执行 make 命令:# make所有必要的重新编译将执行.Make 程序利用 makefile 中的数据和每个文件的最后修改时 间来确定那个文件需要更新,对于需要更新的文件,make 程序
22、执行 makefile 数据中定义的 命令来更新。Makefile 是一个文本形式的数据库文件,其中包含一些规则来告诉 make 处理哪些文件以 及如何处理这些文件。这些规则主要是描述哪些文件(称为 target 目标文件,不要和编译时 产生的目标文件相混淆)是从哪些别的文件(称为 dependency 依赖文件)中产生的,以及 用什么命令(command)来执行这个过程。依靠这些信息,make 会对磁盘上的文件进行检查,如果目标文件的生成或被改动时的时 间(称为该文件时间戳)至少比它的一个依赖文件还旧的话,make 就执行相应的命令,以 更新目标文件。目标文件不一定是最后的可执行文件,可以是
23、任何一个中间文件并可以作为 其他目标文件的依赖文件.一个 Makefile 文件主要含有一系列的规则,每条规则包含以下内容。一个目标(target),即 make 最终需要创建的文件,如可执行文件和目标文件;目标也 可以是要执行的动作,如“clean”。一个或多个依赖文件(dependency)列表,通常是编译目标文件所需要的其他文件。一系列命今(command),是 make 执行的动作,通常是把指定的相关文件编译成目标文 件的编译命令,每个命令占一行,且每个命令行的起始字符必须为 TAB 字符.例如,有以下的 Makefile 文件: 一个简单的 Makefile 的例子# 以#开头的为注
24、释行test:prog.o code.ogcc o test prog.o code。o prog.o:prog.c prog。h code。hgcc c prog。c o prog。o code.o:code。c code。hgcc c code。c o code.o clean:rm f *。o上面的 Makefile 文件中共定义了四个目标:test、prog。o、code.o 和 clean。目标从每行的 最左边开始写,后面跟一个冒号(:),如果有与这个目标有依赖性的其他目标或文件,把它 们列在冒号后面,并以空格隔开。然后另起一行开始写实现这个目标的一组命令.在 Makefile 中,
25、可使用续行号()将一个单独的命令行延续成几行.但要注意在续行号()后面不能 跟任何字符(包括空格和键).一般情况下,调用 make 命令可输入: make targettarget 是 Makefile 文件中定义的目标之一,如果省略 target,make 就将生成 Makefile 文件 中定义的第一个目标.对于上面 Makefile 的例子,单独的一个“make”命令等价于: make test因为 test 是 Makefile 文件中定义的第一个目标,make 首先将其读入,然后从第一行开 始执行,把第一个目标 test 作为它的最终目标,所有后面的目标的更新都会影响到 test 的
26、更 新。第一条规则说明只要文件 test 的时间戳比文件 prog。o 或 code.o 中的任何一个旧,下一 行的编译命令将会被执行.实验步骤:1、完成实验三后,保持网络配置不变,完成了实验三的第 12 项,然后在 VMware控制终端的窗口中输入:#cd/uptechpxa270mkdirmyworkcdmywork#vihello.c输入如下程序:#includestdio。hint main()printf(“Hello, World!n”);然后保存退出。 再输入:vimakefile 输入如下程序: CROSS=gccall: hello.c$(CROSS)ohellohello。c clean:rmf*.out *。o然后保存退出.再输入:#make直到编译没有错误,可以看到在 mywork 文件夹下有 hello 的可执行文件,在实验箱上 通过 NFS 挂载 VMware 下的/uptechpxa270 目录,在 Putty 的 COM 上执行 hello 程序,输 入:#。/hello2、 练习实验箱 Linux 实验指导书中的内容。思考题:1、通过以上的操作,你怎么理解交叉编译。2、你怎么理解编译器是怎样工作的.
©2010-2024 宁波自信网络信息技术有限公司 版权所有
客服电话:4008-655-100 投诉/维权电话:4009-655-100