




免费预览已结束,剩余39页可下载查看
下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
ushell项目开发目 录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函数查找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已成为日本电子产业现行的基础构架,这一系统已经安装到了全球30 亿到40 亿台家用电子产品当中,远远超过windows的普及程度。尽管在个人电脑领域知名度几乎为零,但tron现在却占据了全球微处理器操作系统市场上大约60%的份额,成为低价高性能嵌入式系统的典范。但随着嵌入式系统的高功能、网络化,软件开发和调试都变得非常复杂。tron相关软件的可移植性、可重用性出现了问题。为了实现更为理想的实时操作系统的嵌入式计算结构,出现了t-engine项目计划,为了更进一步实现标准化,基于tron的 t-kernel由此而来。t-engine是为了在短时间内高效开发实时嵌入式系统而设计的,由标准化硬件结构和标准开源实时操作系统核心(t-kernel)组成的嵌入式标准开放平台。在t-engine开发过程中,搭载的cpu为可变的,而规定了其他硬件结构规范、操作系统核心界面规范、对象数据格式规范等要素,使tron在标准化的基础结构上,具备充分的外围资源及开发环境。这个开放式标准平台结构的最大目标是将cpu从基础结构中独立出来,使在t-kernel上开发的中间件可不依存于cpu结构而移植。t-kernel是运行于标准t-engine/t-engine硬件平台上的标准实时操作系统核心软件。与其他开源软件所不同的是,它是单一源代码软件,具有强标准化特点,以保证其作为各种中间件发布的平台。操作系统与外部最主要的接口就叫做shell。shell是操作系统最外面的一层。它不属于内核部分,而是在核心之外。shell管理使用者与操作系统之间的交互:等待使用者输入,向操作系统解释使用者的输入,并且处理各种各样的操作系统的输出结果。在当今嵌入式开发过程中,如何提高开发效率,缩短开发周期至关重要。在t-kernel在嵌入式领域运用如此广泛,而在设计与研发当中,如果有与t-kernel相关的开发研究调试运用工具无疑会给开发者带来便捷,提高开发效率,同时对于想要学习和研究的开发者,是否能通过一种便捷实践的方式来学习t-kernel,而ushell能满足这些要求,ushell是基于t-kernel操作系统上的一个命令行应用程序,主要功能是通过串口输入命令,根据命令来查询和修改t-engine开发板上t-kernel中的任务、邮箱、事件标志、信号量、内存池系统资源状态。这样在开发过程中随时查询修改相关信息,可方便地进行调试,缩短开发周期从而在开发过程中提高开发效率。同时对于学习研究t-kernel的开发者来说,不是单从理论方面来认知它,需要理论学习的同时加以实践,而ushell能为开发者提供实践途径,从而为开发者提高学习和研究t-kernel的效率。2 需求分析2.1 环境需求2.1.1 硬件环境:在该项目中,使用的硬件是atmel公司的at91sam9261开发板,主板为单板设计,cpu直接集成在主板上。at91sam9261是以 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中的任务、邮箱、事件标志、信号量、内存池系统资源状态。为了调试和烧制可执行文件到开发板的flash上我们还需要j-link。2.1.2 软件环境:at91sam9261开发板上加载的是嵌入式实时操作系统tkernel。为了把我们的t-kernel操作系统和我们开发的程序集成到一个可执行文件上,我们需要专门的sdk,其中集成了t-kernel操作系统,同时包含了t-kernel操作系统的内核api的接口,出了这些当然其中还包含有一部分标准c库。除了比较重要的sdk外,我们需要一个集成开发环境,该开发环境要具备两个条件,第一,它能加载我们的sdk,第二,它的编译器要是gcc arm编译器。这里我们使用的是具有强大插件功能eclipse集成开发环境,当然其中还得安装一些插件。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进制的数字串(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 _参考系统中event 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的位模式 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的内核接口,所以我们选择用c语言。2.2.4 开发使用的技术、知识除了要熟悉整个开发过程中用到的开发环境eclipse外,这里我们还得熟悉的掌握t-kernel操作系统的内核api,及t-kernel操作系统中的任务(类似于进程)的调度关系,因为在这个项目中我们会创建三个主要的任务,分别负责管理,接受输入,处理输入的命令。当然任务间的通信也是我们这个项目中的一个非常重要的部分,输入的命令是通过t-kernel中的一种通信机制把用户输入的命令传给别一任务进行解析,并作出相应的处理的。最后我们还要用到一个重要的技术就是嵌入式开发的调试技术,这是在嵌入式开发中不可少也不能少的一个部分。2.2.5 主要术语介绍任务:并行程序执行的基本单元称为“任务”。一个任务的程序是顺序执行的;而多个不同任务的程序却是并行执行的。该并行处理只是概念上的现象。通过内核控制任务间的时间共享来实现并行执行。邮箱:邮箱是一个通过在系统(共享)内存空间传递消息实现同步和通信的对象,它包含一个用来发送消息的消息队列和一个用于等待消息的任务队列。事件标志:当任务要与多个任务同步时,就要用到事件标志。事件标志是一个用来实现同步的对象,由多个位组成,用来指示对应事件存在的标志,除了有用来指示对应事件存在的位模式外,事件标志还有一个等待事件标志的任务队列,当等待队列中的任务发现它等待的那个位被标记了,这时它会被从等待任务队列删除并把它转换为就绪状态。消息缓冲区:消息缓冲区是一个通过传递大小可变的消息来实现同步和通信的对象。每个消息缓冲区有一个等待发送消息的消息队列,和一个等待接收消息的任务队列。在本项目中,输入的命令通过串口传给输入任务,输入任务与解析任务之间的同步和通信是通过消息缓冲区实现的。任务间同步:即任务间信息的同步(传递)。2.2.6 其他项目管理按照t-engine实验室规定,采用svn作为源码管理工具。流程按照天府软件园有限公司peo中心开发流程进行。编码规范也使用天府软件园c代码编码规范。3 概要设计3.1 模块概述shell主要的功能是通过串口输入命令,根据命令来调用t-kernel的系统功能调用,进而查询或者改变系统对象的状态。为了考虑以后重用、扩展、移植、本地化,在设计时考虑以下的思想:采用一个main入口程序和三个任务的结构:main主要负责启动一个管理任务,管理任务负责启动另外二个任务,其中一个任务是负责监听输入命令,格式化后,转为内部的消息,另外一个任务是负责根据消息,查询命令函数表,执行相应的功能查询单元。1. 采用命令函数表管理所有的命令和对应的参数检查函数、执行函数。2. 所有的命令功能按照任务、事件标志、信号量、内存,邮箱,周期,警报,通用等分类归入相应的单元。3. 采用携带时间戳的命令结构,便于统计命令的执行时间。4. 单独的语言单元保存错误信息和提示信息,这样容易进行本地化。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_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_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普通公共单元,定义所有错误提示和命令提示等信息,便于本地化。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命令通过命令唤醒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_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_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)函数核对启动任务的命令的参数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 parcnt, 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)函数取消唤醒其他任务的入口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 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)函数核对强制恢复挂起其他任务的命令的参数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, 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_flgchkset( w parcnt, ub *paparstr)函数核对设置事件标志的命令的参数7.34ush_i07er ush_mbxref( w parc
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 【+高中语文+】《装在套子里的人》课件+统编版高一语文必修下册
- 内蒙古警察职业学院《高级日汉翻译》2023-2024学年第一学期期末试卷
- 唐山科技职业技术学院《语言学概论专题》2023-2024学年第一学期期末试卷
- 防欺诈主题班会课件
- 昭通市绥江县文职辅警招聘考试真题
- 贵州企业招聘2024贵阳市黔爽城市公共交通有限公司招聘40人笔试参考题库附带答案详解
- 浙江国企招聘2025温州市鹿通文化旅游有限公司招聘12人笔试参考题库附带答案详解
- 防恐防爆课件视频教学
- 国网江西省电力有限公司2025年高校毕业生招聘280人(第二批)笔试参考题库附带答案详解
- 2025福建厦门国贸集团股份有限公司校园招聘27人笔试参考题库附带答案详解
- 宣传册设计教学课件
- 授权查档的授权委托书
- 【基于Java的水果商城购物系统设计与实现10000字(论文)】
- 置业顾问销售逼单技巧培训
- 医院处方笺模板
- 【工程项目施工阶段造价的控制与管理8100字(论文)】
- XX学校推广应用“国家中小学智慧教育平台”工作实施方案
- 非遗文化创意产品设计 课件全套 第1-5章 概述- 非遗文创产品设计案例解析
- 法律尽职调查所需资料清单
- 幼儿园中班安全教育活动《紧急电话的用途》
- 118种元素原子结构示意图
评论
0/150
提交评论