如转发 请标明出处!
经常有朋友问起软中断的问题... 话说我干了这么多年,还从未在VxWorks领域见过这个词儿,孤陋寡闻了
上网搜了一下,软中断应该是Linux的softirq吧,其典型应用就是中断的bottom half。关于中断,这是嵌入式领域的一个重点词汇,每个OS都支持,从名字来看,肯定是跟硬件有关的。但ISR执行时间过长,就会带来很多麻烦,所以在使用时都会有很多限制。除了这些限制,不同的OS还提出了不同的solution,例如Linux的这个软中断。既然名字里带个"软",就是用软件(内核线程?)来代替ISR里不方便执行的部分程序吧 (如果我说的不对,欢迎指正,我装作没看见)
而VxWorks肯定提供了类似的机制,之前的文章里基本都介绍过,总结一个字,就是: Deferral
(1) 例如在纯应用层,当前台程序的某个工作耗时较长,又急于处理其它工作,就可以将这个耗时的工作扔给某个后台的daemon,我之前贴过一个例子
(2) 如果IO驱动的ISR里需要执行某个读写工作,VxWorks提供了isrDeferJobAdd(),可以将耗时工作交给后台的tIsr任务,随便找个例子
上面这段代码看不懂的话... 咱找个时间再慢慢扒它
(3) 如果是普通的ISR呢?可以使用excJobAdd(),将耗时工作交给tExcTask任务。例如,为什么ISR里可以调用pipe的write()呢?其中一个原因就是它把受限的操作交给后台的tExcTask了
(4) 应用层其实还可以使用OS提供的jobTaskWorkAdd(),它可以将工作交给后台的tJobTask任务
(5) 是不是有点麻烦?其实VxWorks还把(3)和(4)封装到了一起 - 所以,不管泰山,还是3721,直接使用jobAdd()就可以了
这么简单,还用举个例子吗
(6) 哦,万变不离其宗,截图时发现:其实tLogTask也是这种套路呀
这么一叨叨,OS也不复杂嘛
我是泰山 专注VX好多年!
一起学习 共同进步!