vxWorks学习笔记_第1页
vxWorks学习笔记_第2页
vxWorks学习笔记_第3页
vxWorks学习笔记_第4页
vxWorks学习笔记_第5页
已阅读5页,还剩6页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、vxWorks 学习笔记vxWorks 学习笔记2006-07-20 11:141 VxWorks 开发方式:交叉开发,即将开 发分为主机(host)和目标机(target)两部分。类似于 dos 下 C 语言程序的开发。 合并开发的优点:简单 缺点:资源消耗量大, CPU 支持,非标准体系的支持host (Tornado) target(vxWork) 小程序模块vxWorks 实际采用开发模式Tornado 提供:编辑,编译,调试,性能分析工具, 是 vxWorks 的开发工具vxWorks :面向对象可以剪裁的实际运行操作系统2. vxWorks 启动方式Rom 方式 (vxWork_r

2、om)vxWorks 直接烧入 romRom 引导方式( bootrom+vxWorks )其中 bootrom 烧入 rom, vxWorks 可以通过从串口,网口, 硬盘, flash 等下载!这里的 bootrom 不是开发环境中的 bootable,在开发环境里 bootable指的是vxWorks , downloadable 指 application3. 调试attach用来在多任务调试时将调试对象绑定到某个任务 任务级调试( attach taskName) 单个任务的调试不会影响到其他任务的运行,主要用来调用 户的应用程序。全局断点: 在调另一任务或本任务时, 系统运行本任务

3、断点, 则停下。各任务要配合使用。任务断点:调本任务时,系统运行到本任务断点,则停下。 如果没有 attach 到本任务,不起作用。一次性断点:跑到一次之后自动删除。系统级调试 (attach system)把所有task和系统core、中断看成一个整体,可用于调试系 统和中断。对中断调试,如果不是系统级调试,无论是那种 断点都不起作用!wdbAgent 不在调试范围内, 当任务级调试时工作在中断方 式,系统级调试工作在轮询方式。!可是使用命令行方式的调试,参看 crossWind 教程。4. 调度优先级调度(无条件) 时间片:同优先级,如果时间片没有打开,任务采取先到先 运行,运行完毕在交出

4、 cpu,如果打开,则轮流使用 cpu。 !死循环使比它优先级低的任务都不能运行。5任务间通讯 信号量,全局变量,管道, signal, message queue,socket 信号量:分互斥、同步(二进制) 、计数三种。其中互斥用 于资源管理,禁止多任务同时共享内存。它的优势是:速度 快;同一任务如果已经 take 到,再次 take 还会成功。 !全局变量一定要有信号量保护。Message queue圭寸装了全局变量和信号量,优势是:快;有 很多操作项(send多recv少:消息可以排队,用priority_urgent 选项加到队列头。 send 少 recv 多: 取的时候支持 fi

5、fo 和优先 级,即有消息到达时给高优先级任务还是先被 recv 阻塞的任 务) signal:紧急通信机制,仅次于中断,依赖于系统调度,不依 赖时间片(中断依赖于硬件时间) ,因此 signal 又称为软中断。 ! exeption :内部中断,属于硬中断(例如除法出错)。它与signal 的关系如下图:taskA taskB 软中断处理 signal taskC taskB Users tasks exception signal 软中断处理 Exception 中断处理历程 1 查 TCB(task control block) ,得到正在执行的任务信息2 如果注册了这个signal,则

6、挂起任务 3.打印exception号,pc 指针,reg值4.如果注册了这个signal,给任务发signal6. 内存分配在 config.h 中由宏定义指定。user_reserved mem (保存热启动时 的一些参数 ) System Memory pool Wdb poll vxWorks Memory 的最终布局 LOCAL_MEM_LOCAL_ADRSRAM_LOW_ADRS FREE_RAM_ADRS WDB_POOL_SIZE sysMemTop() sysPhyMemTop() Bootrom romInit() romStart()Bootrom usrInit() u

