uShell项目开发毕业论文.doc

上传人:文库蛋蛋多 文档编号:4018915 上传时间:2023-04-01 格式:DOC 页数:42 大小:786.50KB
返回 下载 相关 举报
uShell项目开发毕业论文.doc_第1页
第1页 / 共42页
uShell项目开发毕业论文.doc_第2页
第2页 / 共42页
uShell项目开发毕业论文.doc_第3页
第3页 / 共42页
uShell项目开发毕业论文.doc_第4页
第4页 / 共42页
uShell项目开发毕业论文.doc_第5页
第5页 / 共42页
点击查看更多>>
资源描述

《uShell项目开发毕业论文.doc》由会员分享,可在线阅读,更多相关《uShell项目开发毕业论文.doc(42页珍藏版)》请在三一办公上搜索。

1、目 录1 绪论32 需求分析42.1 环境需求42.1.1硬件环境:42.1.2软件环境:42.1.3功能需求52.2 软件构成62.2.1开发条件62.2.2开发期间62.2.3开发语言62.2.4开发使用的技术、知识72.2.5主要术语介绍72.2.6其他83 概要设计83.1 模块概述83.1.1模块结构图83.1.2模块中单元的详细描述93.2 外部模块接口表103.3 内部单元接口表113.4 状态迁移图193.5 人机界面实现方法203.6 异常处理213.7 执行时间估计213.8 源码目录文件结构234 详细设计254.1 主要数据结构描述254.1.1格式化输出254.1.2

2、函数查找264.1.3关键结构说明264.2 参考资料284.3 单元设计284.3.1函数一览表284.3.2宏定义一览表315 系统测试与分析325.1 测试环境325.2 测试方法325.3 测试用例335.4 测试结果345.5 测试总结356 成果演示366.1 查看系统当前任务366.2 查看系统当前相关系统资源366.3 挂起任务386.4 演示总结387 结论39致 谢40参考文献411 绪论TRON (The Real-time Operating system Nucleus)是由东京大学坂村健博士于1984年提出的实时嵌入式操作系统。规范经过多年发展,TRON已成为日本电

3、子产业现行的基础构架,这一系统已经安装到了全球30 亿到40 亿台家用电子产品当中,远远超过Windows的普及程度。尽管在个人电脑领域知名度几乎为零,但TRON现在却占据了全球微处理器操作系统市场上大约60%的份额,成为低价高性能嵌入式系统的典范。但随着嵌入式系统的高功能、网络化,软件开发和调试都变得非常复杂。TRON相关软件的可移植性、可重用性出现了问题。为了实现更为理想的实时操作系统的嵌入式计算结构,出现了T-Engine项目计划,为了更进一步实现标准化,基于TRON的 T-Kernel由此而来。T-Engine是为了在短时间内高效开发实时嵌入式系统而设计的,由标准化硬件结构和标准开源实

4、时操作系统核心(T-Kernel)组成的嵌入式标准开放平台。在T-Engine开发过程中,搭载的CPU为可变的,而规定了其他硬件结构规范、操作系统核心界面规范、对象数据格式规范等要素,使TRON在标准化的基础结构上,具备充分的外围资源及开发环境。这个开放式标准平台结构的最大目标是将CPU从基础结构中独立出来,使在T-Kernel上开发的中间件可不依存于CPU结构而移植。T-Kernel是运行于标准T-Engine/T-Engine硬件平台上的标准实时操作系统核心软件。与其他开源软件所不同的是,它是单一源代码软件,具有强标准化特点,以保证其作为各种中间件发布的平台。操作系统与外部最主要的接口就叫

5、做shell。shell是操作系统最外面的一层。它不属于内核部分,而是在核心之外。shell管理使用者与操作系统之间的交互:等待使用者输入,向操作系统解释使用者的输入,并且处理各种各样的操作系统的输出结果。在当今嵌入式开发过程中,如何提高开发效率,缩短开发周期至关重要。在T-Kernel在嵌入式领域运用如此广泛,而在设计与研发当中,如果有与T-Kernel相关的开发研究调试运用工具无疑会给开发者带来便捷,提高开发效率,同时对于想要学习和研究的开发者,是否能通过一种便捷实践的方式来学习T-Kernel,而uShell能满足这些要求,uShell是基于T-Kernel操作系统上的一个命令行应用程序

