前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >关于软中断

关于软中断

作者头像
Taishan3721
发布2022-01-04 14:16:07
1.5K0
发布2022-01-04 14:16:07
举报
文章被收录于专栏:这里只有VxWorks这里只有VxWorks

如转发 请标明出处!

经常有朋友问起软中断的问题... 话说我干了这么多年,还从未在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好多年!

一起学习 共同进步!

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2021-12-26,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 这里只有VxWorks 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档