1、Vxworks嵌入式编程基础邓国旭实时嵌入式系统 嵌入式系统:由CPU控制,即自带CPU 相对于常见的pc而言,不对用户提供开发环境,用户与系统交互的唯一接口就是系统提供给用户的应用;提供功能通常带有针对性,大多为专用系统;手机,医疗设备,微波炉,mp3 实时嵌入式系统:实时性:任务切换时间、抢占时间、中断等待时间、信号量延迟时间、死锁解脱时间、任务间消息传递延迟、数据报吞吐量 小型化、可裁剪:系统资源有限 强稳定性:一旦运行不需要人过多干预 固化代码:操作系统和应用软件代码固化在嵌入式系统ROM中 弱交互性:工作过程不需人干预嵌入式系统开发 交叉编译:在某一体系结构的宿主机上为另一体系结构的
2、目标板编译可运行的目标代码。即编译与运行不在同一地方。宿主机(host):编写代码和编译 目标机(target):调试和执行程序VxWorks VxWorks:美国风河公司(Wind River System)推出的一种嵌入式实时操作系统。强实时性、微内核设计、可裁剪、可移植、高可靠 VxWorks系统功能:Wind Kernel ANSI C/POSIX I/O系统 文件系统 TCP/IP网络协议栈 BSP开发包:提供BSP模块、驱动程序模板和BSP测试工具包 WDB(Wind Debug Agent):支持交叉调试 BSP BSP(Board Support Package)开发嵌入式应用
3、时系统开发商提供的各种驱动支持库 VxWorks:OS的驱动程序 VxWorks提供的大部分功能模块与硬件无关,为使VxWorks能运行于不同的处理器体系结构上,必须在功能模块与硬件之间加入一层软件,并对这层软件规定标准接口,这层软件即为BSP 提供对硬件进行的描述性操作 提供对目标板的初始化、中断管理以及一些简单的驱动程序 最好的情况下,OS与驱动程序的移植只需要更换相应平台下的BSP支撑库 Tornado BSP Developers Kit for VxWorksVxWorks系统结构Tornado集成开发环境 Tornado:基于VxWorks操作系统的嵌入式软件集成开发环境。给嵌入式
4、系统开发人员提供了一个不受目标机资源限制的超级开发和调试环境。Tornado包含以下三部分:运行在宿主机和目标机上的强有力的交叉开发工具和实用程序;文本编辑器GNU和Diab C/C+编译器调试工具:Wind Shell,Browser,WindViewVxSim系统模拟器:VxWorks提供的在实验与测试环境下仿真VxWorks目标机的程序,无需硬件的支持 运行在目标机上的高性能、可裁剪的实时操作系统VxWorks;即为编译生成的目标机上可执行代码镜像(image),内含os 连接宿主机和目标机的多种通讯方式,如:以太网,串口线,ICE或ROM仿真器等。使用Tornado创建工程 创建工程.
5、exe WorkSpace&WorkProject 每一个工程都需要有一个WorkSpace来保存一些相关的环境变量;Bootable Vs Downable:前者表明建立一个新的VxWorks操作系统,该工程是基于某个BSP生成的镜像,它包含了必须的VxWorks的内核、组件以及BSP,并且应用程序可以静态包含在工程中,也可以静态链接已编译好的应用工程模块。开发者可以根据自己的需求进行适当的配置,添加、删除VxWorks的组件,设置所选组件的运行参数等。后者顾名思义,应用模块可以以静态链接的方式编译至VxWorks镜像工程中,还可以在VxWorks运行之后,通过网络将将应用模块(.out格式
6、)下载到目标板,并与VxWorks镜像进行链接。在单独对某个模块进行调试时,我们常常会用到这种动态链接的方法。VxSim的HelloWorld(一)VxSim的HelloWorld(二)选择 A BSP(板级支持包)在下拉菜单中选择simpc打开文件usrAppInit.c(它的函数usrAppInit是应用的入口点),添加Hello World打印语句,保存文件。VxSim的HelloWorld(三)VxSim的HelloWorld(四)最后:查看新弹出的对话框(VxWorks Simulator),_,可以看到输出的Hello World此时,还会弹出了一个VxSim Launch的界面,
7、这是主机用来连接目标机的。点击OK。如果正确安装Tornado并配置正确的话,此时桌面右下角会出现 的图标(如果出现问题,会出现 的图标),点击它可以看到Target Server是否正常工作。Tornado工具CrossWind:源程序(C 或 C+以及汇编程序等)的调试工具Browser:可对系统对象(任务、消息队列、信号量等)和存储 器使用情况进行观察的浏览器。可以方便地监视用户的 目标系统。Browser汇总了应用进程,内存消耗和一个目 标内存的映射。通过 Browser,用户可以观察信号量、消息队列、内存分配、看门狗计时器、堆栈使用情况、目标 CPU使用率、对象模块结构和符号表以及每
8、个任务的详细信息。WindShell:提供从宿主机到目标机之间的一个命令 shell。允许用户调用内存中的应用程序模块或是 VxWorks模块中的任何例程。WindView:非常出色的系统可视诊断和分析工具。可非常容易地观察各任务,中断程序之间的相互作用。VxSim:快速原型仿真器。可在硬件设备未完成之前,在宿主机上对应用程序进行仿真分析。VxWorks程序设计 任务(Task)在VxWorks中,任务是一段独立运行的程序,类似于Linux中的进程。从系统的角度看,任务是竞争系统资源的最小运行单元。任务可以使用或等待CPU、I/O设备及内存空间等系统资源,并独立于其他任务。VxWorks实时内
9、核Wind提供了基本的多任务环境,因此当系统运行多个任务时,从表面上看多个任务正在同时执行,而实际上系统内核是根据某一调度策略让它们交替运行。系统调度器使用任务控制块(TCB)的数据结构来管理任务调度功能。每一个任务都与一个TCB关联。TCB包括了任务的当前状态、优先级、要等待的事件或资源、任务码的起始地址、初始堆栈指针等信息。任务编程:任务创建taskSpawn、任务删除taskDelete、任务控制taskSuspend/taskDelay等 WindShell 允许用户调用内存中的应用程序模块或是 VxWorks模块中的任何例程创建任务在usrAppInit函数中添加函数userMain
10、(),作为自己应用程序的入口函数。编写一个C文件(uesr.c),内容如下:编译代码及运行选择Add Files,添加uesr.c到工程中:编译并启动:启动Wind Shell在Launch工具栏 中选择 ,这时候就可以看到shell的界面:输入i命令,回车,即可以查看到我们起的任务tTick的有关信息:Wind Shell常用命令 i:显示所有的任务信息 Tt():显示一个任务的函数栈的调用状态 Ti():显示一个任务的tcb信息 Sp():启动一个任务 Ts():挂起一个任务 Tr():恢复一个任务 Td():删除某个任务 memShow:显示系统内存信息 checkStack:查看指定或
11、所有任务的堆栈大小和使用率Tornado中Host与target通信Target Server以进程的形式(tgtsvr.exe)运行在Windows主机上,而Target Agent则以VxWorks的一个任务(tWdbTask)运行在目标机上,两者通常使用网络进行通讯,但也可以使用其他通讯方式。Target Serve与Target Agent间使用WDB(Wind Debug)协议进行通信,这就好比一座桥梁,将目标机与主机上的Tornado开发工具联系在一起。开发板开发嵌入式程序 操作系统的制作与下载 修改Config.h 制作BSP及bootrom 制作操作系统 配置FTP Serve
12、r 启动超级终端 引导和下载操作系统 应用程序的编制和调试操作系统的制作与下载修改Config.h VxWorks的缺省配置参数由tornadotargetconfigall目录中的configAll.h决定,如第528行开始通信路径的配置 对于某一目标板特定的配置参数,如ads860,使用tornadotargetconfig下相应目录中的config.h,下面以ads860板为例 如果没有相应目录,可定制,如建立8240目录,其文件代码由BSP开发人员编写操作系统的制作与下载修改Config.h config.h首先定义BSP版本,然后include configAll.h 缺省下载调试口
13、为10M网口,对应代码为#undef FADS_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:/vxWorks h=10.16.17.1 e=10.16.
14、17.2 u=tornado pwd=tornado”操作系统的制作与下载修改Config.h 如采用串口调试,可增加下列代码#undefWDB_COMM_TYPE#defineWDB_COMM_TYPE WDB_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
15、_BAUD115200/*default baud rate*/操作系统的制作与下载Build bootrom 修改BSP后,应生成对应的bootrom 在Tornado中选Build-Build Boot ROM BSP可选择ads860 Image一般选择bootrom.hex,仿真时选择bootrom_uncmp操作系统的制作与下载烧制bootrom 目的:将build成功的bootrom 烧制到Flash中 FADS860板通过配套的ADI卡烧制 按照ADI卡相应的8bug程序中的readme,安装ADI卡 在DOS方式下键入:mpc8bug x y操作系统的制作与下载验证bootro
16、m 连接主机与目标板的串口线 启动和配置FTP Server(方法后面介绍)选择Tornado2-VxWorks COM1/COM2,启动超级终端 超级终端中选文件-属性-配置,设置正确的目标板波特率 目标板上电,检查终端是否能正确回显,显示参数与BSP配置是否一致操作系统的制作与下载创建操作系统工程 选File-New Project-Create a bootable VxWorks image 在step1键入Name和Location目录,选择Workspace 在step2选择相应的BSP(如ads860),仿真选simpc操作系统的制作与下载选择操作系统组件 在Workspace窗
17、口的相应Project中,点击VxWorks 选择所需组件,击右键,选Include添加,选Exclude删除 例如需要使用POSIX消息队列,可选operating system components-POSIX components-POSIX message queue并添加 组件选择完毕后,右击Project,选Build vxWorks 注意有些组件必须组合使用操作系统的制作与下载FTP Server的配置 目标板上电后,bootrom引导初始化,启动TFTP协议,作为Client端与主机通信,此前主机应运行FTP Server 点击Tornado2-FTP Server 如果目标板
18、使用匿名账号登录,在Security-General中,选择Allow Anonymous 在Security-Users/rights中,选择User Name,对于新开账号用New User配置;在Home Directory中键入操作系统所在目录,然后点击Done操作系统的制作与下载常用TFTP命令 TFTP通信建立后,在超级终端上可使用TFTP命令 p:查看BSP预先设置的用户参数 c:修改用户参数:根据用户参数下载操作系统应用程序的编制与调试程序Project的制作 选File-New Project-Create downloadable application modules 在
19、step1键入Name和Location目录,选择Workspace 在step2选择相应的toolchain(如PPC860 gnu),仿真选SIMNT gnu应用程序的编制与调试增删project文件 在Workspace窗口下方点击Files,右击相应的Project Files,选择Add Files,增加所需的.c文件 右击单个.c文件,可选择Remove来删除,选择Open来编辑,选择Compile来编译 如果编辑新文件,选File-New,确定文件类型、文件名和存放位置,添加到相应的project中;也可用其它编辑器编辑增删project文件(续)完成.c文件的添加后,右击Pro
20、ject Files,选择Dependencies,自动添加所有的include.h文件,显示在External Dependencies中(不显示系统.h文件)注意.h文件的路径应用程序的编制与调试路径和宏的加入 在Workspace窗口点击Builds,双击xxxgnu,选择C/C+compiler,可编辑所需的编译路径和宏;路径用-I,如-IE:/mydirectory;宏用-D,如-DBIG_ENDIAN;中间无空格 不同选项间用空格隔开,不能使用回车键 路径用UNIX格式/,不能使用DOS格式应用程序的编制与调试.o库的加入 在xxxgnu窗口中选Macros,在Macros下拉菜单
21、中选PRJ_LIBS,在Value栏键入.o文件及其绝对路径,如e:/mydirectory/my.o,然后点击Add/Set按钮,再点击Apply即可 路径同样使用UNIX格式/应用程序的编制与调试Build应用程序 在代码编辑完成后,右击Project Files,选择Build或ReBuild All,可对Project进行编译、链接,生成.out文件 在Build Output窗口中,Tornado会显示错误/警告信息,此时修改代码,重新Build,直至出现Done调试应用程序的步骤 连接主机与目标板之间的串口线和网线 配置和启动FTP Server 配置和启动超级终端 目标板上电,下
22、载操作系统 配置和启动Target Server 下载应用程序.out文件 启动Shell,运行程序 启动Debugger调试应用程序的编制与调试Target Server的配置和启动 选择Tools-Target Server-Configure,选择相应的Target Server,点击New可添加1个新的Configuration,自行定义Target Server名称(可选),键入目标板IP Address(必选)在Target Server Properties下拉菜单中选Back End,网口调试时在Available Back窗口选wdbrpc,串口调试选wdbserial 在T
23、arget Server Properties下拉菜单中选Core File and Symbols,选中File,在该栏键入操作系统路径及名称,如e:vxworks1应用程序的编制与调试Target Server的配置和启动(续)当程序下载太慢时,可在Target Server Properties下拉菜单中选Memory Cache Size,选中Specify,键入字节数,如4096(K Byte)配置完毕后,点击OK时保存配置,点击Launch时直接启动Target Server 当Target Server启动成功后,在Tornado主窗口下拉菜单中选定Target应用程序的编制与调
24、试下载应用程序 右击Project Files,选Download,下载Workspace中的应用程序 如果选Unload,撤销下载的应用程序 如果只有.out文件,而无project及源代码,在主窗口点击Download object file or boot image,选择相应文件下载 在主窗口点击Launch Shell,启动Shell应用程序的编制与调试常用Shell命令 在Shell窗口键入help,可查看外部Shell命令 i查看已运行的所有任务的TCB,tXxxTask为系统任务 sp 产生1个任务 td 删除1个任务 printErrno根据错误号显示错误类型应用程序的编制与
25、调试常用Shell命令(续)moduleShow 查看已下载的操作系统和.out文件 memShow查看目标板内存状态 reboot自动重启目标板,下载操作系统,重启Target Server 注意命令的大小写应用程序的编制与调试Browser的使用 在主窗口点击Launch Browser,可启动Browser 根据Browser窗口下拉菜单的选择,可查看Memory Usage、Module Information、Object Information、Spy Chart、Stack Check、Target Information、Tasks等选项应用程序的编制与调试Debugger的使
26、用 在主窗口点击Launch Debugger,可启动Debugger 主窗口的Debug菜单下有常用的调试命令 和其它调试工具一样,Tornado具备单步调试、断点调试等调试功能,并能进行系统级调试和任务级调试应用程序的编制与调试应用程序运行方法(1)在Shell窗口键入主任务(函数)名或子任务(函数)名,实例:直接键入mymain(2)在Shell窗口调用sp命令启动任务,实例:sp mymain(sp参数取缺省值)(3)在主窗口点击Run,在Run Task窗口中选择相应的task 根据任务产生和运行方式的不同,通过超级终端或Shell窗口可观察printf结果Tornado Online Manuals的使用 点击程序-Tornado2-Tornado Online Manuals 在Tornado 2.0 Online Manuals窗口点击Index 键入待查找的API函数名(包括Shell命令),或者库名,然后点击Display 注意区分大小写 谢谢!