6、,主要功能是通过串口输入命令,根据命令来查询和修改T-Engine开发板上T-Kernel中的任务、邮箱、事件标志、信号量、内存池系统资源状态。这样在开发过程中随时查询修改相关信息,可方便地进行调试,缩短开发周期从而在开发过程中提高开发效率。同时对于学习研究T-Kernel的开发者来说,不是单从理论方面来认知它,需要理论学习的同时加以实践,而uShell能为开发者提供实践途径,从而为开发者提高学习和研究T-Kernel的效率。2 需求分析2.1 环境需求2.1.1 硬件环境:在该项目中,使用的硬件是atmel公司的AT91SAM9261开发板,主板为单板设计,CPU直接集成在主板上。AT91S

7、AM9261是以 ARM926EJ-S ARM Thumb 处理器为核心的完全的片上系统,它扩展了 DSP指令集和 Jazelle Java 加速器。主时钟频率 190MHz ,性能高达 210 MIPS。外部总线接口包括支持同步 DRAM(SDRAM)和支持静态存储器的控制器,并有特殊接口电路以支持 NOR FLASH、NAND Flash。该项目中会把mot文件加载到NOR FLASH,NOR FLASH为16bit 4M字节。在开发uShell过程中,主要功能是通过串口输入命令,根据命令来查询和修改T-Engine开发板上T-Kernel中的任务、邮箱、事件标志、信号量、内存池系统资源状

8、态。为了调试和烧制可执行文件到开发板的flash上我们还需要J-Link。2.1.2 软件环境:AT91SAM9261开发板上加载的是嵌入式实时操作系统TKernel。为了把我们的T-Kernel操作系统和我们开发的程序集成到一个可执行文件上,我们需要专门的SDK,其中集成了T-Kernel操作系统,同时包含了T-Kernel操作系统的内核API的接口,出了这些当然其中还包含有一部分标准C库。除了比较重要的SDK外,我们需要一个集成开发环境,该开发环境要具备两个条件,第一,它能加载我们的SDK,第二,它的编译器要是GCC ARM编译器。这里我们使用的是具有强大插件功能Eclipse集成开发环境

9、,当然其中还得安装一些插件。2.1.3 功能需求功能概要1. USH是作为T-Kernel的应用运行的程序,它具有如下功能:2. 根据命令,参考/操作T-Kernel的各种状态。3. 用户程序的加载和卸载。4. 当处于等待输入命令状态时,在超级终端上显示下面的提示符:5. USH%6. 接受用户输入命令并执行。7. 以*开始的行是注释,被视为无效输入。8. 命令中有数值参数和字符串参数。9. 数值参数有如下输入方法:10. H后面连接的是16进制的数字串(09, AF) 或者 0x后面连接的是16进制的数字串(09, AF)11. 后面连接的是10进制的数字串(09)12. B后面连接的是2进

10、制的数字串(01)13. 无前缀的数字串的进制,为 radix 命令设定的默认进制。 详细功能can_wup_撤消对任务的唤醒请求 chg_pri _更改任务的优先级 clr_flg _清除Event Flag的位模式 del_tsk _删除任务 frsm_tsk _强制解除任务的所有挂起 get_reg _参考任务的寄存器信息 h _帮助命令 lodspg _执行用户扩展模块 prompt _ 提示符设定 radix _基数的设定 ref_alm _参考系统中Alarm handler的状态 ref_cyc _参考系统中Cyclic handler的状态 ref_flg _参考系统中Even

11、t Flag的状态 ref_mbf _参考系统中Message Buffer的状态 ref_mbx _参考系统中Mailbox的状态 ref_mpf _参考系统中固定大小内存池的状态 ref_mpl _参考系统中可变大小内存池的状态 ref_mtx _参考系统中Mutex的状态 ref_por _参考系统中Rendezvous Port的状态 ref_sem _参考系统中信号量的状态 ref_tsk _参考系统中任务的状态 rel_wai _解除任务的等待状态 rot_rdq _反转同优先级任务队列的执行时序rsm_tsk _强制解除任务的一次挂起 set_flg _设置Event Flag的

12、位模式 set_pow _设定系统的省电模式 sig_sem _释放信息量计数值 sta_tsk _启动任务 sus_tsk _挂起任务 ter_tsk _强行终止任务 wup_tsk _唤醒任务 2.2 软件构成2.2.1 开发条件Shell是作为一个T-Kernel下可以动态加载的应用程式运行的。2.2.2 开发期间开发期间:2010/3/15-2010/5/212.2.3 开发语言开发语言:C选择理由:C语言一直是嵌入式系统开发的最佳选择,基于C语言的开发有代码执行效率高,可移植性好,能访问硬件等特性,且T-Kernel提供的接口是C语言接口,因为整个项目我们都要用到T-Kernel的内

