(测试计量技术及仪器专业论文)嵌入式系统的研究与应用——fm电台手持式测试仪.pdf_第1页
(测试计量技术及仪器专业论文)嵌入式系统的研究与应用——fm电台手持式测试仪.pdf_第2页
(测试计量技术及仪器专业论文)嵌入式系统的研究与应用——fm电台手持式测试仪.pdf_第3页
(测试计量技术及仪器专业论文)嵌入式系统的研究与应用——fm电台手持式测试仪.pdf_第4页
(测试计量技术及仪器专业论文)嵌入式系统的研究与应用——fm电台手持式测试仪.pdf_第5页
已阅读5页,还剩51页未读, 继续免费阅读

(测试计量技术及仪器专业论文)嵌入式系统的研究与应用——fm电台手持式测试仪.pdf.pdf 免费下载

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

南京邮电大学硕士研究擞学位论文摘要 摘要 随着嵌入式系统应用的日益广泛,如何实现嵌入式系统的开发已经成为嵌入式应用发 展麓关键。本文系统地分析研究嵌入式系统产品靛开发技术。 本课题完成的工作有四个方面,依次是:基于微控制器s h a r pl h 7 9 5 2 0 ,深入讨论启 动程痔的组成和实现;将转c o s - i i 安时操俸系统移植到a r m 平台上,详缓分桥了 o s _ c p u _ c h 、o s _ c p u _ c co s c p u - a 。s _ - - 个文件的移植过程,讨论了时钟节拍中断服 务糕序麴设计;从硬件和软件方瑟讨论了低功耗设计麓题;研究了f m 电台发射机测试中 的射频功率测量和频率测量过程,接收机中音频电平测量过程和音频频率测量过程。 关键词:嵌入式实时操作系统;弘c o s l l ;低功耗 南京邮电大学硕士研究辍学位论文 a b s t r a c t a b s t r a c t a tp r e s e n t , e m b e d d e ds y s t e ms p r e a d st h r o u g hd i f f e r e n tk i n d so fp r o d u c tm a r k e t h o wt o i m p l e m e n tt a r g e ts y s t e mh a sb e c o m et h e c o r ei ni t sa p p l i c a t i o n 。t h i sp a p e 毛d e v e l o p m e n t t e c h n i c a lo fe m b e d d e dp r o d u c ti sr e s e a r c h e da n da n a l y z e ds y s t e m a t i c a l l y f o u rt a s k sh a v eb e e nd o n ei nt h ep a p e r ,d e v e l o p m e n to fb o o tp r o g r a mi sd i s c u s s e dd e e p l y b a s e dm i c r o e h i ps h a r pl h 7 9 5 2 0 ;t r a n s p o r t i n gp r o c e s so fu c o s i io na r mp l a t f o r ma n d o s _ c p u _ c ho s c p 醍e o s c p 配a st h r e ef i l e sw e r ea n a l y z e da n dd e s i g no fi n t e r r u p t e r s e r v i c ef o rt i m et i c k ;l o wp o w e rc o n s u m p t i o ni sd i s c u s s e df r o mh w & s w ;r a d i op o w e r m e a s u r e m e n ta n dr a d i of r e q u e n c ym e a s u r e m e n to ft r a n s m i t t e rt e s to ff ms t a t i o n ,a n da u d i o v o l t a g em e a s u r e m e n ta n da u d i of r e q u e n c ym e a s u r e m e n to fr e c e i v e rt e s to ff ms t a t i o ni s r e s e a r c h e d k e y w o r d s :e m b e d d e dr e a l t i m eo p e r a t i o ns y s t e m ; i c o s i i ;l o wp o w e r i i 南京邮电大学学位论文独创性声明 本人声明所呈交的学位论文是我个人在导师指导下进行的研究 工作及取得的研究成果。尽我所知,除了文中特男l 加以标注和致谢的 地方外,论文中不包含其他人已经发表或撰写过的研究成果,也不包 含为获得南京邮电大学或其它教育机构的学位或证书而使用过的材 料。与我一同工作的同志对本研究所做的任何贡献均已在论文中作了 明确的说明并表示了谢意。 研究生签名:毒弓扛碍期:日幺够 南京邮电大学学位论文使用授权声鳃 南京邮电大学、中国科学技术信息研究所、国家图书馆有权保留 本人所送交学位论文的复印件和电子文档,可以采用影印、缩印或其 他复制手段保存论文。本人电子文档的内容和纸质论文的内容相一 致。除在保密期内的保密论文外,允许论文被查阅和借阅,可以公布 ( 包括刊登) 论文的全部或部分内容。论文的公布( 包括刊登) 授权 南京邮电大学研究生部办理。 研究生签名:_ 霉象季一导师签名:碜魄舛扩 南京i i l i f b # 1 ,生n 1 1 嵌入式系统概述 1ii 嵌入式系统的起源 第一章绪论 电子数字训算机诞k 于1 9 4 6 年,在其后漫长的历史进程中,引辩机始终是供养在特殊 的机房中,实雎数值汁算的大型昂贵i : 蔷。直到2 0 世纪7 0 年代,微处理器的出现,计算 机爿出现了历史性的变化。以微处理器为核心的微型计辩机以其小,价廉、高可靠| 生特 点,迅述走出机房;基于局述数值解算能力的微型机,表现h 的智能化水平引起了控制专 业人士的兴趣,要求将微型机i 鼍入到个对尊体系| 1 _ l - ,实现列豫体系的智能化摔制。为了 区5 j l | r 原有的通用1 1 算机系统把嵌八到列象体系中,实现对象体系智能化控制的计算机, 称作嵌入式计算机系统。b l 此,l 长入,e 系统诞生丁微型机时代,| 茯入式系统的嵌入性本质 是将个计算机嵌入到个对象体系巾去。 经过几十年的发展,嵌入式系统证根多,业中得到t 广泛的应用,升还步改变着这些 产业,包括刖l 自动化、l 蜩防、运输和航天领域。图1 描述了嵌入式系统在生活中的应用。 p d a i n o m e i 鬣麓熙:黼 罔1 :限入式系统的应_ | = | 游戏机 1 1 2 嵌入式系统的定义 嵌入式系统是以j n ,用为,卜山,以算 _ | l 技术为基础,并且软硬仆t ,戡翦玉用于应用 系统刈功能、可靠成奉、体积、功牦有,”格要求的用计算机系统。它脏山嵌入式 微处州器、外n ,l 馒h 设备、嵌入式操怍系统以及用,的嘘州程序等叫个部分组成,用于实 现刈扎他啦缶的控制、脏桃或蔼理等功能。 鳖 戛妙 黧霉 籀m mm 一埋 堕塞螋! 垦奎鲎塑主堡! ! ! 兰鲎堡堡兰篓二至堕笙 根据i e e e ( 国际电气和电子工程师协会) 的定义:嵌入式系统是用于控制、监视或者 辘助操作机器和设备的装置( 原文是d e v i c e su s e dt oc o n t r o l ,m o n i t o r ,o ra s s i s tt h eo p e r a t i o no f e q u i p m e n t ,m a c h i n e r yo rp l a n t s ) f 2 j o 1 。2 嵌入式处理器 l 。2 + la r m 处理器 嵌入式系统的核心是嵌入式微处理器。谈到嵌入式微处理器,就不得不说起a r m 。目 前,很多嵌入式微处理器的内核都是采用a r m 技术。什么是a r m ? 3 2 位嵌入式处理器中 有a r m 内核。a r m 是微处理器行业的家知名企业,设计了大量高性能、廉价、耗能低 的r i s c 处理器、相关技术及软件。技术具有性能高、成本低和能耗省的特点。 1 2 2嵌入式微处理器的分类 ( 1 ) 片上系统( s o c ) 1 3 l 片上系统( s o c ) 是l c 设计的发展趋势。采用s o c 设计技术,可以大幅度的提离系 统的可靠性,减少系统的瑟积和功耗,降低系统成本,极大地提高系统的性熊价格比。s o c 芯片已经成为提高移动通信、网络、信息家电、高速计算、多媒体应用及军用电予系统性 能的核心器件。 ( 2 ) 可编程片上系统( s o p c ) 3 1 可编程逻辑技术把整个系统放在一块硅片上,称作s o p c 。可编程片上系统( s o p c ) 是一种特殊的嵌入式系统。 可编程片上系统,首先它是片上系统( s o c ) ,既蠢单个芯片完成整个系统的主要逻 辑功能;其次,它是可编程系统,具有灵活的设计方式,可裁减、可扩充、可升级,并具 备软硬件在系统可编程的功能。 l 。3 嵌入式操作系统 计算机系统有硬件和软件组成,在发展初期没有操作系统这个概念,用户使用监控程 序来使用计算机。在六十年代中期监控程序又进一步发展成了操作系统。操作系统传统上 是负责对计算机硬件直接控制及管理的系统软件。当多个程序同时运行时,操作系统负责 规划以优化每个程序的处理时间溺。现代的操作系统一般由进程管理、内存管理、文件系 统、驱动程序和网络等组成疆1 。 嵌入式操作系统的特点: 完成某一项或有限项功能; 2 堕塞坚皇查兰塑! 婴塑生堂丝笙茎篓二至缝堡 在性能和实时性方面有严格的限制; 能源、成本和可靠性通常是影响设计的重要因素; 占有资源少、易于连接; 系统功能可针对需求进行裁减、调整,以便满足最终产品的设计要求。 从2 0 世纪8 0 年代开始,市场上出现各种各样的商用嵌入式操作系统,这些操作系统 大部分都是为专有系统开发的,从而逐步演化成了现在多种形式的商用嵌入式操作系统百 家争鸣的局面。这些操作系统有v x w o r k s 、p s o s 、n e c u l e u s 、q n x 、l i n u x 、w i n d o w sc e 等。 1 3 1v x w o r k s v x w o r k s 是w i n d r i v e r 公司专f j 为实时嵌入式系统设计开发的操 乍系统软件,为 程序员提供了高效的实时任务调度、中断管理、实时的系统资源以及实时的任务间通信。 应用程序员可以将尽可能多的精力放在应用程序本身,而不必再去关心系统资源的管理。 该系统主要应用在单板机、数据网络( 以太网交换机、路由器) 和通信等多方面。 1 3 2w i n d o w sc :e w i n d o w sc e 是微软开发的一个开放的、可升级的3 2 位嵌入式操作系统,是个基于 掌上型电脑类的电子设备的操作系统。它从整体上为有限资源的平台设计的多线程、完整 优先权、多任务的操作系统。它的模块性设计允许它对于从掌上电日_ 。l ,i i 专用的工业控制器 的用户电子设备进行定制。 1 3 3l i n u x l i n u x 是一个类似予u n i x 的操作系统。它起源于芬兰个名为l i n u st o r v a l d s | l 冬业余爱 好,但是现在已经是最为流行的一款j r l :放源代码的操作系统。 l i n u x 系统不仅能够运行于p c 平台,还在嵌入式系统方面大方光芒,在各种嵌入式 l i n u xo s 迅速发展的状况下,l i n u xo s 逐渐形成了可与w i n d o w sc e 等嵌入式操作系统进 行抗衡的局面。 另一种常用的嵌入式l i n u x 是u c l i n u x ,它去掉了l i n u x 中的内存管理单元,主要用于 没有内存管理单元的处理器( 比如三星公司的s 3 c 4 4 b o x 处理器) ,该系统崖接访问内存, 所有程序中访问的地址都是物理地址。 l 。3 。4 、 t c o s i i l a c o s i i 是一个典型的实时操作系统。该系统扶1 9 9 2 年开始发展,星前流行的是第二 堕塞业! 皇查兰竺! :型! 壅圭兰竺堡茎萋二! 缝堡 版,即 t c o s 珏。它的特点可以概括为以下几个方面:公丌源代码,代码结构清晰、明了, 注释详细,组织有条理,可移植性好,可裁剪,可固化。内核属于抢占式。 g c o s i i 应用领域很广,如照相机、医疗器械、音响设备、发动机控制、高速公路电 话系统、自动提款机等。2 0 0 0 年,得到了美豳航空管理局( f a a ) 的认证,可以用于飞行 器中。 g c o s - i i 是本文所用到的嵌入式操作系统,下文将会研究g c o s i i ,以及讨论将其移 植至0 本文使用的目标板上。 1 4 本文研究主题 1 4 1 本文所使用的硬件平台 本文使用的硬件平台是基于f m 电台手持式测试仪的一套开发平台。 f m 电台手持式测试仅是为满足现役装甲兵无线通信设备的检测与维修而专f j 开发研 制的新型智能化性能检查仪。f m 电台手持式测试仪由主控板、信号源扳、测量板组成, 其结构框图见图2 。 主控板包括嵌入式微控制器( s h a r pl h 7 9 5 2 0 ) 、存储芯片( n a n df l a s h ) 、c p l d ( 用于总线扩展) 、并口转串口芯片( s t l 6 c 1 6 5 5 4 ) 、直流电源转换芯片( t i 公司t p s 5 4 3 0 ) 、 实时时钟芯片等。主控板主要用于控制信号源板的操作和测量板的操作。 信号源饭的功能是,调带0 射频信号、发送调制信号和音频信号,以及接收电台发粕的 信号、解调射频信号等。 测量板的功能:测量射频频率、射频功率、射频电平、音频频率、音频电平、失真等 电台参数。 图2 :本文使用冒标板的结构框图 4 南京邮电大学颀_ - t :t i t t :究生学位论义第一章绪论 另外,本文还使用到了a a t r o n 公司的b d i l 0 0 0 仿真器,用以仿真调试f m 电台手持式 测试仪。 1 4 2 本文研究翻标 本文主要研究嵌入式操作系统g c o s i i 在f m 电台手持式测试仪中的应用,以及低功 耗系统的设计。f m 电台手持式测试仪的体系结构如图3 。首先,本文研究基于f m 电台手 持式测试仪的启动代码的实现;其次,研究如何将g c o s i i 移植到f m 电台手持式测试仪 上;再次,从硬件、软件、操作系统和产品应用特点这四个层面上,讨论如何降低系统的 功耗:最后,介绍了f m 电台手持式测试仪的一些测试功能的实现。 应用程序 嵌入式操作系统l a c o s i i 硬件 图3 :f m 电台手持式测试仪的体系结构 南京邮电人学硕 j 研究生学位论文第_ 二章启动程序的没汁 第二章启动程序的设计 2 1 选择开发工具 在嵌入式系统设计中,开发工其的选取是个蓬要的考虑因素,通常这是与开发项目 的需求和应用背景相关。一般嵌入式开发工具包含用于嚣标系统的交叉编译器、连接器、 调试器以及辅助处理用的二进制文件分析工具等。 目 f ,除了a r m 公司推出的s d t 、a d s 以及r e a l v i e w 等开发工具外,许多著名软件 开发商都推出了支持a r m 核嵌入式处理器的软件开发工具,瑞典i a r 公司推出了a r m 嵌入式系统集成开发环境,即i a re m b e d d e dw o r k b e n c hf o ra r m ,简称i a re w a r m 。 i a r 的e m b e d d e dw o r k b e n c h 系列是种增强型一体化嵌入式集成开发环境,其中完全 集成了歼发嵌入式系统所需要的文件编辑、项目管理、编译、链接和调试工具。i a r 公司 独具特色的c s p y 调试器,不仅可j 以在系统开发初期进行无酲标硬件的缝软件仿真,也霹 以结合i a r 公司推出的j - l i n k 硬件仿真器,实现用户系统的实时在线仿真调试【引。 i a re w a r m 的主要模块如下f 7 】: 项目管理器; 功能强大的编辑器; 高度优化的i a ra r m c c + + c o m p i l e r ; l a ra & ma s s e m b l e r ; 1 个运用的i a rx l i n kl i n k e r ; i a rx a r 和x l i b 建库程序和i a rd l i bc c + + 运行库; i a rc s p y 调试器( 先进的高级语言调试器) ; 。 命令行实用程序。 i a re w a r m 支持众多的a r m 内核,以及支持众多芯片厂商的支持。本文使用的是 s a 船l h 7 9 5 2 0 徽控制器。这款芯片也得到了i a re w a r m 支持。 i a re w a r m 支持;畏多仿粪器,包括i a rj l i n kj t a g 、i a rj - t r a c ej t a g 、a b a t r o n b d l l 0 0 0 & b d l 2 0 0 0 、a r mm u l t i i c e 等。本文使用的仿真器是a b a t r o nb d l l 0 0 0 。下面将 会介绍这个仿真器的使用。 2 。2 启动程序的编写 2 2 。l 启动程序的概念 启动程序就是在操 乍系统内核运行之前运 亍的一段小程序。通过这段小程序,我们可 6 堕塞盥! 堡叁堂堡! :竺塑竺鲎丝丝塞 整三皇旦垫矍室堕堂生 以初始化硬件设备、建立内存空间的映射图,从而将系统的软硬件环境带到一个合适的状 态,以便为最终调用操作系统内核准备好正确的环境。在p c 的体系结构中,其弓| 导加载 程序由b i o s ( 本质就是段匿件程序) 和位于m b r 中的o sb o o tl o a d e r ( 比如l i l o 和g r u b 等) 一起组成。b i o s 在完成硬件检测和资源分配后,将硬盘m b r 中的b o o t l o a d e r 读到系统的r a m 中,然后将控制权交给o sb o o tl o a d e r 。b o o tl o a d e r 的主要 运行任务就是将内核映像从硬盘上读到r a m 中,然后跳转到内核的入口点去运行,也即 开始启动操作系统l 引。在f m 电台手持式测试仪中,没有像b i o s 那样的固件程序,因此 整个系统的加载启动任务就完全由b o o t l o a d e r 来完成。 基予a r m 的芯片多数为复杂片上系统,这种复杂系统的多数硬件模块都是可配黄的, 需要出软件来没置其需要的工 乍状态。出于c 语言具有模块性和可移植性的特点,大部分 基于a r m 的应用系统程序都采用c 语言编写。但是,系统启动时在进入c 语言的m a i n 函数之前,需要有一段启动程序来完成对a r m 芯片内部集成外围功能初始化、存储器配 置以及地址重映射等任务。这类工作直接面对处理器内核和硬件控制器进行编程,用c 语 言较难实现,因此基于a r m 芯片的嵌入式系统其启动程序通常采用汇编语言编写。 a r m 公司仅设计内核并出售给其他半导体厂商,其他厂商购买内核授权舞加入自己外 围功能,然后生产各具特色的a r m 核芯片,从而导致a r m 核处理器芯片丰富多样,但 同时也使得每一种a r m 核芯片的扇动代码差别很大,难以写出统一的启动代码。i a r 公 司在对a r m 核处理器的支持上,针对以上特点,提供了一个用汇编语言编写的基本启动 程序,但不完憨,其中不足部分由芯片厂商提供,也可以由用户自己编写。本文针对f m 电台手持式测试仪的特点,编写了适用于f m 电台手持式测试仪的启动程序。 2 2 2 编写启动程序的一般规则 a r m 核处理器复位后从o x 0 0 地址开始读取指令。最简单的方法是将应用程序放在映 射空问地址为o x 0 0 的r o m 中。这样当执行第l 条指令时,应用程序就从复位向量o x 0 0 开始执行。但是这种方法有很多缺点,与r a m 相比,r o m 存储宽度小( 8 位或1 6 位) 且速度较慢,访闻它需要较长等待时间,这将降低处理器对异常处理的速度。并且如果将 异常向量表放在r o m 中,代码将无法修改向量表。因此对于提高执行速度和异常处理来 说,将地址为0 x 0 0 的空间映射成r a m 会更好。但是r a m 中的程序无法掉电保存,因此 必须将r o m 放在加电后的o x 0 0 地址,以保证有效的复位向量,然后再使用重映射命令将 r a m 放在0 x 0 0 地址,并将异常向量从r o m 复制猁r a m 中。 编写启动程序应遵循以下般规则疆1 。 7 南京邮电大学硕士研究生学位论文 第二章启动程序的设计 ( 1 ) 设置入口指针 启动程序首先必须定义入翻指针,而且整个应用程序只有一个入口指针,通常应用程 序的入嚣地址o x 0 0 。 ( 2 ) 设置异常向量 a r m 7 核处理器要求中断向量必须设置在从o x 0 0 地址开始,连续8 乘4 字节的空间, 分别是复位、未定义指令、软件中断、预取中止、数据中止、保留、i r q 和f i q ,见表l 描述。 表1 :中断向量表 异常种类地址说明 复位 o x 0 0 0 0 0 0 0 0处理器复位 未定义指令 o x 0 0 0 0 0 0 0 4处理器或协处理器都不能识别当静正在执行 的指令 软件中断 0 x 0 0 0 0 0 0 0 8用户定义的同步中断指令,允许程序运行在 s w l 用户模式 预取中止 o x 0 0 0 0 0 0 0 c处理器试图执行一条从非法地址预取的指令 数据中止 o x 0 0 0 0 0 0 10数据传输指令从非法地址读取或向其存储数 据 保留 0 x o 0 0 0 0 1 4傈窝为以螽扩展用 i r q o x 0 0 0 0 0 0 18 处理器i r q 雩l 脚为低且c p s r 的i 位为0 f i q o x 0 0 0 0 0 0 1 c 处理器f i q 引脚为低且c p s r 的f 位为0 向量表通常放在存储器底部,每个异常分配一个字空间。由于没有分配足够的空间存 储异常处理的所有代码,所以每个向量入口包含一条跳转指令或加载p c 的指令,以执行 适当的转移到具体异常处理程序。如果r o m 定位于o x 0 0 地址,则向量表由一系列固定的 用以指向每个异常的指令组成;否则向量必须被动态初始纯。可以在启动程序中添加一段 代码,使英在运行时将向量拷贝到o x 0 0 地址开始的存储空闯。对于没有使用的中断,使 其擐向一个只含返回指令的哑函数,以防止错误中断引起系统混乱。 程序清单异常向量表 r e s e t l d r p c ,= ? c s t a r t u p系统复位向量的入口地址 l d r p c ,= 0 x 0 0 0 0 0 2 4 8 薅裳嬲魄夫学联联究生学链论文 第二牵寤动程序的没汁 l d r p c , = o x 0 0 0 0 0 2 8 l d r p c , = o x 0 0 0 0 0 2 c l d r p c , = 0 x 0 0 0 0 0 3 0 n o p 1 d r p c , p c ,撑一o x f f o 】通用中断向量入口地址 l d r p c , = 0 x 0 0 0 0 0 3 c 在本文所使用到的目标板上,主要使用了复位异常和通用中断异常的处理。 旦产生i r q 中断,微控制器会切换到i r q 模式,并且跳转到向量表0 x 1 8 地址执行 程序。如以上程序清单蹶示,在i r q 向量处使用的指令与其他国量不同,当c p u 执行 这条指令但还没有跳转时,寄存器p c 的值为o x 2 0 ( 因为本文使用的芯片l h 7 9 5 2 0 的肉核 a r m 7 2 0 t 是三级流水线结构) ,0 x 2 0 减去0 x f f 0 为0 x f f f f f 0 3 0 ,这是向量中断控制器( v i c ) 豹特殊寄存器,这个寄存器保存当女誊将要服务的i r q 的中断服务程序的入口地址,用这条 指令就可以直接跳转到需要的中断服务程序中。 ( 3 ) 初始化片内集成外围功能 启动程序代码与芯片特性有紧密联系。不同公司生产的a r m 核处理器,其片癌集成 了不同的外围功能,编写启动程序时应根据芯片和应髑系统要求对它们进行合适的仞始 化。例如,对外部总线接口的初始化、配置时钟锁相坏( p l l ) 、配蚤向量中断控制器以 及禁止看f - 】狗电路( w d t ) 1 6 l 。 外部总线控制器的初始化 对外接f l a s h 的总线初始化: l d r r 2 , = 0 x13 0 0 5 5 4 0 l d rr l , = 0 x f f f f l0 0 0 啦 垃, p l 】 l h 7 9 5 2 0 片内有外部静态存储器控毒8 器( s m e ) ,s m c 可以管理7 组存储器。o x f f f f l 0 0 0 是s m c 的存储器组o 的配置寄存器( s m c b c r 0 ) 的地址。启动程序就是位于第o 组寄存 器( 芯片l h 7 9 5 2 0 要求启动程序存放在第o 组寄存器内,同时要求这个存储器缌的总线宽 度是1 6 位的) 。 0 x 1 3 0 0 5 5 4 0 是l h 7 9 5 2 0 存储器组o 的配置寄存器的配置值,这个值是根据上表的功能 描述,同时参考芯片l h 7 9 5 2 0 和所使耀的f a l s h 芯片,计算两德。 其他6 个l h 7 9 5 2 0 存储器组的描述与配置与l h 7 9 5 2 0 存储器组o 相似,在此就不一一 描述了。 9 雨隽 邮电人学倾十_ f j i 咒生学位论又第二帮启动程序的设计 向量中断控制器 l h 7 9 5 2 0 向量中断控毒l 器( v i c ) 是一个矮件向量中断系统,具有3 2 个中断请求输入 ( 这是本模块具有这些中断请求输入,丽不是芯片具有这些中断请求连接到本模块) 。这 3 2 个中断包括8 个外部中断源和2 4 个内部中断源。这些中断可编程分为3 类:f i q 、向量 i r q 和非向量i r q 。 v i c 中断禁能操作。若要禁止v i c 中断,则需要向中断清零寄存器相应位写入l 。 本文使用的目标板的启动程序包含v i c 初始化程序,如以下程序清单所列。程序禁止 所京中断。 禁止所有中断是避免调试黠一个中断没有蛹应就再次载入程序,因向量中断控制器状 态错误丽不能正确识别中断。 v i c 初始化: l d rr 2 ,= 0 x 蹦姗 l d rr l ,= o x m l 4 上面指令的作用是关闭所有的中断通道中断使能( 不能清除中断源) 。对向量中断控制器的 孛断清除寄存器楣应位执行写操作,可以实现这个功能。0 x f f f f f 0 1 4 是l h 7 9 5 2 0 的向量中 断控制器的中断清除寄存器的地址。 ( 4 ) 初始化存储器系统 有些a r m 核:落片可通过对寄存器设置。实现对存储器初始化,而对于复杂系统通常 由m m u 来管理内存空间。为正确运行应用程序,在初始化期间应将系统需要读,写的数据 和变量从r o m 拷贝到r a m 中;一些要求快速响应的程序,例如中断处理程序,也需要 在r a m 中运行;如果使用f l a s h ,对f l a s h 的擦除和写入操作也一定要在r a m 中运行【6 1 。 ( 5 ) 初始化堆栈寄存器 a r m 有7 种执行状态,每一种状念的堆栈指针寄存器( s p ) 都是独立的。因此,对程 序中需要用到的每种模式都要给s p 定义一个堆栈地址。方法是改变状态寄存器内的状 态位,使处理器切换到不同的状态,然后给s p 赋值。注意:不要切换到u s e r 模式进行u s e r 模式的堆栈设置,因为进入u s e r 模式后就不能再操作c p s r 回到别的模式了,可能会对接 下去的程序执行造成影响。 系统堆栈初始化取决于用户使用了哪些中断,以及系统需要处理哪些错误类型。一般 来说管理堆栈模式必须初始化。如果使用i r q 中断,则i r q 堆栈必须初始化,并且必须在 允许中断之l j i 进行。如果使用f i q 中断,则f i q 堆栈也必须初始化,并且必须在允许中断 之自i 初始化。一般在简单的嵌入式系统中不使用中止状态堆栈和未定义指令堆栈,但为了 l 穗 鲎塞堡垒盔堂堡! 望坚;生堂垡鲨塞 篓兰耋塞垫堡壁竺堡生 调试方便最好还是将其初始化。如果系统使用d r a m 或其他的外设,还需要设置耀关寄 存器,已确定其刷新速率、数据总线宽度等信息。 ( 6 ) 改变处理器模式和状态 此时可以通过清除c p s r 寄存器中的中甑控铡位来允许中断,这里是安全开感中断的 最早点。这个阶段处理器仍处于管理模式下。如果程序需要在用户模式下运行,可在此处 切换用户模式并初始化用户模式堆栈指针【6 i 。 ( 7 ) 虢转到c 语言主程序 在从启动程序跳转到c 语占程序的m a i n 函数之前,还需要初始化数据存储空间。通常 是加入段循环代码,实现对数据存储空闻清0 。这样做的主要原因是c 语言中没有初值 的变量默认值均为0 。已经初始化变墅的扔值必须从r o m 中复制到r a m 中,其他变量的 初值必须为o f 懿。 粥京邮电大学硕士研究生学位论文 第三常p c o s i i 的移植戍用 第三章l t t c o s i i 的移植应用 3 。兰i 匡c o s 。i i 的概述 在嵌入式操作系统领域,j e a nj l a b r o s s e 开发的g c o s ,由于丌放源代码和强大而稳 定的功能,曾经一度在嵌入式系统领域弓| 起强烈反响。 t c o s ,i i 开放源代码的方式使其不 但知其然,还知其所以然。通过对于系统内部结构的深入了解,能更加方便地进行开发和 调试;并且在这种条件下,完全可以按照设计要求进行合理的裁减、扩充、配黄和移植。 融1 9 9 2 第l 版阆世以来,已有成千上万的开发者把它成功地应用于各种系统,安全性和 稳定性融经得到认证,现已经通过美冒淞a 认证。 g c o s i i 是一个完整、可移植、可固化、可裁剪的占先式实时多任务内核。g c o s i i 用a n s ic 语言编写,包含小部分汇编语言代码,使之可以供不同架构的微处理器使用。 i t c o s i i 可以管理6 4 个彳壬务,具有信号量、互斥信号量、事件标志组、消息邮箱、消息 队列、任务管理、时间管理和内存管理等系统功能。至今,从8 位至6 4 位,g c o s i 融 在多种架构的微处理器上运行。 3 。l 。l g c o s i i 的组成 p c o s i i 可以大致分成核心、任务处理、时渊处理、任务同步与通信,c p u 的移植等 5 个部分玲t 。 核心部分( o s c o r e 。c ) 是操作系统的处理核心,包括操作系统初始化、操作系统运行、 中断进出的藏导、时钟节拍、任务调度、事件处理等多部分。能够维持系统基本工作的部 分都在这里。 任务处理部分( o s t a s k c ) 任务处理部分中的内容都是与任务的操作密切相关的。包括 任务的建立、删除、挂起、恢复等等。因为p c l o s 。i i 是以任务为基本单位调度的,所以这 部分内容也相当重要。 时钟部分( o s t i m e 。c ) g c o s i i 中的最小时钟单位是时钟节拍。任务延时等操作是在 这里完成的。 任务同步和通信部分为事件处理部分,包括信号量、邮箱、邮籍队列、事件标志等部 分:主要用于任务问的互相联系和对l 瞄界资源的访问。 与c p u 的接豳部分是指l ac o s - i i 针对所使用的c p u 的移植部分。幽于弘c o s - i i 是一个通用性的操侔系统,所以对于关键润题上的实现,还是需要根据具体c p u 的具体内 容和要求作相应的移植。这部分内容由于牵涉到s p 等系统指针,所以通常用汇编语言编 1 2 南京邮电大学顺j j 研究生学位论文 第三章p c o s i i 的移植应用 写。主要包括中断级任务切换的底层实现、任务级任务切换的底层实现、时钟节拍的产生 和处理、中断的相关处理部分等内容。 g c o s i i 在特定处理器上的移植工作绝大部分集中在多任务的实现上,因为这部分代 码主要是用柬保存和恢复处理器现场,许多操 乍如读写寄存器操作不能用c 语言,只能使 用特定的处理器的汇编语言完成。 。 p c o s i i 软件体系结构见图4 所示,由图可知,p c o s i i 包括以下3 个部分: p c o s * i i 核心代码:包括1 0 个c 程序文件和1 个头文件,主要实现系统调度、任 务管理、内存管理、信号量、消息邮箱和消息队列等系统功能。此部分代码与处 理器无关。 g c o s i i 配置代码:包括2 个头文件,用于裁剪和配嚣g c o s i i 。此部分代码与 用户实际应用褶关。 p c o s i i 移植代码:包括1 个汇编文件、1 个c 程序文件和1 个头文件,这是移植 g c o s i i 所需要的代码。此部分与处理器相关。 图4 :g c o s i i 软件体系结构 将g c o s i i 移植到a r m 处理器上,大部分的修改工作集中在三个和体系结构楣关的 文件中。这个三个文件是o s c p u c c 、o s c p u c h 及o s c p u a s 。同时还需要移禧 时钟节拍中断服务程序,以实现多任务切换。 南京邮f 乜人学倾l :研究生学位论义 笫量带p c o s - i i 的移楠应用 3 2 l c o s i i 的移植 3 2 。l g c o s i i 的移植条件 移穰, c o s i i 之前需要注意,目标处理器必须满足以下5 点要求【4 l : 处理器的c 编译器能产生可重入型代码; 处理器支持中断,并虽能产生定时中颤( 通常为1 0 - 一1 0 0 h z ) ; 用c 语言可以支持歼关中断; 处理器能支持一定数量的数据存储硬件堆栈( 可能是几k b ) : 处理器有将堆栈指针以及其他c p u 寄存器的内容读出并保存到堆栈或内存中去的 指令。 对于第点要求,通过对l h 7 9 5 2 0 豹定时器0 和中断向量控制器的设置,满是其要求: 对于第、点要求,芯片l h 7 9 5 2 0 同样满足:对于第、点要求,本文使用的c 编 译器可以满足。 3 。2 2o sc p uc h 的移植 3 。2 。2 。i 数据类型定义 g c o s i i 不使用c 语言中的s h o r t 、i n t 和l o n g 等数据类型的定义,因为它们与处理器 类型有关,隐含着不可移植性。代之以移植性强的整数数据类型,这样,既可崖观又可移 植,不过这就成了必须移植的代码。根据i a re w a r mc 编泽器的特性,特作如下定义: 程序清荤定义不依赖编译器的数据类型 t y p e d e f u n s i g n e dc h a r b o o l e a n ;布尔类型 t y p e d e fu n s i g n e dc h a r i n t 8 u ;无符号8 位整数数据类型 t y p e d e f s i g n e d c h a r i n t 8 s ; 有符号8 位整数数据类型 t y p e d e f u n s i g n e ds h o r t i n t l 6 u ;无符号1 6 位整数数据类型 t y p e d e f s i g n e d s h o r t i n t l 6 s ; 有符号1 6 位整数数据类型 秽p e d e f u n s 埯n e di n ti n t 3 2 u ; 无符号3 2 位整数数据类型 t y p e d e f s i g n e d i n t i n t 3 2 s ;有符号3 2 位整数数据类型 t y p e d e f f l o a t f p 3 2 ; 3 2 位浮点数数据类型 t y p e d e f d o u b l e f p 6 4 ;6 4 位浮点数数据类型 3 2 2 2 代码临界段的处理 代码的临界段也称为临界区,指处理时不可分割的代码。旦这部分代码丌始执行, 则不允许任何中断打入。为确保临界段代码的执行不被中断,在进入临界段之前须关中断, 1 4 塑室堡皇奎鲎婴兰婴至竺堂篁堡塞笙三星坚兰! q ! :! ! 煦堡堕壁旦 而临界段代码执行完后,要立即开中断f | 2 l 。 同其他内核一样,i x c o s i i 为了处理临雾段( c r i t i c a ls e c t i o n s ) 代码,须关中断,处理 完毕后,荐开中断。关中断使得 t c o s i i 能够避免同时有其他任务或中断服务进入临界段 代码。关中断的时间是实时内核开发商应提供的最重要指标之一,因为这个指标影响用户 系统对实时事件的相应特性。 t c o s i i 努力使关中断时间降至最短,但就是用l a c o s 。i i 而苦,关中断的时间很大程度上取决于微处理器的结构及编译器所生成的代码质量【1 2 】。 i t c o s i i 定义了2 个宏( m a c r o s ) 来关中断和开中断,以便避免不同c 编译器厂商选 择不同的方法处瑗关中断和开中断。l a c o s i i 中的这2 个宏调用分别是:关中断 ( o s _ e n t e r _ c r i t i c a l ( ) ) 和开中断( o s e x i t _ c r i t i c a l ( ) ) 。 程序清单关中断和开中断的宏定义 t y p e d e f u n s i g n e di n to s c p u s r 关中断的返回数据类型 # d e f i n eo se n t e rc r i t i c a l ( ) ( c p u _ s r = o s _ c p u _ s a v e s r 0 ) 关中断 # d e f i n eo s _ e x i t _ c r i t i c a l ( ) ( o s c p u _ r e s t o r e s r ( c p u _ s r ) ) 开中断 函数o s c p u s r o s c p u _ s a v e s r ( v o i d ) 军no s _ c p l l r e s t o r e s r ( o s c p u s rc p u _ s r ) 函 数的实现将会在下文( o sc p ua s 的移植) 分绍。 3 。2 。2 3 时钟节李耋函数的声明 v o i do s _ c p 吣j i c k _ i s r ( v o i d ) 此函数的实现将在下文( o sc p ua 。s 的移植) 介绍。 3 2 2 4 任务级切换的函数声明 # d e f i n eo s3k s ks w o o s c t x s w o o s c t x s w ( ) 函数的实现将在下文( o 轧c p u 。s 的移植) 介绍。 3 。2 2 。5 堆栈单位定义 l y p e d e fu n s i g n e di n to s s t k 3 2 2 6 堆栈的增长方向 堆栈由高地址向低地址增长,这个也是和编译器有关的,当进行函数调用时,入口参 数和返回地址一般都会保存在当前任务的堆栈中,编译器的编译选项和由此生成的堆栈指 令就会决定堆栈的增长方向。 # d e f i n eo s s t k g r o w t h l 3 。2 。2 。7 全局变量的定义 o s 。c p u e x t i n t 3 2 u o s i n t c t x s w f l a g 变量o s i n t c t x s w f l a g 表示在中断服务程序中进行任务切换的标志,在下文 l s 南京邮电大学硕,l 研究生学位论文 第三章p c o s i i 的移植戍用 ( o s - e p 也e c 的移植) 的中断级任务切换函数( v o i do s i n t c t x s w ( v o i d ) ) 将用到。 3 2 3o sc p uc c 的移植 3 2 3 1 任务堆栈初始化 在编写此瀚数之前,必须先确定任务的堆栈结构。丽任务的堆栈结构是与c p u 的体系 结构、编译器有密切的关联。 在a r m 体系结构下,任务堆栈空间有高至低依次将保存着p c 、l r 、r 1 2 、r ll 、r 1 0 、 r l 、r 0 、c p s r 、s p s r 。本移植的堆栈结构见图5 。根据图5 ,很容易写出函数o s t a s k s t k i n i t 0 的代码,具体代码见程序清单。 高地址 l 增l 长l 方| 向l l 低地址 p c l r r 1 2 r l1 r i r 0 e p s r s p s r 图5 :任务堆栈结构 程序清单函数o s t a s k s t k i n i t 0 的代码 o s s t k 串0 s t a s k s t k i n “( v o i d ( 唪t a s k ) ( v o i d 枣p d ) ,v o i d 水p _ a r g ,o s s t k 奉p t o s ,i n t l6 uo p t ) o s s t k 掌s t k ; o p t t o p t ; 避免编译器警告 s t k p t o s ; 获取堆栈指针 宰( s t k )= ( o s s t k ) t a s k ;p c 幸( - s t k )= ( i n t 3 2 u ) 0 x 1 4 1 4 1 4 1 4 l ;l r 唯

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论