-
VxWorks
的中断服务
VxWorks
的中断服务程序(<
/p>
ISR
)运行在特定的空间。
不同于一般
的任务,中断服务程序没有任务上下文,不包含
任务控制块,所有的中断服务程序使用同
一中断堆栈。
ISR
中不能调用可能
导致
blocking
的函数,例如:
(a)
不能以
semTake
获取信号量,
因如果该信号量不可利用,
p>
内核会试图让调用者切换到
blocking
态;
(b)malloc
和
free
可能导致
blocking
,因此也不能使用;
(c)
应避免进行
VxWorks
I/O
系统操作(除管道外)
;引伸
:
1
,在<
/p>
Vxworks
里,任务调度器的调用一般有两种情况。一
种是从中断或系统调用返回的时候,另一种就是代码本身去
调用了会引
起调度的系统函数,比如
taskDelay
一类。
2
,
在某些操作系统中
,
是可以在一些特定的低优先级
ISR
里面
进行
pend
操作的。这要求操作
系统的中断,有线程上下文
(线程(任务)上下文是任务调度的基础,注意任务上下文<
/p>
不等同于中断上下文)
。称为“中断线程化”。
< br>
Vxworks
的任
务调度是
依赖于中断的,同时,为了实时性考虑,
Vxworks
不支持
中断线程化,
ISR
是没有任务
(线程
)
上下文
(
TCB
)
的。
如果支持中断线程化,
那么
将导致中断响应时间不确定,
实时性难以得到保证。
如果在
vxworks
里面,使用了可能
blocking
的代码,那么有
2
种情况:
(
a
)一种是关中断运
-
-
-
-
-
-
-
-
-
上一篇:单片机知识总结
下一篇:新发布高精度温度传感芯片DS1624的完整程序