13、核接口,所以我们选择用C语言。2.2.4 开发使用的技术、知识除了要熟悉整个开发过程中用到的开发环境Eclipse外,这里我们还得熟悉的掌握T-Kernel操作系统的内核API,及T-Kernel操作系统中的任务(类似于进程)的调度关系,因为在这个项目中我们会创建三个主要的任务,分别负责管理,接受输入,处理输入的命令。当然任务间的通信也是我们这个项目中的一个非常重要的部分,输入的命令是通过T-Kernel中的一种通信机制把用户输入的命令传给别一任务进行解析,并作出相应的处理的。最后我们还要用到一个重要的技术就是嵌入式开发的调试技术,这是在嵌入式开发中不可少也不能少的一个部分。2.2.5 主要术

14、语介绍任务:并行程序执行的基本单元称为“任务”。一个任务的程序是顺序执行的;而多个不同任务的程序却是并行执行的。该并行处理只是概念上的现象。通过内核控制任务间的时间共享来实现并行执行。邮箱:邮箱是一个通过在系统(共享)内存空间传递消息实现同步和通信的对象,它包含一个用来发送消息的消息队列和一个用于等待消息的任务队列。事件标志:当任务要与多个任务同步时,就要用到事件标志。事件标志是一个用来实现同步的对象,由多个位组成,用来指示对应事件存在的标志,除了有用来指示对应事件存在的位模式外,事件标志还有一个等待事件标志的任务队列,当等待队列中的任务发现它等待的那个位被标记了,这时它会被从等待任务队列删除

15、并把它转换为就绪状态。消息缓冲区:消息缓冲区是一个通过传递大小可变的消息来实现同步和通信的对象。每个消息缓冲区有一个等待发送消息的消息队列,和一个等待接收消息的任务队列。在本项目中,输入的命令通过串口传给输入任务,输入任务与解析任务之间的同步和通信是通过消息缓冲区实现的。任务间同步:即任务间信息的同步(传递)。2.2.6 其他项目管理按照T-Engine实验室规定,采用SVN作为源码管理工具。流程按照天府软件园有限公司PEO中心开发流程进行。编码规范也使用天府软件园C代码编码规范。3 概要设计3.1 模块概述Shell主要的功能是通过串口输入命令,根据命令来调用T-Kernel的系统功能调用,

16、进而查询或者改变系统对象的状态。为了考虑以后重用、扩展、移植、本地化,在设计时考虑以下的思想:采用一个Main入口程序和三个任务的结构:Main主要负责启动一个管理任务,管理任务负责启动另外二个任务,其中一个任务是负责监听输入命令,格式化后,转为内部的消息,另外一个任务是负责根据消息,查询命令函数表,执行相应的功能查询单元。1. 采用命令函数表管理所有的命令和对应的参数检查函数、执行函数。2. 所有的命令功能按照任务、事件标志、信号量、内存,邮箱,周期,警报,通用等分类归入相应的单元。3. 采用携带时间戳的命令结构,便于统计命令的执行时间。4. 单独的语言单元保存错误信息和提示信息,这样容易进

17、行本地化。5. 单独设计错误处理机制,统一处理严重错误。6. 单独的扩展库单元保存所有针对标准C库函数和T-Kernel系统函数的扩展函数,共同函数必须设计成为可以重入的结构。7. 不使用系统静态资源和固定内存,便于可重加载。3.1.1 模块结构图本概要设计采用结构图的方法,逐层分解模块,一直到以文件为单位的单元,结构图参见下图:图3.13.1.2 模块中单元的详细描述模块详细描述见表3.1,该表对图3.1中的各个模块的单元类型,及对相应功能模块做了简要功能描述。表 3.1模块详细描述No.单元名单元类型功能描述1USH_Main普通Shell的入口,创建及启动USH_Kerl任务。2USH_

18、Kerl任务管理任务,启动时创建USH_Parse和USH_Input任务,退出时结束USH_Parse和USH_Input任务;创建任务间用的消息缓冲区3USH_Input任务获取用户的输入并格式化,并将格式正确的命令通过消息缓冲区发给任务USH_Parse进行处理。4USH_Parse任务接受消息缓冲区发送的用户命令,解析后,查询命令函数表,并执行命令功能函数。5USH_Tsk普通执行Task相关命令,包括ref_tsk、sta_tsk、del_tsk、sus_tsk、ter_tsk、wup_tsk、can_wup、rsm_tsk、frsm_tsk、rel_wai、chg_pri。6USH

