必修: VSF中的抢占与协作以及实时性优先级和线程安全问题

参考:VSF的事件驱动: http://www.jianshu.com/p/f0cbf86d8fed

这里介绍一下VSF的比较关键的设计,就是对各种不同实时性任务的处理,以及一些使用原则和限制。VSF的抢占是事件队列的抢占,运行在PendSV中断里的事件队列和直接抢占运行在main里的事件队列,抢占就只是硬件的中断抢占;VSF的协作是一个事件队列内部的事件,是以协作方式运行的,互相不能抢占。一种特殊情况是没有事件队列的情况,试想各个硬实时中断里,如果没有硬实时操作,而只是发送事件给PendSV事件队列,然后PendSV中再依次处理,是否等效于把这些硬实时中断都改成协作方式(中断互相不能抢占),并且中断处理函数中直接调用事件处理函数?这样可以免去事件队列和相应的代码,并且永远不会存在短时间内产生太多事件而溢出事件队列的情况。

那么什么时候必须用事件队列,什么时候可以省掉事件队列呢?
原则1: 当存在高优先级任务向低优先级任务发送事件的情况,必须使用事件队列,以避免抢占引起的原子性问题。
前面所说的没有事件队列的情况,实际上就是可以不需要硬实时的情况,那就不存在硬实时任务发送事件给软实时任务。那么,什么时候可以不用事件队列也应该很清楚了。实际应用中,一般最高优先级的任务,不存在接收更高优先级任务发送的事件的情况,所以可以不需要事件队列。

上面说的是高优先级任务发事件给低优先级任务,那么低优先级任务发送事件给高优先级任务时候,会出现什么问题呢?
如果高优先级的任务没有事件队列的话,那么低优先级任务发送事件的时候,会调用高优先级任务的事件处理函数(以低优先级执行),这样,就可能存在抢占的问题了。所以,VSF中任务如果调用不同事件队列中的任务的事件处理函数(因为对应的任务没有事件队列),会先关闭对应的事件队列(关闭对应的中断优先级,不会影响中断标志),调用完事件处理函数后,再重新打开。当然,一种最简单的方式是(原则1的扩展):
原则2: 当存在不同优先级任务向本优先级任务发送事件的情况,使用事件队列,以避免抢占引起的原子性问题。

最后要说一下基础模块的线程安全问题,基础模块比如bufmgr、timer等,可能会需要被多种优先级的任务调用,而这些基础模块在设计中,是没有保护的。但是如果在这些模块中,直接关闭中断的话,可能会引起硬实时任务延时过长。这里处理方式可以是这样,这些模块的线程安全问题,是关闭除实时性优先级外,其他优先级(cortexM的BASEPRI寄存器)。限制是,硬实时中,不能使能这些模块。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,293评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,604评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,958评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,729评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,719评论 5 366
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,630评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,000评论 3 397
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,665评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,909评论 1 299
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,646评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,726评论 1 330
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,400评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,986评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,959评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,197评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 44,996评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,481评论 2 342

推荐阅读更多精彩内容

  • 又来到了一个老生常谈的问题,应用层软件开发的程序员要不要了解和深入学习操作系统呢? 今天就这个问题开始,来谈谈操...
    tangsl阅读 4,085评论 0 23
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,594评论 18 139
  • 感谢主治医生在等不到手术室的情况下在本层楼的换药室给我做手术!感赏医生的技术高明,虽然嘴上说这个位置不好找,却在半...
    旦子阅读 227评论 7 3
  • 静若凌寒冰魄,动如御海蛟龙。 腾云坐浪漫长空。 皑皑风鹤唳,点点绛梅红。 素裹妖娆微笑,银妆绰约玲珑。 菁华俏舞弄...
    A幸运点阅读 396评论 23 11