社区
嵌入开发(WinCE)
帖子详情
有用VXWORKS的吗?大家进来谈谈你对它的认识,交流交流
蓝天
2003-02-27 12:30:32
刚开始学习,总觉得知识串不起来,零零散散的
...全文
217
13
打赏
收藏
有用VXWORKS的吗?大家进来谈谈你对它的认识,交流交流
刚开始学习,总觉得知识串不起来,零零散散的
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
13 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
hooboo
2003-05-08
打赏
举报
回复
实时系统的特点
具有和被控系统变化保持同步的能力。
实时系统执行具有确定性即其响应时间是可以预定的。
一个实时系统有以下要求:可以控制独立的,同步的,以及异步的外部组件。具有快速的响应速度。在确定的时间内具有确定的操作,延迟的响应被认为是错误的响应。
多任务是指从宏观上看,系统中可以同时运行多个任务。这些任务可以有不同的优先级和一定的关联关系,从而可以完成复杂的操作。
任务的状态
一个没有挂起的任务可以处于以下四种状态之一。
就绪态 任务获得运行的条件,所有就绪的任务中优先级最高的任务得到执行,其他任务则等待占用CPU。
睡眠态 任务等待一段时间流逝而不做其他事情。
阻塞态 任务等待一个特定事件。
阻塞与睡眠态 任务等待一个特定事件,并且设定一定时间的超时。
一个被挂起的任务将不会被执行,处于就绪、睡眠、阻塞以及阻塞与睡眠状态的任务都有可能被挂起,当它们被恢复时则恢复到相应的状态。
下图是任务状态的转换图。
任务切换和优先级
所有任务由VxWorks的WIND内核来管理,内核根据一定的调度算法来给各个任务分配CPU资源。同时使用任务控制块(Task Control Blocks 简称TCBs)来描述各个任务。任务切换时,将原来执行的任务的相关内容存到它的任务控制块中,同时取出要执行的任务的任务控制块从而实现任务切换。如下图所示:
任务的调度是抢占式的,高优先级的任务可以抢占低优先级的任务。下面就是一个基于优先级的调度图示。
图中低优先级的任务C被中优先级的任务B抢占,当任务B被阻塞之后,任务C再次得以调度,但是当任务B再次变为就绪态之后再次抢占任务C,当高优先级的任务A就绪之后,任务B和任务C都被阻塞。任务A得以调度。
创建任务
int taskSpawn (name, priority, options, stackSize, entryPt, arg1, ..., arg10)
name 任务名字,如果是NULL则系统分配一个默认的名字。
priority 任务的优先级:0-255。
options 任务选项:VX_UNBREAKABLE.
stackSize 任务栈的大小(以字节为单位)
entryPt 任务入口
arg1, ..., arg10 参数
每个VxWorks任务都有一个自己的任务栈和一个任务控制块TCB。如果创建成功则返回任务ID否则返回ERROR。
任务ID是任务的唯一标识。可以用taskIdSelf()函数获得当前任务ID,用taskIdListGet()获得所有存在的任务,用taskIdVerify()确认一个任务的ID是否有效。
任务名字是为了方便识别,任务名字并不一定唯一。通常默认情况下以t开头。相关的函数有taskName()获得某个任务ID对应的任务名字。taskNameToId()通过任务名字获得任务的ID。
优先级是调度任务时的依据。相关的函数有taskPriorityGet (tid, &priority)获得某个任务的优先级。taskPrioritySet (tid, priority)重新设置某个任务的优先级。
任务栈,在任务创建之后,任务栈的大小就固定不变了。由于内核会占用一些空间,栈的可用大小可能稍小于申请的大小。
任务选项
VX_FP_TASK 支持浮点。
VX_NO_STACK_FILL 不在栈内用0XEE填充。(可以节省任务创建时间)
VX_UNBREAKABE 不能设置断点。
VX_DEALLOC_STACK 在任务存在时释放栈和任务控制块。
可以用taskOptionsGet() 获得任务的各个选项。用taskOptionsSet() 取消VX_DEALLOC_STACK选项。
删除任务
taskDelete(tid) 将删除任务并且释放栈和任务控制块。
exit (code) 删除当前任务本身。
控制任务
taskRestart (tid) 任务重启。
taskSuspend (tid) 任务挂起。
taskResume (tid) 任务恢复。
STATUS taskDelay (ticks) 任务进入睡眠。
任务钩子
taskSwitchHookAdd () 任务切换钩子。
taskCreateHookAdd () 任务创建钩子。
taskDeleteHookAdd () 任务删除钩子。
系统任务
任务名字 任务优先级 任务功能
tUsrRoot 0 初始化任务,配置系统,并创建Shell,然后退出。
tLogTask 0 系统日志。
tExecTask 0 异常处理。
tWdbTask 3 WDB代理。
tNetTask 50 任务级网络功能。
tFtpdTask 55 FTP服务器。
2.2 信号量
信号量是一种内核对象,信号量操作会引起任务的状态跃迁。常用的有三种信号量:同步信号量,互斥信号量,和计数信号量。同步信号量可以使任务阻塞,直到它等待的事件发生为止。互斥信号量可以使任务在访问共享资源时,获得一个独占的锁。而计数器信号量可以限制资源被占用的次数。
创建同步信号量
SEM_ID semBCreate (options, intialState)
options 指定任务阻塞在信号量后的各任务排队的队列类型 (SEM_Q_PRIORITY 按照优先级排队 或者SEM_Q_FIFO 按照先来先服务的顺序排队)
initialState 信号量的初始化状态:SEM_FULL 代表事件已经发生过或者 SEM_EMPTY代表事件还没有发生。
通常创建同步信号量时都初始化为SEM_EMPTY 态。
如果创建成功则返回SEM_ID 否则返回 NULL 。
创建互斥信号量
SEM_ID semMCreate (options)
options 指定任务阻塞在信号量后的各任务排队的队列类型 (SEM_Q_PRIORITY 按照优先级排队 或者SEM_Q_FIFO 按照先来先服务的顺序排队) ,SEM_DELETE_SAFE安全删除属性,允许任务优先级安全倒置SEM_INVERSION_SAFE 。
对信号量的操作
STATUS semTake (semId, timeout)
semId 创建信号量时返回的SEM_ID。
timeout 等待信号量的时间。可以是tick数或者WAIT_FOREVER或者NO_WAIT。
如果操作成功返回OK,如果超时或者信号量ID无效则返回ERROR。
此操作可以引起任务阻塞,直到semGive操作发生或者超时。
STATUS semGive (semId)
semId 创建信号量时返回的SEM_ID。
如果操作成功返回OK,如果信号量ID无效则返回ERROR。
此操作将使阻塞在此信号量处的任务脱离阻塞。
STATUS semFlush (semId)
semId 创建信号量时返回的SEM_ID。
如果操作成功返回OK,如果信号量ID无效或者此操作不被支持则返回ERROR。
此操作使得所有阻塞在此信号量处的信号量脱离阻塞。同时信号量的状态并不发生改变。此操作一般用于同步操作,对互斥信号量不能进行此操作。
STATUS semDelete (semId)
semId 创建信号量时返回的SEM_ID。
如果操作成功返回OK,如果信号量ID无效则返回ERROR。
此操作终止此信号量,并且释放信号量所占用的内存。
同步信号量的使用方式
首先创建一个同步信号量以等待某个同步事件。
同步信号量可以处于两者状态:FULL态或者EMPTY态。FULL态代表等待的事件已经发生过,EMPTY态代表等待的事件还没有发生。
等待事件发生的任务调用semTake (semId, timeout)操作后,将阻塞任务直到同步事件发生,获得信号量。上述同步事件发生,获得信号量的过程,一般是有任务或者中断服务程序检查到事件发生,调用semGive (semId),这个操作将等待信号量而阻塞的任务变成非阻态。
以上是同步信号量执行semTake (semId, timeout)操作的图示。
zhouzhaohan
2003-03-22
打赏
举报
回复
SI3US-027272-21847
zhouzhaohan
2003-03-22
打赏
举报
回复
SI3US-802752-95343
心念不空过
2003-03-13
打赏
举报
回复
gz
wzm007xiao
2003-03-05
打赏
举报
回复
还有它的破解文件在哪能找到!
wzm007xiao
2003-03-05
打赏
举报
回复
楼上,source insight升级到3.5了?哪里可以下载啊!?可以告诉我么?
蓝天
2003-03-04
打赏
举报
回复
为什么是__asm__而不是asm??
zhouzhaohan
2003-03-01
打赏
举报
回复
同意,我从来不用它的编辑器,一般是在tornado里设置使用外部的编辑器,就是ultraedit。不过要查找符号的话,还是用source insight比较方便。这个东西终于升级到3.5了。
wzm007xiao
2003-03-01
打赏
举报
回复
我们现在在用VXWORKS,不过用的时候觉得他的编译器还需要改善,比如,编译的时候看到的结果很乱。它的编辑器也不是很方便,通常我们都用VC或什么UE来编辑,然后再到TORNADO中。
zhouzhaohan
2003-02-28
打赏
举报
回复
都没做过,现在已经不做vxworks了,不过我们买了vxworks协议栈的源代码。就做了做驱动,和BSP bootloader之类的。
liuliu008
2003-02-28
打赏
举报
回复
楼上的,你也在做VxWorks协议栈?有做IPSEC吗?有时间我们可以切磋一下,,
qmzh888@hotmail.com
Lachine
2003-02-27
打赏
举报
回复
我用vxworks,但是对他的系统还需要进一步了解,不过他不错,但是协议栈还不完美,我们已经抛弃他的协议栈,重新移用linux的协议栈啦!
zhouzhaohan
2003-02-27
打赏
举报
回复
http://www.xs4all.nl/~borkhuis/vxworks/vxworks.html 经典faq
vxWorks
实时程序设计
本课程侧重讲解实时操作系统编程原理,其中的原理不拘限于
vxWorks
系统,同时强化操作系统编程的技术要点。课程从基本概念与工具使用入手,并深入讲解实时嵌入式系统编程的同步、互斥、通信、信号等概念及编程方法,...
谈谈
软件从业者的学习方向和职业规划
http://www.pconline.com.cn/pcjob/process/other/others/0604/790737.html讲的是未来有三个方面是热门:一:企业计算,包括SAP, 以及IBM大型机的开发二:嵌入式开发,包括ARM+WINCE or ARM+LINUX or ARM+
vxWorks
三...
谈谈
软件学院、软件专业的学习方向
谈谈
软件学院高年级同学的学习方向(by JacksonWan)一、关于企业计算方向企业计算(Enterprise Computing)是稍时髦较好听的名词,主要是指企业信息系统,如ERP软件(企业资源规划)、CRM软件(客户关系管理)、SCM...
谈谈
软件学院高年级同学的学习方向(by JacksonWan)
一、关于企业计算方向企业计算(Enterprise Computing)是稍时髦较好听的名词,主要是指企业信息系统,如ERP软件(企业资源规划)、CRM...企业计算领域对人才的需求显然永远是数量最大的,因为这是计算机应用最多的领域. 搞
谈谈
软件从业学习方向
谈谈
软件从业学习方向 北京中科永联技术服务有限公司 作者:同济大学软件学院 2006-2-19 21:09:52 点击: 43 次 发表评论 一、关于企业计算方向 企业计算(Enterprise Computing)是...
嵌入开发(WinCE)
19,504
社区成员
41,569
社区内容
发帖
与我相关
我的任务
嵌入开发(WinCE)
硬件/嵌入开发 嵌入开发(WinCE)
复制链接
扫一扫
分享
社区描述
硬件/嵌入开发 嵌入开发(WinCE)
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章