学习vxworks中遇到的问题
学习vxworks中遇到的问题

学习vxworks中遇到的问题1预期目标用两台pc机建立起由网络进行通讯的vxworks开发环境,开发工具是tornado 2.2 for pentium,vxworks版本为5.5。
2硬件描述宿主机是一台装有windows xp和tornado 2.2的带有网络接口的笔记本电脑,ip设置为192.168.1.101,目标机是研华的610L型号工控机,后发现在vxworks系统下驱动工控机自带网卡有困难,于是购置了一块tp-link的pci网卡,装在工控机上,网卡芯片是realtek 8139d。
3建立开发环境的方案目标工控机上已经装有windows xp,文件系统是fat32,经试验得知工控机支持usb-zip启动,考虑到不对windows系统产生影响,决定使用u盘启动作为系统启动的方式。
用u盘启动bootrom后通过网络下载存放在笔记本电脑上的vxworks系统镜像,宿主机和目标机通过网络通讯,从而建立起x86构架下的vxworks开发环境。
4工作现状u盘启动盘通过ultraISO和tornado 2.2自带的一些工具制作成功,并能在工控机上把bootrom 启动起来到命令行,但是在加载vxworks镜像的时候不能成功。
5遇到的问题在bsp中添加rtl8139网卡驱动,添加驱动的过程如下(a)下载rtl8139驱动vxworks-8139(140),是适用于tornado 2.0的。
(b)将目录下的h和src两个文件夹复制到tornado 2.2下target 文件夹里,把sysRtl81x9End.c 复制到bsp文件夹下。
(c)运行命令行,在C:\Tornado2.2\target\src\drv\end\unsupported目录下运行make CPU=PENTIUM 成功,但有警告(环境变量已设置好),在C:\T ornado2.2\target\lib\objPENTIUMgnuvx目录下生成了rtl81x91.o。
vxworks使用过程中的100个疑问与解答

vxworks使用过程中的100个疑问与解答1. VxWorks是什么?VxWorks是一种实时操作系统(RTOS),由美国Wind River公司开发,适用于嵌入式系统。
2. VxWorks有哪些特点?VxWorks具有高度可靠性、实时性、可移植性和可扩展性等特点。
3.如何安装VxWorks?安装VxWorks需要下载安装包,然后按照安装指南进行安装。
4.如何创建VxWorks任务?可以使用taskSpawn函数来创建任务,指定任务的入口函数、优先级等参数。
5. VxWorks如何进行任务间通信?任务间可以使用消息队列、信号量、共享内存等机制进行通信。
6.如何调试VxWorks程序?可以使用Wind River公司的调试工具Wind River Workbench进行调试。
7. VxWorks支持哪些开发语言?VxWorks主要支持C和C++开发,也可以使用汇编语言和Java等。
8.如何加载和运行VxWorks程序?VxWorks程序可以通过TFTP、FTP等网络协议加载到目标设备上,然后使用命令运行。
9. VxWorks是否支持多任务?是的,VxWorks支持多个任务的同时运行,并通过任务调度器进行任务切换。
10.如何实现任务间的同步?可以使用信号量、事件标志等机制实现任务间的同步。
11. VxWorks中如何实现中断处理?VxWorks提供了中断服务例程(ISR)和处理器驱动程序(DPC)来处理中断。
12.如何列出VxWorks系统中的任务?可使用taskShow命令列出系统中所有任务的详细信息。
13.如何获取任务的优先级?可以使用taskPriorityGet命令获取任务的优先级。
14.如何设置任务的优先级?可以使用taskPrioritySet命令设置任务的优先级。
15.如何控制任务的时间片轮转?可以使用taskDelay命令来控制任务的时间片轮转。
16.如何查看VxWorks系统的中断信息?可以使用intShow命令来查看系统中的中断信息。
VxWorks中的中断应用设计要点