19、_Flg普通执行事件标志相关命令,包括ref_flg、clr_flg、set_flg。7USH_Mpf普通执行固定内存池相关命令,包括ref_mpf。8USH_Cyc普通执行周期性处理相关命令,包括ref_cyc。9USH_Sem普通执行信号量相关命令,包括ref_sem、sig_sem。10USH_Mbx普通执行邮箱相关命令,包括ref_mbx。11USH_Alm普通执行警报处理相关命令,包括ref_alm。12USH_Comm普通执行其他一些命令,包括set_pow、h/?、prompt、sleep、radix、exit、date。13USH_Lang普通公共单元,定义所有错误提示和命令提

20、示等信息,便于本地化。14USH_Error普通公共单元,定义错误处理的机制,统一处理错误。15TKL_String普通公共单元,扩展T-Kernel下C标准库的字符串处理函数。16TKL_Time普通公共单元,扩展T-Kernel下C标准库的时间日期处理函数。17TKL_Grid普通公共单元,扩展命令行下表格输出函数。3.2 外部模块接口表外部接口的详细描述,见表3.2。表3-2 外部模块接口表No.接口ID接口接口类型接口内容描述1USH_O01ER main( W ac, B *av)函数Shell作为T-Kernel应用的入口函数2USH_O02wup_tsk USH_KerlID命令

21、通过命令唤醒USH_Kerl任务3.3 内部单元接口表内部接口的详细描述,见表3.3。表3.3 内部模块接口表No.接口ID接口接口类型接口内容描述1.1USH_I01void USH_Kerl(INT stacd,VP exinf)任务作为创建USH_Kerl任务的入口函数。1.2USH_I01ID USH_KerlInit(void)函数初始化USH_Kerl任务。2.1USH_I02void USH_Parse(INT stacd,VP exinf)任务作为创建USH_Parse任务的入口函数。2.2USH_I02ID USH_ParseInit(void)函数参数任务初始化3.1USH

22、_I03void USH_Input(INT stacd,VP exinf)任务作为创建USH_Input任务的入口函数。3.2USH_I03ID USH_InputInit(void)函数任务参数初始化4.1USH_I04ID USH_CommCreFlg(void)函数作为创建事件标志的函数。4.2USH_I04TMO USH_CommGetSlpTim(void)函数返回睡眠时间的入口函数。5.1USH_I05ER tk_snd_mbf( ID stacd, VP msg, INT msgsz, TMO tmout)消息缓冲区输入监听任务向缓冲区发送消息。5.2USH_I05INT tk

23、_rcv_mbf( ID stacd, VP msg, TMO tmout)消息缓冲区从消息缓冲区接收消息。6.1USH_I06-7.1USH_I07ER USH_TskDel( W ParCnt, UB *paParStr)函数删除任务的入口7.2USH_I07ER USH_TskChkDel( W ParCnt, UB *paParStr)函数核对删除任务的命令的参数7.3USH_I07ER USH_TskSta( W ParCnt, UB *paParStr)函数启动任务的入口7.4USH_I07ER USH_TskChkSta( W ParCnt, UB *paParStr)函数核对启

24、动任务的命令的参数7.5USH_I07ER USH_TskTer( W ParCnt, UB *paParStr)函数终止其他任务的入口7.6USH_I07ER USH_TskChkTer( W ParCnt, UB *paParStr)函数核对终止其他任务命令的参数7.7USH_I07ER USH_TskChkChgPri( W ParCnt, UB *paParStr)函数改变任务的优先级7.8USH_I07ER USH_TskChkChgPri( W ParCnt, UB *paParStr)函数核对改变任务的优先级的命令的参数7.9USH_I07ER USH_TskRef( W Par

25、Cnt, UB *paParStr)函数查询任务状态的入口7.10USH_I07ER USH_TskChkRef( W ParCnt, UB *paParStr)函数核对查询任务状态的命令的参数7.12USH_I07ER USH_TskWup( W ParCnt, UB *paParStr)函数唤醒其他任务的入口7.13USH_I07ER USH_TskChkWup( W ParCnt, UB *paParStr)函数核对唤醒其他任务的命令的参数7.14USH_I07INT USH_TskCanWup( W ParCnt, UB *paParStr)待添加的隐藏文字内容1函数取消唤醒其他任务的

