烽火科技Vxworks嵌入式编程基础邓国旭烽火科技实时嵌入式系统•嵌入式系统:–由CPU控制,即自带CPU–相对于常见的pc而言,不对用户提供开发环境,用户与系统交互的唯一接口就是系统提供给用户的应用;–提供功能通常带有针对性,大多为专用系统;–手机,医疗设备,微波炉,mp3……•实时嵌入式系统:–实时性:任务切换时间、抢占时间、中断等待时间、信号量延迟时间、死锁解脱时间、任务间消息传递延迟、数据报吞吐量–小型化、可裁剪:系统资源有限–强稳定性:一旦运行不需要人过多干预–固化代码:操作系统和应用软件代码固化在嵌入式系统ROM中–弱交互性:工作过程不需人干预烽火科技嵌入式系统开发•交叉编译:在某一体系结构的宿主机上为另一体系结构的目标板编译可运行的目标代码。即编译与运行不在同一地方。•宿主机(host):编写代码和编译•目标机(target):调试和执行程序烽火科技VxWorks•VxWorks:–美国风河公司(WindRiverSystem)推出的一种嵌入式实时操作系统。–强实时性、微内核设计、可裁剪、可移植、高可靠•VxWorks系统功能:–WindKernel–ANSIC/POSIX–I/O系统–文件系统–TCP/IP网络协议栈–BSP开发包:提供BSP模块、驱动程序模板和BSP测试工具包–WDB(WindDebugAgent):支持交叉调试–……烽火科技BSP•BSP(BoardSupportPackage)–开发嵌入式应用时系统开发商提供的各种驱动支持库–VxWorks:OS的驱动程序–VxWorks提供的大部分功能模块与硬件无关,为使VxWorks能运行于不同的处理器体系结构上,必须在功能模块与硬件之间加入一层软件,并对这层软件规定标准接口,这层软件即为BSP–提供对硬件进行的描述性操作–提供对目标板的初始化、中断管理以及一些简单的驱动程序–最好的情况下,OS与驱动程序的移植只需要更换相应平台下的BSP支撑库–《TornadoBSPDeveloper’sKitforVxWorks》烽火科技VxWorks系统结构烽火科技Tornado集成开发环境•Tornado:–基于VxWorks操作系统的嵌入式软件集成开发环境。–给嵌入式系统开发人员提供了一个不受目标机资源限制的超级开发和调试环境。•Tornado包含以下三部分:–①运行在宿主机和目标机上的强有力的交叉开发工具和实用程序;•文本编辑器•GNU和DiabC/C++编译器•调试工具:WindShell,Browser,WindView…•VxSim系统模拟器:VxWorks提供的在实验与测试环境下仿真VxWorks目标机的程序,无需硬件的支持–②运行在目标机上的高性能、可裁剪的实时操作系统VxWorks;即为编译生成的目标机上可执行代码镜像(image),内含os–③连接宿主机和目标机的多种通讯方式,如:以太网,串口线,ICE或ROM仿真器等。烽火科技使用Tornado创建工程•创建工程.exe•WorkSpace&WorkProject–每一个工程都需要有一个WorkSpace来保存一些相关的环境变量;•BootableVsDownable:–前者表明建立一个新的VxWorks操作系统,该工程是基于某个BSP生成的镜像,它包含了必须的VxWorks的内核、组件以及BSP,并且应用程序可以静态包含在工程中,也可以静态链接已编译好的应用工程模块。开发者可以根据自己的需求进行适当的配置,添加、删除VxWorks的组件,设置所选组件的运行参数等。–后者顾名思义,应用模块可以以静态链接的方式编译至VxWorks镜像工程中,还可以在VxWorks运行之后,通过网络将将应用模块(.out格式)下载到目标板,并与VxWorks镜像进行链接。在单独对某个模块进行调试时,我们常常会用到这种动态链接的方法。烽火科技VxSim的HelloWorld(一)烽火科技VxSim的HelloWorld(二)•选择ABSP(板级支持包)在下拉菜单中选择simpc•打开文件usrAppInit.c(它的函数usrAppInit是应用的入口点),添加HelloWorld打印语句,保存文件。烽火科技VxSim的HelloWorld(三)烽火科技VxSim的HelloWorld(四)•最后:查看新弹出的对话框(VxWorksSimulator),^_^,可以看到输出的HelloWorld•此时,还会弹出了一个VxSimLaunch的界面,这是主机用来连接目标机的。点击OK。如果正确安装Tornado并配置正确的话,此时桌面右下角会出现的图标(如果出现问题,会出现的图标),点击它可以看到TargetServer是否正常工作。烽火科技Tornado工具•CrossWind:–源程序(C或C++以及汇编程序等)的调试工具•Browser:–可对系统对象(任务、消息队列、信号量等)和存储器使用情况进行观察的浏览器。–可以方便地监视用户的目标系统。–Browser汇总了应用进程,内存消耗和一个目标内存的映射。通过Browser,用户可以观察信号量、消息队列、内存分配、看门狗计时器、堆栈使用情况、目标CPU使用率、对象模块结构和符号表以及每个任务的详细信息。•WindShell:–提供从宿主机到目标机之间的一个命令shell。–允许用户调用内存中的应用程序模块或是VxWorks模块中的任何例程。•WindView:–非常出色的系统可视诊断和分析工具。可非常容易地观察各任务,中断程序之间的相互作用。•VxSim:–快速原型仿真器。可在硬件设备未完成之前,在宿主机上对应用程序进行仿真分析。烽火科技VxWorks程序设计•任务(Task)–在VxWorks中,任务是一段独立运行的程序,类似于Linux中的进程。–从系统的角度看,任务是竞争系统资源的最小运行单元。任务可以使用或等待CPU、I/O设备及内存空间等系统资源,并独立于其他任务。–VxWorks实时内核Wind提供了基本的多任务环境,因此当系统运行多个任务时,从表面上看多个任务正在同时执行,而实际上系统内核是根据某一调度策略让它们交替运行。–系统调度器使用任务控制块(TCB)的数据结构来管理任务调度功能。每一个任务都与一个TCB关联。TCB包括了任务的当前状态、优先级、要等待的事件或资源、任务码的起始地址、初始堆栈指针等信息。–任务编程:任务创建taskSpawn、任务删除taskDelete、任务控制taskSuspend/taskDelay等•WindShell–允许用户调用内存中的应用程序模块或是VxWorks模块中的任何例程烽火科技创建任务•在usrAppInit函数中添加函数userMain(),作为自己应用程序的入口函数。•编写一个C文件(uesr.c),内容如下:烽火科技编译代码及运行•选择AddFiles,添加uesr.c到工程中:•编译并启动:烽火科技启动WindShell•在Launch工具栏中选择,这时候就可以看到shell的界面:•输入i命令,回车,,即可以查看到我们起的任务tTick的有关信息:烽火科技WindShell常用命令•i:显示所有的任务信息•Tt():显示一个任务的函数栈的调用状态•Ti():显示一个任务的tcb信息•Sp():启动一个任务•Ts():挂起一个任务•Tr():恢复一个任务•Td():删除某个任务•memShow:显示系统内存信息•checkStack:查看指定或所有任务的堆栈大小和使用率烽火科技Tornado中Host与target通信TargetServer以进程的形式(tgtsvr.exe)运行在Windows主机上,而TargetAgent则以VxWorks的一个任务(tWdbTask)运行在目标机上,两者通常使用网络进行通讯,但也可以使用其他通讯方式。TargetServe与TargetAgent间使用WDB(WindDebug)协议进行通信,这就好比一座桥梁,将目标机与主机上的Tornado开发工具联系在一起。烽火科技开发板开发嵌入式程序•操作系统的制作与下载–修改Config.h–制作BSP及bootrom–制作操作系统–配置FTPServer–启动超级终端–引导和下载操作系统•应用程序的编制和调试烽火科技操作系统的制作与下载修改Config.h•VxWorks的缺省配置参数由tornado\target\config\all目录中的configAll.h决定,如第528行开始通信路径的配置•对于某一目标板特定的配置参数,如ads860,使用tornado\target\config下相应目录中的config.h,下面以ads860板为例•如果没有相应目录,可定制,如建立8240目录,其文件代码由BSP开发人员编写烽火科技操作系统的制作与下载修改Config.h•config.h首先定义BSP版本,然后includeconfigAll.h•缺省下载调试口为10M网口,对应代码为–#undefFADS_860T•如改用100M网口下载调试,将该行改为–#defineFADS_860T烽火科技操作系统的制作与下载修改Config.h•10M网口使用cpm(0,0),100M网口使用motfec(0,0)•host:后跟VxWorks操作系统在主机的存放路径,h指主机IP地址,e指目标板IP地址,u指用户名,pwd指密码•实例:使用10M网口,VxWorks在主机D:\,主机地址10.16.17.1,目标板地址10.16.17.2,账号及密码均为tornado,其代码为:•“cpm(0,0)host:d:/vxWorksh=10.16.17.1e=10.16.17.2u=tornadopwd=tornado”烽火科技操作系统的制作与下载修改Config.h•如采用串口调试,可增加下列代码•#undefWDB_COMM_TYPE•#defineWDB_COMM_TYPEWDB_COMM_SERIAL•#undefWDB_TTY_CHANNEL•#defineWDB_TTY_CHANNEL0•#undefCONSOLE_BAUD_RATE•#defineCONSOLE_BAUD_RATE115200•#undefWDB_TTY_DEV_NAME•#defineWDB_TTY_DEV_NAME/tyCo/0•#undefWDB_TTY_BAUD•#defineWDB_TTY_BAUD115200/*defaultbaudrate*/烽火科技操作系统的制作与下载Buildbootrom•修改BSP后,应生成对应的bootrom•在Tornado中选Build-BuildBootROM•BSP可选择ads860•Image一般选择bootrom.hex,仿真时选择bootrom_uncmp烽火科技操作系统的制作与下载烧制bootrom•目的:将build成功的bootrom烧制到Flash中•FADS860板通过配套的ADI卡烧制•按照ADI卡相应的8bug程序中的readme,安装ADI卡•在DOS方式下键入:mpc8bugxy烽火科技操作系统的制作与下载验证bootrom•连接主机与目标板的串口线•启动和配置FTPServer(方法后面介绍)•选择Tornado2-VxWorksCOM1/COM2,启动超级终端•超级终端中选文件-属性-配置,设置正确的目标板波特率•目标板上电,检查终端是否能正确回显,显示参数与BSP配置是否一致烽火科技操作系统的制作与下载创建操作系统工程•选File-NewProject-CreateabootableVxWorksimage•在step1键入Name和Location目录,选择Workspace•在step2选择相应的BSP(如ads860),仿真选simpc烽火科技操作系统的制作与下载选择操作系统组件•在Workspace窗口的相应Project中,点击VxWorks•选择所需组件,击右键,选Include添加,选Exclude删除•例如需要使用