VxWorks中的中断应⽤设计要点硬件中断处理是实时系统设计中的关键性问题,设计⼈员有必要对其作深⼊研究,以更好地满⾜开发⼯作需要。
⽂中以VxWorks操作系统为软件平台,讨论了在实时系统中进⾏中断应⽤设计时要注意的⼀些问题。
由于软硬件的相关性,选⽤⼴泛应⽤的X86架构的嵌⼊式汁算机为硬件平台,对PenriumCPU和计算机主板对硬件中断的管理机制也做了详细介绍所得出的研究结论在具体的开发项⽬中均得以验证,可供相关技术⼈员参考。
硬件中断处理是实时系统设计中最重要、最关键的问题。
⽂中综合软硬件,从⼯程应⽤的⾓度对此问题加以讨论。
⽂中所述内容针对的软件平台是VxWorks实时操作系统,硬件平台选⽤⼴泛使⽤的X86架构的嵌⼊式计算机,全⽂按照CPU、主板、操作系统⾃下⽽上的顺序展开。
1 Pentium CPU的中断类型有两类事件可引起Pentium挂起当前的指令流,即中断和异常。
中断是由外部事件引发的,在程序执⾏的任何时刻都可能出现;异常也称异常中断,是由内部事件引发的。
中断和异常各有两类触发源:(1)中断。
可屏蔽中断:CPU的INTR引脚收到有效信号,如果Pentium标志寄存器IF位为1,则允许中断,否则信号在CPU内被屏蔽。
⾮屏蔽中断:CPU的NMI引脚收到有效信号⽽引发的中断,这类中断不能被阻⽌。
(2)异常。
执⾏异常:CPU试图执⾏⼀条指令的过程中出现错误、故障等不正常条件⽽引发的异常中断。
执⾏软件中断指令:Pentium指令系统中包括⼀些如INTO,INT n这类软件中断指令,执⾏时产⽣异常中断。
详细分类的话,Pentium可以识别256种中断和异常。
每种中断给予⼀个编号,即0~255,称为中断向量号(interrupt vector number)。
其中NMI、异常以及系统保留占⽤中断向量号0~31,⽽32~255为⽤户中断向量号,可供INTR和⾃定义软件中断(如汇编中的INT指令)使⽤。
最新-VxWorks汉字显示解决方案 精品

VxWorks汉字显示解决方案摘要论述上对多字节码的显示支持,着重讨论其存储结构和意义,并给出汉字显示的实现方法。
关键词操作系统组件汉字点阵国标编码1操作系统图形显示方案作为嵌入式实时操作系统,在国内应用已非常广泛,但原厂商没有直接提供完备的汉字显示解决方案。
本文这个热点论题,通过对显示组件的分析,具体给出一种汉字显示的方案。
的汉字显示首先需要一种图形解决方案,只有工作在图形模式下才可能显示汉字。
有三种显示方案可供选择。
1+是-的简称,其中包含。
该组件直接控制显示硬件,主要提供显示模式设置、标准输入输出控制、点线面作图等函数,编程接口很类似于、里的图形库。
基于,提供了类风格的接口,有各种控件被封装于内,编程接口很类似于编程。
2+提供的支持,在上启动虚拟机来解释语言;图形开发编程接口是语言,虚拟机的图形实现基于。
3+++使显示编程接口成为编写网页,可以通过远程的来访问而使设备具有远程显示接口,也可以在本机做使设备具有本机显示接口。
该的实现需要或的支持。
上述方案内,纯的方案不需要本地汉字显示,只要在网页上放国标码或码等,由远程的去实现显示;其它方案基本上都需要的支持,这是因为系统里所有底层的显示操作都是通过实现的。
2汉字显示方案实现本地汉字显示的方案一定会涉及到,只是不同的方案对的依赖程度有所不同,一般有如下几种。
①利用对双字节编码的支持,实现对汉字的点阵存储、点阵获取、点阵显示的全过程,并使用的双字节显示函数实现汉辽码到汉字显示。
这种方法使用了系统机制,最根本的解决方法,并使的其它上层组件很方便地实现汉字显示。
②自己开发点阵存储、点阵获取、点阵显示,改造的双字节和单字节显示函数,使其能判断汉字码,一旦判断出汉字码,则使用自己开发的点阵获取、点阵显示等把汉字显示出来。
该方法对点阵的操作更加灵活,适合非标准的点阵算法,或者当开发者已有成熟的点阵操作方法时,把该方法绑接到上。
③完全自己开发一套点阵存储、点阵获取、点阵显示、汉字显示函数,使用者使用特定的汉字显示函数把汉字显示出来。
VxWorks系统异常分析方法

