惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

腾讯CDC
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
P
Proofpoint News Feed
D
DataBreaches.Net
D
Docker
云风的 BLOG
云风的 BLOG
大猫的无限游戏
大猫的无限游戏
月光博客
月光博客
J
Java Code Geeks
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
罗磊的独立博客
Martin Fowler
Martin Fowler
U
Unit 42
Engineering at Meta
Engineering at Meta
IT之家
IT之家
Vercel News
Vercel News
B
Blog RSS Feed
人人都是产品经理
人人都是产品经理
博客园 - Franky
博客园 - 【当耐特】
Stack Overflow Blog
Stack Overflow Blog
G
Google Developers Blog
MongoDB | Blog
MongoDB | Blog

博客园 - safeking

移动互联网,我来了 CPU内实现指令的方式 ARP(AddressResolutionProtocol)地址解析协议 满足网络处理应用的LA-1接口标准概述 下一代NSE架构 常用的电平标准总结 DDR技术与HSTL电平(ZZ) vxworks与linux内核比较 不同CPU的区别 vxworks中断服务程序 去掉副作用的最小宏定义方式(linux kernel定义) 关于C语言中函数调用和参数传递机制的探讨(ZZ) ubuntu7.1下nvidia gfore4驱动安装(转,遇到终端空白,请参考本站相关的随笔) nbnutu7.1安装nvidia gf4驱动后,终端空白显示问题解决办法 风河公司用“硬实时”为Linux注入新活力 c的预处理 内联函数与宏 宏使用方法要点 浅谈嵌入式 Linux 的移植(转)
VxWorks中断处理程序 ISR特性
safeking · 2008-03-21 · via 博客园 - safeking

VxWorks的中断服务程序(ISR)运行在特定的空间。不同于一般的任务,中断服务程序没有任务上下文,不包含任务控制块,所有的中断服务程序使用同一中断堆栈。

ISR中不能调用可能导致blocking的函数,例如:

(a)不能以semTake获取信号量,因如果该信号量不可利用,内核会试图让调用者切换到blocking态;

(b)malloc和free可能导致blocking,因此也不能使用;

(c)应避免进行VxWorks I/O系统操作(除管道外);

引伸 :
1,在Vxworks里,任务调度器的调用一般有两种情况。一种是从中断或系统调用返回的时候,
     另一种就是代码本身去调用了会引起调度的系统函数,比如taskDelay一类。

2,
在某些操作系统中,是可以在一些特定的低优先级ISR里面进行pend操作的。这要求操作系统的中断,有线程上下文(线程(任务)上下文是任务调度的基础,注意任务上下文不等同于中断上下文)。称为“中断线程化”。
Vxworks的任务调度是依赖于中断的,同时,为了实时性考虑,Vxworks不支持中断线程化,ISR是没有任务(线程)上下文(TCB)的。如果支持中断线程化,那么将导致中断响应时间不确定,实时性难以得到保证。
如果在vxworks里面,使用了可能blocking的代码,那么有2种情况:

(a)一种是关中断运行。那么,在blocking的地方,将永远等待。因为这时候任务调度依赖的时钟中断都不能响应,也就是说任务调度器都不能运行了,系统就死在中断里了。
(b)另一种是开中断进行。那么,在blocking的地方,任务调度器仍然可能运行。此时,任务调度器会企图把ISR的TCB属性改为pend。但是ISR没有TCB,必然也出错。

在Vxworks里,通常是这样处理的:在ISR里,除了对中断寄存器进行必要的操作之外,尽量简单的就是只释放一个信号量,通知一个高优先级的任务来完成可能引起blocking的工作。