26、入口7.15USH_I07INT USH_TskChkCanWup( W ParCnt, UB *paParStr)函数核对取消唤醒其他任务的命令的参数7.16USH_I07ER USH_TskRelWai( W ParCnt, UB *paParStr)函数释放等待状态的入口7.17USH_I07ER USH_TskChkRelWai( W ParCnt, UB *paParStr)函数核对释放等待状态的命令的参数7.18USH_I07ER USH_TskSus( W ParCnt, UB *paParStr)函数挂起其他任务的入口7.19USH_I07ER USH_TskChkSus( W

27、 ParCnt, UB *paParStr)函数核对挂起其他任务的命令的参数7.20USH_I07ER USH_TskRsm( W ParCnt, UB *paParStr)函数恢复挂起其他任务的入口7.21USH_I07ER USH_TskChkRsm( W ParCnt, UB *paParStr)函数核对恢复挂起其他任务的命令的参数7.22USH_I07ER USH_TskFrsm( W ParCnt, UB *paParStr)函数强制恢复挂起其他任务的入口7.23USH_I07ER USH_TskChkFrsm( W ParCnt, UB *paParStr)函数核对强制恢复挂起其他

28、任务的命令的参数7.24USH_I07ER USH_SemSig( W ParCnt, UB *paParStr)函数释放信号量的入口7.25USH_I07ER USH_SemChkSig( W ParCnt, UB *paParStr)函数核对释放信号量的命令的参数7.26USH_I07ER USH_SemRef( W ParCnt, UB *paParStr)函数查询信号量状态的入口7.27USH_I07ER USH_SemChkRef( W ParCnt, UB *paParStr)函数核对查询信号量状态的命令的参数7.28USH_I07ER USH_FlgClr( W ParCnt,

29、UB *paParStr)函数清除事件标志的入口7.29USH_I07ER USH_FlgChkClr( W ParCnt, UB *paParStr)函数核对清除事件标志的命令的参数7.30USH_I07ER USH_FlgRef( W ParCnt, UB *paParStr)函数查询事件标志的入口7.31USH_I07ER USH_FlgChkRef( W ParCnt, UB *paParStr)函数核对查询事件标志的命令的参数7.32USH_I07ER USH_FlgSet( W ParCnt, UB *paParStr)函数设置事件标志的入口7.33USH_I07ER USH_Fl

30、gChkSet( W ParCnt, UB *paParStr)函数核对设置事件标志的命令的参数7.34USH_I07ER USH_MbxRef( W ParCnt, UB *paParStr)函数查询邮箱状态的入口7.35USH_I07ER USH_MbxChkRef( W ParCnt, UB *paParStr)函数核对查询邮箱状态的命令的参数7.36USH_I07ER USH_MpfRef( W ParCnt, UB *paParStr)函数查询固定内存池大小的状态的入口7.37USH_I07ER USH_MpfChkRef( W ParCnt, UB *paParStr)函数核对查询

31、固定内存池大小状态的命令的参数7.38USH_I07ER USH_AlmRef( W ParCnt, UB *paParStr)函数查询警报处理程序的状态的入口7.39USH_I07ER USH_AlmChkRef( W ParCnt, UB *paParStr)函数核对查询警报处理程序状态的命令的参数7.40USH_I07ER USH_CycRef( W ParCnt, UB *paParStr)函数查询周期性处理程序的状态的入口7.41USH_I07ER USH_CycChkRef( W ParCnt, UB *paParStr)函数核对查询周期性处理程序的状态的命令的参数7.42USH_

32、I07ER USH_TskGetReg( W ParCnt, UB *paParStr)函数获得任务寄存器的内容的入口7.43USH_I07ER USH_TskGetChkReg( W ParCnt, UB *paParStr)函数核对获得任务寄存器的内容的命令的参数7.44USH_I07ER USH_TskRotRdq( W ParCnt, UB *paParStr)函数翻转就绪队列的入口7.45USH_I07ER USH_TskRotChkRdq( W ParCnt, UB *paParStr)函数核对翻转就绪队列的命令的参数7.46USH_I07ER USH_TskSetPow( W ParCnt, UB *paParStr)函数设置电源模式的入口7.47USH_I07ER USH_TskSetChkPow( W ParCnt, UB *paParStr)函数核对设置电源模式的命令的参数7.48USH_I07ER USH_CommChkPar( W ParCnt, UB *paParStr)

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 办公文档 > 其他范文


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号