1、任务异常的一般表现:i)指令异常:系统打印program异常或instruction access异常。
ii) 访问非法地址异常,串口打印data access异常。
iii)中断处理中产生的异常。
data accessException current instruction address:0x00187d4cMachine Status Register:0x00009030Data Access Register: 0x8003435cCondition Register:0x48000080Data storage interrupt Register:0x0000000bTask:0xc844f0 "XXX"2、可能的原因:i)堆栈写越界,主要是数组写越界,导致前面声明的变量(因为堆栈是从下往上增长的)或者函数的参数或者函数返回的地址被改写为无效值。
ii) 堆栈溢出,堆栈声明过小,而函数又声明了大数组,超出堆栈的容量。
iii) 内存改写,这是最通常出现的原因。
包括,指针没有初始化,导致访问随机地址;访问空指针;内存操作范围越界,例如在使用memcpy/memset等函数使用的长度超过所分配,导致改写了其他的指针。
因此在定位异常问题过程中,可以通过内存管理先查看一下先前是否有内存写越界的记录,但是内存写越界只有在释放该内存区时才能检查到,如果该内存没有被释放,则即使写越界也是不知道的。
iv)系统调用不当,在中断回调中,使用printf,semTake之类可能引起阻塞的操作;printf等使用不当导致内存改写,这些函数在中断回调函数中是严格禁止的。
v) 增量编译引起的问题,Tornado和workbench增量编译有时会出现问题,导致古怪的异常,重新全量编译后,可能个会解决问题。
vi)多任务抢占引起的问题,当多个任务共同访问一个或者多个变量时,如果互斥不当,可能会产生同步或互斥的问题,比较典型的是:任务A和B都使用一个变量指针P;而A和B的优先级不同(即存在任务抢占),则他们在释放或者修改这个变量指针的时候,可能会出现随机的异常访问问题。
VxWorks任务编程中常见异常分析

VxWorks任务编程中常见异常分析在任务运行过程中,会出现一些异常的情况,导致任务不能正常运行或者对操作系统造成影响。
一般来说,这些异常是由程序的逻辑错误造成的,防止这些异常情况的出现和出现后进行补救就有格外重要的意义。
1 代码重入与共享在应用中,可能会出现多个任务调用同一段代码的情况,由于任务占用CPU是串行的,不会出现代码资源使用冲突。
但是,不同优先级的任务同时调用同一段代码,则可能出现低优先级任务执行某一函数时被执行该函数的高优先级任务打断的情况,如果函数中要改写全局变量而没有使用互斥,就有可能导致错误的存取。
例如在中断中调用内存分配或者释放函数,如果某个任务正在调用内存分配函数或者是内存释放函数,打断该任务时会造成异常,可能导致内存泄漏,甚至有可能会因在中断中异常而reboot。
另外,如果多个任务共用的代码中有全局变量且使用目的不同,或者多个任务的代码中有全局变量同名的情况,则有可能造成变量使用中的错误。
VxWorks提供了任务变量(taskVar)的方法来解决这个问题,任务可以将使用的全局变量作为任务变量独立使用,添加的任务变量保存在任务的上下文中,任务切换时保存当前内容。
2 符号表的使用VxWorks中有模块(module)的概念。
装载模块完成目标代码文件在内存中的链接,并可以将目标代码文件中的函数与全局变量加入符号表。
符号表中的符号对C语言编写的函数以原来名字命名,对于C++语言的函数则是在后面加上形参的数据类型作为符号名。
如f1( )的符号名为f1__Fv,最后的v表示void类型;f2(int)符号名为f2__Fi,f3(int,int)为f3__Fii,依此类推。
代码的编译过程中并不对要使用的函数和变量进行检查。
例如调用一个并不存在的函数编译并不报错,编译器认为此函数可能在操作系统内核中或者已经下载的目标文件中,但在目标文件下载时会找不到要调用的函数。
如果符号表中的符号出现了重名,譬如两次下载的目标文件中有函数重名,则要作散列处理,之后对该函数的调用是最后加入符号表的函数,而之前已经装载的模块则不会受到影响。
第4.3节 VxWorks信号中断和定时

