vxWorks学习笔记Word文件下载.docx

上传人:b****5 文档编号:19795031 上传时间:2023-01-10 格式:DOCX 页数:7 大小:21.28KB
下载 相关 举报
vxWorks学习笔记Word文件下载.docx_第1页
第1页 / 共7页
vxWorks学习笔记Word文件下载.docx_第2页
第2页 / 共7页
vxWorks学习笔记Word文件下载.docx_第3页
第3页 / 共7页
vxWorks学习笔记Word文件下载.docx_第4页
第4页 / 共7页
vxWorks学习笔记Word文件下载.docx_第5页
第5页 / 共7页
点击查看更多>>
下载资源
资源描述

vxWorks学习笔记Word文件下载.docx

《vxWorks学习笔记Word文件下载.docx》由会员分享,可在线阅读,更多相关《vxWorks学习笔记Word文件下载.docx(7页珍藏版)》请在冰豆网上搜索。

vxWorks学习笔记Word文件下载.docx

这里的bootrom不是开发环境中的bootable,在开发环境里bootable指的是vxWorks,downloadable指application

3.调试

attach

用来在多任务调试时将调试对象绑定到某个任务任务级调试(attachtaskName)单个任务的调试不会影响到其他任务的运行,主要用来调用户的应用程序。

全局断点:

在调另一任务或本任务时,系统运行本任务断点,则停下。

各任务要配合使用。

任务断点:

调本任务时,系统运行到本任务断点,则停下。

如果没有attach到本任务,不起作用。

一次性断点:

跑到一次之后自动删除。

系统级调试(attachsystem)

把所有task和系统core、中断看成一个整体,可用于调试系统和中断。

对中断调试,如果不是系统级调试,无论是那种断点都不起作用

wdbAgent不在调试范围内,当任务级调试时工作在中断方式,系统级调试工作在轮询方式。

可是使用命令行方式的调试,参看crossWind教程。

4.调度

优先级调度(无条件)时间片:

同优先级,如果时间片没有打开,任务采取先到先运行,运行完毕在交出cpu,如果打开,则轮流使用cpu。

死循环使比它优先级低的任务都不能运行。

5.任务间通讯信号量,全局变量,管道,signal,messagequeue,socket信号量:

分互斥、同步(二进制)、计数三种。

其中互斥用于资源管理,禁止多任务同时共享内存。

它的优势是:

速度快;

同一任务如果已经take到,再次take还会成功。

!

全局变量一定要有信号量保护。

Messagequeue圭寸装了全局变量和信号量,优势是:

快;

有很多操作项(send多recv少:

消息可以排队,用priority_urgent选项加到队列头。

send少recv多:

取的时候支持fifo和优先级,即有消息到达时给高优先级任务还是先被recv阻塞的任务)signal:

紧急通信机制,仅次于中断,依赖于系统调度,不依赖时间片(中断依赖于硬件时间),因此signal又称为软中断。

exeption:

内部中断,属于硬中断(例如除法出错)。

它与

signal的关系如下图:

taskAtaskB软中断处理signaltaskCtaskBUser'

stasksexceptionsignal软中断处理Exception中断处理历程1.查TCB(taskcontrolblock),得到正在执行的任务信息2.如果

注册了这个signal,则挂起任务3.打印exception号,pc指针,reg值4.如果注册了这个signal,给任务发signal

6.内存分配

在config.h中由宏定义指定。

user_reservedmem(保存热启动时的一些参数)SystemMemorypoolWdbpollvxWorksMemory的最终布局LOCAL_MEM_LOCAL_ADRSRAM_LOW_ADRSFREE_RAM_ADRSWDB_POOL_SIZEsysMemTop()sysPhyMemTop()Bootrom{romInit()romStart()}Bootrom{usrInit()usrRoot()}VxWorksROMRAMROM_SIZEROM_BASE_SIZEROM_TEXT_ADRSRAM_HIGH_ADRSRAM_LOW_ADRS启动时的ROM和RAM布局!