7、srRoot() VxWorks ROM RAM ROM_SIZEROM_BASE_SIZEROM_TEXT_ADRSRAM_HIG H_ADRSRAM_LOW_ADRS 启动时的 ROM 和 RAM 布局 !bootrom 中的内存驱动在 config/scr/drv/mem 下,直接 include *.c 就可以使用其中的函数。对于 flash 必须在 config.h 中加 上类型的定义, 换 flash 芯片在 flash*.h 中修改控制字等宏 定义。7. 中断 中断分三层含义: 中断引脚号(或从中断控制器得到) ( interrupt level ) *_LEVEL中断号( in

8、terrupt number ) INT_VEC_GET(*_LEVEL) 中断向量(对 x86 是中断号 *4 )( interrupt vector ) INUM_TO_IVEC(INT_VEC_GET(*_LEVEL) ! 中断处理程序和中断向量必须 connect 再 enable 后才能被激 活,对 x86 使用 sysIntEnablePIC() ,对 MIPS , ARM ,PPC 等使用 intEnable() 。!中断中不能含有会使中断阻塞的函数接口。 (例如 printf 就 不行,使用 logMsg )8. TimervxWorks 使用 3 个 timer ,分别用于系

9、统时钟, 辅助时钟和时 标。Timer0 :用于系统时钟 ( system clock ),可用 sysClkRateSet() 改变速率,默认值时 60 次/秒。!vxWorks 下的 watchdog 基于 timer0 ,因为是在 interrupt 尺 度,使用必须谨慎,否则会降低系统效率。Timer1 :用于辅助时钟 (auxiliary clock) ,在 bsp.h 中定义了最 大速率,最小速率和实际速率初始值。可用 sysAuxClkRateSet() 改变速度。用 sysAuxClkConnect() 定义辅 助时钟的定时任务。Timer2 :用于时标(timestamp)。

10、从系统开始运行时就一直 递增,可以用来获得系统运行时间, 在 windview 工具中被使 用。用户程序也可以通过sysTimestamp()得到运行时间。9. *.o , *.out , vxWorks一个板子跑起来之后可以有多个 *o和*.out (类似于window 下的应用程序)和有且仅有一个的 vxWorks( 类似于 window 操作系统 ),但这些 *.o 和 *.out 的编译必须和 vxWorks 基于同 一种 cpu。!bootrom 在启动时被部分复制到 ram 里在运行,这一部分 将下载vxWorks到ram,然后跳转到 vxWorks入口处运行, 然后 vxWork

11、s 将这一部分的 bootrom 重新划分到系统池。10. 符号表( symbol table ) 符号表就是一个数组,定义了函数和全局变量跟他们的地址 的对应关系,默认情况下符号表放在主机上,如果定义了 standalone symbol table,则目标机上也有一份符号表,一般 与 target shell 绑定使用。11. 一些配置pci 的配置默认使用自动配置,如果要手工配置,必须定义pci configuration 键盘和显示器的驱动归入串口部分,默认输入输出是显示器 和键盘,可以重定向到串口。12. 使用 watchdog 产生周期性调用例程 主程序: watchdog(fun

12、c,param,tick) 被 watchdog 调用的程序: func(param) watchdog(func,param,tick);13. 任务切换速度:us量级,Cache关闭时上升到10us量级。 例如对于x86,233Mhz,cache打开,中断响应典型值 3.5us。其中c function挂接0.7us,中断推出+task重调度2.5us14. tornado 文件结构用户主要需要目录:tornado/host: tcl 控制语句、主机上运行的exetornado/docs:帮助文件,其中的 books.html提供总览 tornado/target: 头文件,库文件,bsp

13、修改 bsp 主要修改 target 目录下的文件, bsp 的修改影响到 bootrom 和 vxworks 两部分,下面介绍的是使用工程方法建 立的 bootrom 和 vxWorks.15. bootrom 的启动顺序和源码位置函数:romInit ? romStart ? usrRoot ? CMDLoop文件:其中 bootInit.c 和 bootConfig.c 会用到 sysLib.c 中的一些函数, 这些函数使一些通用接口,它们调用 scr/config (简称 S/C) 下的usr*.c和scr/drv/(简称DD)下的一些程序。DD下面的就是device driver,它

14、们的链接方式有两种:被 bootConfig.c 和 sysLib.c 等直接 #include目录下自带 makefile,用cmd命令在目录下键入 make,函数进入系统库usr*.c :配合宏使用的链结方式,直接 #include!如果修改含有 makefile 文件的目录下的 *.c 文件, 必须重新 make,否则系统库没有更新。!特殊修改推荐将文件拷到 bsp 目录下,加入工程或者#include!如果设备供应商只提供 *a 或 *.o 而不提供源码,那么在 makefile 中加入 LIB_EXTRA=*.a 或 MACH_EXTRA=*.o 。 *.o 是无条件链接,而 *.a

15、 库是有条件链接,只有在用到了库 中的函数接口时,才会被链接。16. vxWorks 启动顺序和源码位置 函数: sysInit ? usrInit ? usrRoot ? usrAppInit 文件:prjConfig.c 引用 usr*.c ,目录是 target/config/comps/src( 简 称 C/S ,!不是 bootrom 调用的同名函数 ) 图形界面下的初始配置来自 bsp 的 config.h 和 makefile ,在工 程建立的时候系统会自动完成此工作,编译使系统会根据图 形界面下的配置自动生成 prjparam.h 和 prjComps.h 来保存选 中的组件和

16、配置参数。此后配置的改动将通过 prjConfig.c 和 这两个 .h 文件反映,再修改 config.h 不会对 vxWorks 的生成 起作用。对上面三个文件的手工修改也会被系统自动覆盖。 系统同时还在 usrProj 下自动生成 makefile ,同样不能通过对 文件的直接修改达到更新目的。17. vxWorks 的数据分类Text 常数Data 函数体外部被初始化了的变量 (包括只能在本文件内使 用的 LOCAL 型变量)Bss 函数体外部没有被初始化的变量,拷贝 vxWorks 使不需 要被拷贝,系统划出一定空间后统一置为零。Stack 函数体内变量,包括 root_stack(

17、 启动时需要的堆栈 )、 isr_stack(中断堆栈)和任务堆栈,前面两个可以在工程下定 义,后面一个在发起任务时由程序指定,来源于系统池。Pool 系统池,由 malloc 取用TCB Task Control Block ,任务参量18编译Tornado 采用 gnu make 作为编译工具,编译时必须注意以下 三个地方保持一致: cpu 起始地址, 源码编译时的起始地址, 相关搬运算法使用的地址。也就是说要注意 makefile 和 config.h 中下面宏定义的一致性: RAM_HIGH_ADRS , RAM_LOW_ADRS , ROM_TEXT_ADRS , ROM_SIZE

18、19.编译技巧在 build property?c/c+ complier 中加上-S,就可以生成.s 而不是.o文件,在.s文件中可以清楚地看到 data段,text段 等。加上 -Dmacro=XXX ,编译系统就会定义这个宏。使用 ar crusv 可以将.o 力口入.a,例如:arppc crusv lib 文件位置 *.o使用ar - t text.txt可以列出库文件里面包含的.o模块,并重定义输出到 text.txtnm 用来生成符号表,例如:nmppc - - numeric - sort vxWorks用来按地址排列 vxWorks 的符号表21修改 MMU如果使用 MMU

19、,必须修改 sysLib.c 中的全局 MMU 映射表: PHYS_MEM_DESC sysPhysMemDesc ,内容为 : 地址 1,地 址2 (=地址1),长度,屏蔽,读写权限及cache允许或禁止,!当 RAM 同时被两段或两段以上的总线操作(例如有 cpu2,dsp,pci设备等),则不能设为cacheAble,否则会因为 cache使ram不能及时更新而出错。否则,在cpu发数据到pci 设备时,先写再 flush;pci 设备发数据到 cpu 时,先 invalidateCache ()的相应部分,然后再写。!pci 设备必须加入 MMU 映射表。22从串口下载 vxWorks 需要的修改在 config.h 中加入:#undef INCLUDE_TSFS_BOOT /*tsfs 启动*/#define INCLUDE_TSFS_BOOT#undef TTY_CONSOLE#define TTY_CONSLE 0 /* 重定向输入输出到串口 0*/#undef WDB_TTY_CHANNEL#d

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论