18
VxWorks中断处理流程
保存CPU寄存器 从中断控制器读中断向量号 顺序调用该中断服务程序 通知中断控制器中断服务程序结束 恢复CPU寄存器 返回
第4章
.
19
中断和优先级
第4章
.
20
ISR的使用限制
第4章
.
ISR执行完成之前,其它任务不能执行 ISR中不能调用某些VxWorks函数,尤其是,ISR不
信号量
ISR释放信号量,任务等待接收信号量
消息队列
ISR发送消息,任务等待接收消息,如果消息队列满,该消息被丢弃
管道
ISR向管道写消息,任务读消息
信号
ISR可以向任务发送signal。
23
调试中断
第4章
.
中断处理程序可以调用logMsg()向系统输出诊断信 息
logMsg(“foo = %d\n”,foo,2,3,4,5,6) 向tLogTask发送请求为我们实现printf()的功能
轮询硬件 检查系统错误
VxWorks提供对两种定时器的相同的接口
系统时钟 辅助时钟
26
系统时钟
第4章
.
系统时钟完成下列工作
增加ticks计数(使用tickGet()获得计数值)
更新延时和超时计数器
检查循环调度
默认的时钟频率是60Hz
sysClkRateSet()
设置时钟频率
参考sigLib (组件:INCLUDE_SIGNALS)
6
信号编号
第4章
.
31个信号编号,从1-31
#define #define #define #define
VxWorks中文FAQ

- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
1预期目标用两台pc机建立起由网络进行通讯的vxworks开发环境,开发工具是tornado 2.2 for pentium,vxworks版本为5.5。
2硬件描述宿主机是一台装有windows xp和tornado 2.2的带有网络接口的笔记本电脑,ip设置为192.168.1.101,目标机是研华的610L型号工控机,后发现在vxworks系统下驱动工控机自带网卡有困难,于是购置了一块tp-link的pci网卡,装在工控机上,网卡芯片是realtek 8139d。
3建立开发环境的方案目标工控机上已经装有windows xp,文件系统是fat32,经试验得知工控机支持usb-zip启动,考虑到不对windows系统产生影响,决定使用u盘启动作为系统启动的方式。
用u盘启动bootrom后通过网络下载存放在笔记本电脑上的vxworks系统镜像,宿主机和目标机通过网络通讯,从而建立起x86构架下的vxworks开发环境。
4工作现状u盘启动盘通过ultraISO和tornado 2.2自带的一些工具制作成功,并能在工控机上把bootrom 启动起来到命令行,但是在加载vxworks镜像的时候不能成功。
5遇到的问题在bsp中添加rtl8139网卡驱动,添加驱动的过程如下(a)下载rtl8139驱动vxworks-8139(140),是适用于tornado 2.0的。
(b)将目录下的h和src两个文件夹复制到tornado 2.2下target文件夹里,把sysRtl81x9End.c 复制到bsp文件夹下。
(c)运行命令行,在C:\Tornado2.2\target\src\drv\end\unsupported目录下运行make CPU=PENTIUM 成功,但有警告(环境变量已设置好),在C:\Tornado2.2\target\lib\objPENTIUMgnuvx目录下生成了rtl81x91.o。
(d)修改bsp文件夹里的config.h修改的第一处#elif (CPU == PENTIUM)#define DEFAULT_BOOT_LINE \"rtl(0,0)host:vxWorks h=192.168.1.101 e=192.168.1.102 u=target pw=target"修改的第二处#define INCLUDE_END /* Enhanced Network Driver Support */#undef INCLUDE_DEC21X40_END /* (END) DEC 21x4x PCI interface */#undef INCLUDE_EL_3C90X_END /* (END) 3Com Fast EtherLink XL PCI */#undef INCLUDE_ELT_3C509_END /* (END) 3Com EtherLink III interface */#undef INCLUDE_ENE_END /* (END) Eagle/Novell NE2000 interface */#undef INCLUDE_FEI_END /* (END) Intel 8255[7/8/9] PCI interface */#undef INCLUDE_GEI8254X_END /* (END) Intel 82543/82544 PCI interface */#undef INCLUDE_LN_97X_END /* (END) AMD 79C97x PCI interface */#undef INCLUDE_ULTRA_END /* (END) SMC Elite16 Ultra interface */#define INCLUDE_RTL_81X9_END /* Realtek 81x9 Fast Ethernet Controller */修改的第三处#if defined (INCLUDE_LN_97X_END) || defined (INCLUDE_EL_3C90X_END) || \ defined (INCLUDE_FEI_END) || defined (INCLUDE_DEC21X40_END) || \defined (INCLUDE_GEI8254X_END) || defined (INCLUDE_AIC_7880) || \defined (INCLUDE_WINDML) || defined (INCLUDE_USB) || \defined (INCLUDE_RTL_81X9_END)# define INCLUDE_PCI修改的第四处#define INCLUDE_PC_CONSOLE /* PC keyboard and VGA console */(e)修改bsp文件夹里的configNet.h修改的第一处#ifdef INCLUDE_RTL_81X9_END/** load string format* <devMemAddr>:<devIoAddr>:<pciMemBase:<vecnum>:<intLvl>:<memAdrs>:* <memSize>:<memWidth>:<csr3b>:<offset>:<flags>*/#define RTL_81X9_BUFF_LOAN_0 1#define RTL_81X9_LOAD_FUNC sysRtl81x9EndLoad#define RTL_81X9_LOAD_STR_0 endLoadStr[0] /* First entry loc */#define RTL_81X9_LOAD_COUNT 4IMPORT END_OBJ * RTL_81X9_LOAD_FUNC (char *, void *);char endLoadStr [RTL_81X9_LOAD_COUNT] [END_DESC_MAX];#endif /* INCLUDE_RTL_81X9_END */修改的第二处#ifdef INCLUDE_RTL_81X9_END{0, RTL_81X9_LOAD_FUNC, RTL_81X9_LOAD_STR_0, TRUE, NULL, FALSE},#endif /* INCLUDE_RTL_81X9_END */(f)修改bsp文件夹里的sysLib.c修改的第一处#ifdef INCLUDE_RTL_81X9_END#include "sysRtl81x9End.c"#endif /* INCLUDE_RTL_81X9_END */修改的第二处#ifdef INCLUDE_RTL_81X9_ENDsysRtl81x9PciInit ();#endif /* INCLUDE_RTL_81X9_END */(g)编译不通过,显示没有rtl81x91.h的规则。
之后在bsp目录下的makefile文件中的TGT_DIR = $(WIND_BASE)/target一行下面添加了一行ADDED_MODULES += rtl81x9.o,并把rtl81x9.o拷贝到bsp目录下。
编译通过并启动运行,但是加载vxworks镜像不成功。
(好像也可以改另外一处:MACH_EXTRA = rtl81x9.o。
)运行时的一些现象如下目标机即工控机运行到bootrom后自动加载笔记本电脑里的vxworks镜像,屏幕显示Loading (XXXXX)Starting at 0x308000然后停止不动了宿主机即笔记本上的ftp窗口没有任何信息显示笔记本的网络接口灯是亮的,在目标机显示下载的时候还有闪烁,感觉网络链路上有数据传送。
在改变宿主机ftp里的vxworks镜像时,loading后面的数字也随着变化,与生成vxworks镜像时显示的大小对应,感觉目标机下载镜像了。
6不解之处1)不知道经过上面的步骤是否将rtl8139驱动添加成功,在书中看到还有添加网卡中断号宏定义的内容,但是找不到添加的位置。
2)不知道除了添加网卡驱动之外,是否还需要对bsp其他地方进行必要的修改。
对照你们做的半实物仿真系统电脑里的bsp包还发现了一些修改,比如对INCLUDE_WINDML,VIRTUAL_WIRE_MODE,RAM_LOW_ADRS,RAM_HIGH_ADRS的修改,这些是否是必须的。
3)不知道对vxworks的镜像制作有没有要求,上面的试验中用到的系统镜像是对使用了修改后的bsp建立的可启动工程编译得到的,除了添加了shell没有对工程其他地方进行修改。
(后来在建立工程后,在工程的Builds/default/property/macros中,在Name填入ADDED_MODULES,在Value中填入rtl81x9.o,然后点Add/Set,点Apply,OK,编译得到系统镜像,用这样的镜像后,宿主机的ftp服务器界面显示下载成功,目标机还是下载后就停止不动了。
)4)另外在目标机上现安装了两块网卡一块为8139d另一块为intel的pro/1000 Pl的千兆网卡,在试验时没有将千兆网卡卸下,不知是否对8139的链接产生影响。
5)对于处理器的型号,我们选择的是pentium,而半实物仿真系统里使用的是pentium2,不知是不是处理器型号选择不正确的原因。
6)不知道怎么样能够在wdb agent和target server建立连接之前进行调试,很是苦恼,只能改一点,试一次。
由于本人刚刚接触vxworks,思路还不太清晰,表达可能会有疏漏,看完上面的内容可能花费你不少时间,对此深表歉意。
对于上面提到的不解之处,希望你能帮忙讲解一下,不胜感激。