bootrom中的内存驱动在config/scr/drv/mem下,直接include*.c就可以使用其中的函数。

对于flash必须在config.h中加上类型的定义,换flash芯片在flash***.h中修改控制字等宏定义。

7.中断中断分三层含义:

中断引脚号(或从中断控制器得到)(interruptlevel)***_LEVEL

中断号(interruptnumber)INT_VEC_GET(***_LEVEL)中断向量(对x86是中断号*4)(interruptvector)INUM_TO_IVEC(INT_VEC_GET(***_LEVEL)!

中断处理程序和中断向量必须connect再enable后才能被激活,对x86使用sysIntEnablePIC(),对MIPS,ARM,PPC等使用intEnable()。

中断中不能含有会使中断阻塞的函数接口。

(例如printf就不行,使用logMsg)

8.Timer

vxWorks使用3个timer,分别用于系统时钟,辅助时钟和时标。

Timer0:

用于系统时钟(systemclock),可用sysClkRateSet()改变速率,默认值时60次/秒。

vxWorks下的watchdog基于timer0,因为是在interrupt尺度,使用必须谨慎,否则会降低系统效率。

Timer1:

用于辅助时钟(auxiliaryclock),在bsp.h中定义了最大速率,最小速率和实际速率初始值。

可用sysAuxClkRateSet()改变速度。

用sysAuxClkConnect()定义辅助时钟的定时任务。

Timer2:

用于时标(timestamp)。

从系统开始运行时就一直递增,可以用来获得系统运行时间,在windview工具中被使用。

用户程序也可以通过sysTimestamp()得到运行时间。

9.*.o,*.out,vxWorks

一个板子跑起来之后可以有多个*o和*.out(类似于window下的应用程序)和有且仅有一个的vxWorks(类似于window操作系统),但这些*.o和*.out的编译必须和vxWorks基于同一种cpu。

bootrom在启动时被部分复制到ram里在运行,这一部分将下载vxWorks到ram,然后跳转到vxWorks入口处运行,然后vxWorks将这一部分的bootrom重新划分到系统池。

10.符号表(symboltable)符号表就是一个数组,定义了函数和全局变量跟他们的地址的对应关系,默认情况下符号表放在主机上,如果定义了standalonesymboltable,则目标机上也有一份符号表,一般与targetshell绑定使用。

11.一些配置

pci的配置默认使用自动配置,如果要手工配置,必须定义

pciconfiguration键盘和显示器的驱动归入串口部分,默认输入输出是显示器和键盘,可以重定向到串口。

12.使用watchdog产生周期性调用例程主程序:

watchdog(func,param,tick)被watchdog调用的程序:

func(param){

watchdog(func,param,tick);

}

13.任务切换速度:

us量级,Cache关闭时上升到10us量级。

例如对于x86,233Mhz,cache打开,中断响应典型值3.5us。

其中cfunction挂接0.7us,中断推出+task重调度2.5us

14.tornado文件结构

用户主要需要目录:

tornado/host:

tcl控制语句、主机上运行的exe

tornado/docs:

帮助文件,其中的books.html提供总览tornado/target:

头文件,库文件,bsp

修改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下面的就是devicedriver,它们的链接方式有两种:

被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库是有条件链接,只有在用到了库中的函数接口时,才会被链接。

16.vxWorks启动顺序和源码位置函数:

sysInit?

usrInit?

usrAppInit文件:

prjConfig.c引用usr***.c,目录是target/config/comps/src(简称C/S,!

不是bootrom调用的同名函数)图形界面下的初始配置来自bsp的config.h和makefile,在工程建立的时候系统会自动完成此工作,编译使系统会根据图形界面下的配置自动生成prjparam.h和prjComps.h来保存选中的组件和配置参数。

此后配置的改动将通过prjConfig.c和这两个.h文件反映,再修改config.h不会对vxWorks的生成起作用。

对上面三个文件的手工修改也会被系统自动覆盖。

系统同时还在usrProj下自动生成makefile,同样不能通过对文件的直接修改达到更新目的。

17.vxWorks的数据分类

Text常数

Data函数体外部被初始化了的变量(包括只能在本文件内使用的LOCAL型变量)

Bss函数体外部没有被初始化的变量,拷贝vxWorks使不需要被拷贝,系统划出一定空间后统一置为零。

Stack函数体内变量,包括root_stack(启动时需要的堆栈)、isr_stack(中断堆栈)和任务堆栈,前面两个可以在工程下定义,后面一个在发起任务时由程序指定,来源于系统池。

Pool系统池,由malloc取用

TCBTaskControlBlock,任务参量

18.编译

Tornado采用gnumake作为编译工具,编译时必须注意以下三个地方保持一致:

cpu起始地址,源码编译时的起始地址,相关搬运算法使用的地址。

也就是说要注意makefile和config.h中下面宏定义的一致性:

RAM_HIGH_ADRS,RAM_LOW_ADRS,ROM_TEXT_ADRS,ROM_SIZE19.编译技巧

在buildproperty?

c/c++complier中加上-S,就可以生成.s而不是.o文件,在.s文件中可以清楚地看到data段,text段等。

加上-Dmacro=XXX,编译系统就会定义这个宏。

使用ar—crusv可以将.o力口入.a,例如:

arppc—crusvlib文件位置*.o

使用ar-t[>

text.txt]可以列出库文件里面包含的.o模块,

并重定义输出到text.txt

nm用来生成符号表,例如:

nmppc--numeric-sortvxWorks

用来按地址排列vxWorks的符号表

21.修改MMU

如果使用MMU,必须修改sysLib.c中的全局MMU映射表:

PHYS_MEM_DESCsysPhysMemDesc,内容为:

{{地址1,地址2(==地址1),长度,屏蔽,读写权限及cache允许或

禁止},……}

当RAM同时被两段或两段以上的总线操作(例如有cpu2,dsp,pci设备等),则不能设为cacheAble,否则会因为cache使ram不能及时更新而出错。

否则,在cpu发数据到

pci设备时,先写再flush;

pci设备发数据到cpu时,先invalidateCache()的相应部分,然后再写。

pci设备必须加入MMU映射表。

22.从串口下载vxWorks需要的修改

在config.h中加入:

#undefINCLUDE_TSFS_BOOT/*tsfs启动*/

#defineINCLUDE_TSFS_BOOT

#undefTTY_CONSOLE

#defineTTY_CONSLE0/*重定向输入输出到串口0*/

#undefWDB_TTY_CHANNEL

#defineWDB_TTY_CHANNEL1/*调试串口为串口1*/#undefWDB_TTY_RATE

#defineWDB_TTY_RATE57600/*串口波特率*/

bootline设置为:

"

tsfs(0,0)chengjy:

/tgtsvr/vxWorksh=202.38.78.76e=202.38.78.189u=test189pw=test"

23.PCI网卡的初始化

sysHwInit中对PCI初始化,sysHwInit2中打开中断confignet.h中的endDevTbl的初始化,定义***_LOAD_FUNC提供源码或.o方式的驱动

24.定时轮询的实现方法

for(;

;

){do…;

taskDelay(10)};

watchdog

auxClock

25.驱动的三层模式以串口为例:

底层是与硬件直接相关的驱动(ppc860sio.h),中间层提供从硬件相关到硬件无关的函数封装(sysSerial.c),

最后在sysLib.c中提供上层要调用的初始化函数(就是在sysHwInit()中调用sysSerial.c中封装好的sysSerialHwInit())。

在实际的启动流程中通过ttyDevCreate()打开文件”/tyCo”,

之后就可以通过文件系统的open,read,write来对串口操作了。

26.tornado的使用参见《tornado2_0的安装使用流程.doc》及《windview使用》

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 初中教育 > 语文

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1