一、[嵌入式技术]如何规范写嵌入式系统开发文档_嵌入式开发要求
一个系统设计完成以后,它不应该仅仅是一些源代码,还应该包括各种各样的开发文档
这对以后自己对系统的维护和升级都有很好的参考作用
一个系统开发完成,它究竟应该包含那些文档,这些文档一般是怎么完成的,应该包含哪些内容?这就是系统开发的规范化问题
系统开发的规范化不仅有利于自己,也有利于公司,更有利于新手
规范化的设计让工程师工作更高效,这已经是不用争论的事实
现在在大型软件工程开发方面,这已经做得相当好
但在单片机和嵌入式系统的开发方面,规范化的工作却有待我们共同探讨
在国内,一些公司的研发人员也有一种误导——快写代码,快让我看见功能,不要你做其他的,完成功能就好
这些都把我们的设计导入一种误区:大部分时间都在写代码,改代码
嵌入式实时系统复杂度的提高,设计工程师在定义和分析系统初始要求时必须认真考虑软硬件的协同关系
通常设计工程师还必须权衡系统的灵活性、速度、成本、计划和可用工具之间的关系
本文打算描述嵌入式系统和实时系统的关键特性,并探讨在选择或开发硬件和软件组件的基础上开发高效嵌入式系统的解决方案,同时详细说明嵌入式系统和实时系统开发所特有的关键工艺技术
我所知的realtime-uml的设计软件:TNI公司的Embedded,Rational:RoseRTiLogix::Artisan:Tau
TNI公司的Embedded全流程解决方案,涵盖了整个嵌入式控制软件设计的全部过程:从用户需求、规格说明、设计、代码生成、仿真校验直到验收
在设计的最初阶段使用可执行的(形式化的)、可视化的规格说明书和用户进行沟通,消除设计人员和用户之间的歧义
利用仿真对设计进行校验测试,并在整个设计过程中进行递进式的校验,在设备安装之前发现可能存在的大量设计错误和问题,大大缩短现场调试的时间支持功能性设计,图形化IEC61131-3语言,符合EN50128安全标准重复使用设计自动生成设计文档容易使用,快速建模为各种软、硬件平台自动生成C代ROSE进行分析设计RoseRT是Rational在收购objecttime以后的推出的,该工具主要是基于一个叫做ROOM的模式,所有可执行
其好坏我也感受不抬出来
(ilogix的道先生对ROOM不太赞同)RoseRT的界面感觉比较复杂,代码生成也可以,但效率无法评价
仅提供了系统的动态和静态模型文档
Rhapsody目前国外好多大公司都是用Rhapsody进行嵌入系统的建模,进行软件设计的
Rhapsody是一个模型驱动的开发环境,它以UML2
0为基础,使大小不同的项目都能够通过可视化建模的方法分析、设计、实现和测试自己的工作,构建和配置实时嵌入式应用
Rhapsody专为嵌入式市场的特殊需求设计和优化,包括实时系统的行为语义,实时操作系统的支持,无操作系统的实时应用支持,遗产代码的逆向工程、设计级的调试、高效的代码自动生成(C、C、Ada、Java)和文档自动生成等
很不错的工具,可以把UML图直接转换成C或C代码
但它也会在系统中引入它的一个程序框架,用以支持顺序图、状态图的运行、调式和仿真
它带来的好处显而易见,但同时,它对很多嵌入式应用又形成阻力
例如,如果你新增功能是在原来的已有的过程式软件包上打个补丁,新的框架和原系统的怎么配合?那么你得真正消化和吸收这个附加的框架,这个难度应该不底于探索MFC结构
对于一个完全新的项目,Rhapsody很不错
对于扩功能打补丁的项目,三思呀
不知道RoseReal-Time在这方面的表显如何?Rhapsody有很多diagrams,设计人员直接通过画图,codegeneration就生成优质代码,很有意思
Rhapsody真正把开发人员与设计人员区别开来,这就要求设计人员完全按照软件工程思想来实施,这对项目无疑是个很好的维护可以有N多的OSadapter,方便移植
总的来说对于开发上层应用的项目来说
二、嵌入式方向和软件开发方向
1.说在前面
“嵌入式软件开发”包括“嵌入式应用开发”和“嵌入式驱动开发”,本站主要关注的嵌入式开发内容为“嵌入式驱动开发”,继续细化的方向为“嵌入式Linux驱动开发”,知识点我们首先可以从方向的名字关键字上有所理解:嵌入式,Linux,驱动。
“嵌入式”代表的是产品的类型,它是相对于PC来说的,具体的概念,本站已经说的非常清楚了,这里就不累述了。具体请看关注新人系列的职业规划帖子。
“Linux”代表的是嵌入式产品中使用的软件操作系统,也就是说我们选择Linux操作系统作为主要学习对象。你可以理解为它相对于PC机上的windows操作系统。
“驱动”代表的是Linux操作系统开发中的一个方向“驱动开发”,说明我们当前关注的是linux驱动开发,而不是linux应用开发。你可以理解为相对于PC中的windows操作系统的驱动,我们用PC电脑的时候,有些时候你不是需要自己安装某些驱动吗,就是这个意思。
总结一下,所以我们现在关注的开发内容归根到底就是“驱动“开发,不过这个驱动是”Linux“操作系统的驱动,而这个”linux“操作系统主要是跑
在”嵌入式“产品上的。所以我们开发的主要知识点就是集中在”Linux驱动“和
”嵌入式“两个概念上来。我们知道了知识点概念的前因后果之后,开始对这两个知识点的开发细节做进一步细化。
所谓”嵌入式“开发:
我们知道概念上它是相对于PC开发,前面的叙述得知我们采用的操作系统为linux,那么我的问题来了:如果PC机上也跑的是Linux操作系统,基于PC的linux开发其实和基于嵌入式系统的linux开发基本开发思路是一样的,只不过开发过程中的编译,
烧录方式有差别。下面我们就说说这两种开发方式的异同点,因为PC对于我们来说不陌生,那么在PC机上安装个ubuntu系统也应该是大家都这么玩过。既
然这两种开发方式只是编译和烧录有区别的话,那么我们就很容易通过PC机上安装个ubuntu来快速认识嵌入式linux系统的开发了。
PC机linux开发:
如果你有个PC,并且安装了ubuntu,假设我们PC上有SD卡控制器,但是ubuntu中的linux并没有这个型号的SD卡驱动,那么如果我们想开发个PC机上SD卡驱动,我们就可以分以下几步开发:
(1)下载相应的ubuntu版本的linux内核源码到本PC机。
(2)如果该linux代码里没有该SD卡型号的驱动,那么就需要我们针对该SD卡型号写基于linux的SD卡驱动,这一步也就是我们主要的”驱动“开发任务。
(3)针对linux内核,直接在本机上make menuconfig,配置选择该型号的SD驱动支持,前提是你已经开发好了SD卡驱动了。
(4)使用本机ubuntu上GCC编译器直接编译内核:make。
(5)烧录内核:直接在本机上make modules_install, make install.这个动作将把相应的驱动程序拷贝到ubuntu的boot目录,重启的时候SD卡驱动就会生效了。
嵌入式系统linux开发:
如果你有个s3c6410,2410的开发板,或者任何一个嵌入式arm的开发板,并且安装了Linux,假设我们板子上有SD卡控制器,但是用的linux并没有这个型号的SD卡驱动支持,那么如果我们想开发个基于开发板机上SD卡驱动,我们就可以分以下几步开发:
(1)拿到相应的版本的linux内核源码并放置到开发用的PC机。
(2)如果该linux代码里没有该SD卡型号的驱动,那么就需要我们针对该SD卡型号写基于linux的SD卡驱动,这一步也就是我们主要的”驱动“开发任务。
(3)针对linux内核,直接在开发机上make menuconfig ARCH=arm,配置选择该型号的SD驱动支持,前提是你已经开发好了SD卡驱动了。
(4)使用开发PC机ubuntu上已经安装好了的arm-linux-GCC编译器直接编译针对开发板的内核:make ARCH=arm。
(5)烧录内核:将编译后生成的内核文件通过串口现在,u**下载,tftp等下载到目标开发板子上面,重启开发板,看到SD卡驱动生效。
大家可以看到我们关心的两个知识点中的“驱动”开发,主要是第(2)项在PC上和嵌入式上基本是相同的。另一“嵌入式”知识点是和PC上有区别的,主要区别在于:编译和烧录方式。
所以我们对于“嵌入式linux驱动”开发的知识点总结,主要是linux“驱动”的开发和“嵌入式”系统的烧录编译方法。
2.知识点总结
嵌入式系统的烧录和编译知识点:
(1)PC服务器的准备,安装ubuntu系统
(2)交叉编译器的安装,编译方法。
(3)下载到目标板,串口烧录,u**下载烧录,tftp网络烧录。
请大家仔细阅读本站的跟我学系列贴子,通读之后我相信“嵌入式”的这个知识点就已经完整的掌握啦。
http://mcuos.com/thread-8166-1-1.html
Linux驱动开发知识点:
(1)C语言基础-基础知识点
(2)操作系统基础理论-基础知识点
(3)简单的linux命令操作-基础知识点,有没有玩过ubuntu或者其他发行版?有没有使用过命令行做一些事情?
(4)设备的文件节点-必备知识点,/dev/下面节点的意义,mknod创建dev文件节点。
(5)简单驱动的modules的编写和加载-必备知识点, in**od, modprobe, rmmod命令的意义,为模块传递参数。
(6)字符型驱动编写-必备知识点
(7)驱动基本调试方法-必备知识点,printk打印驱动信息,dmesg打印kernel信息,proc,sys目录的意义。
(8)共享资源的同步机制-必备知识点,资源临界区概念,自旋锁,信号量,等待队列的使用。
(9)硬件IO的访问-必备知识点,ioremap,memory map,writel,readl读写接口。
(10)中断的request和中断号的分配-必备知识点。
(11)PCI,AMBA总线知识-必备知识点。
(12)时间管理-必备知识点,udelay,mdelay长延时和短延时,jiffies,os timer原理。
(13)块设备驱动程序的编写-必备知识点。
(14)Kconfig和Makefile,添加驱动到内核-必备知识点。
(15)一个比较大型的驱动程序学习-选学知识点,选取任何一个eMMC,SD,USB等比较大型的驱动学习。
3.知识点速成
o**oy正在针对知识点进行梳理,目前速成教程已经编纂完毕,速成班招生进行中。。。详情请参考:http://mcuos.com/thread-9692-1-1.html,也可以QQ 82475491联系o**oy进行咨询交流。
三、[嵌入式技术] 如何规范写嵌入式系统开发文档
一个系统设计完成以后,它不应该仅仅是一些源代码,还应该包括各种各样的开发文档。这对以后自己对系统的维护和升级都有很好的参考作用。一个系统开发完成,它究竟应该包含那些文档,这些文档一般是怎么完成的,应该包含哪些内容?这就是系统开发的规范化问题。系统开发的规范化不仅有利于自己,也有利于公司,更有利于新手。规范化的设计让工程师工作更高效,这已经是不用争论的事实。现在在大型软件工程开发方面,这已经做得相当好。但在单片机和嵌入式系统的开发方面,规范化的工作却有待我们共同探讨。在国内,一些公司的研发人员也有一种误导——快写代码,快让我看见功能,不要你做其他的,完成功能就好。这些都把我们的设计导入一种误区:大部分时间都在写代码,改代码。嵌入式实时系统复杂度的提高,设计工程师在定义和分析系统初始要求时必须认真考虑软硬件的协同关系。通常设计工程师还必须权衡系统的灵活性、速度、成本、计划和可用工具之间的关系。本文打算描述嵌入式系统和实时系统的关键特性,并探讨在选择或开发硬件和软件组件的基础上开发高效嵌入式系统的解决方案,同时详细说明嵌入式系统和实时系统开发所特有的关键工艺技术。我所知的realtime-uml的设计软件: TNI公司的ControlBuild Embedded, Rational:Rose RT iLogix:Rhapsody Artisansw:Artisan Studio Telelogic:Tau. TNI公司的ControlBuild Embedded全流程解决方案,涵盖了整个嵌入式控制软件设计的全部过程:从用户需求、规格说明、设计、代码生成、仿真校验直到验收。在设计的最初阶段使用可执行的(形式化的)、可视化的规格说明书和用户进行沟通,消除设计人员和用户之间的歧义。利用仿真对设计进行校验测试,并在整个设计过程中进行递进式的校验,在设备安装之前发现可能存在的大量设计错误和问题,大大缩短现场调试的时间支持功能性设计,图形化IEC61131-3语言,符合EN50128安全标准重复使用设计自动生成设计文档容易使用,快速建模为各种软、硬件平台自动生成C代 ROSE进行分析设计 RoseRT是Rational在收购objecttime以后的推出的,该工具主要是基于一个叫做ROOM的模式,所有可执行<<active的对象都必须是一个叫做capsule的子类。其好坏我也感受不抬出来。(ilogix的道先生对ROOM不太赞同) RoseRT的界面感觉比较复杂,代码生成也可以,但效率无法评价。仅提供了系统的动态和静态模型文档。 Rhapsody目前国外好多大公司都是用 Rhapsody进行嵌入系统的建模,进行软件设计的。 Rhapsody是一个模型驱动的开发环境,它以UML2.0为基础,使大小不同的项目都能够通过可视化建模的方法分析、设计、实现和测试自己的工作,构建和配置实时嵌入式应用。Rhapsody专为嵌入式市场的特殊需求设计和优化,包括实时系统的行为语义,实时操作系统的支持,无操作系统的实时应用支持,遗产代码的逆向工程、设计级的调试、高效的代码自动生成(C、C++、Ada、Java)和文档自动生成等。很不错的工具,可以把 UML图直接转换成C++或C代码。但它也会在系统中引入它的一个程序框架,用以支持顺序图、状态图的运行、调式和仿真。它带来的好处显而易见,但同时,它对很多嵌入式应用又形成阻力。例如,如果你新增功能是在原来的已有的过程式软件包上打个补丁,新的框架和原系统的怎么配合?那么你得真正消化和吸收这个附加的框架,这个难度应该不底于探索MFC结构。对于一个完全新的项目,Rhapsody很不错。对于扩功能打补丁的项目,三思呀。不知道Rose Real-Time在这方面的表显如何? Rhapsody有很多 diagrams,设计人员直接通过画图,code generation就生成优质代码,很有意思. Rhapsody真正把开发人员与设计人员区别开来,这就要求设计人员完全按照软件工程思想来实施,这对项目无疑是个很好的维护可以有N多的 OS adapter,方便移植.总的来说对于开发上层应用的项目来说
如果你还想了解更多这方面的信息,记得收藏关注本站。