5687|6

420

帖子

0

TA的资源

纯净的硅(初级)

楼主
 

关于rtx的运行效率问题 [复制链接]

本帖最后由 jorya_txj 于 2015-9-8 15:23 编辑

rtx有一个很致命的问题就是运行效率问题。rtx在中断里面每调用一次信号量或者事件或者mail box 等系统函数,都会往一个缓冲区里面压,然后触发pending,然后在pending里面取得这个缓冲区里面存的数,然后出pending切换到任务中去。

这个逻辑看起来无可厚非,我们来研究一下触发这个逻辑所需要的时间。rtx在中断里面触发一次事件也就是说压缓冲区以及触发pending的时间 在100MHZ的cpu上假设为0.5us,进入penging后需要压寄存器,这个时间加上取数据的时间,算他0.8us时间。也就是说比起普通的rtos来说这个过程多了0.5us + 0.8us = 1.3us的时间。普通架构的rtos响应中断后直接会在中断内执行内核函数,不会有额外的开销。

这样会带来一个严重的cpu执行效率问题,假设系统中有一个50us频率的中断,或者更短时间的中断,每一次执行都会调用内核函数从而带来消耗1.3us的额外时间,这样一来。基本上这个架构就被打残废了,相比普通中断架构的rtos运行效率会非常的底下。事实上系统中会有很多的中断执行内核函数,所以这个运行效率会很差。

每一种架构都会有其所在的缺点,并不是神一般的存在。

翻阅threadx的网站找到了两种中断架构的os的比较,这个深度的文章应该是threadx作者写的,应该能充分说明问题了。rtx 属于 Segmented Interrupt Architecture 这种架构。欢迎拍砖。
http://rtos.com/articles/18835

最新回复

你的ARMv5版OS其实做的挺好的,不要滥竽充数的说支持ARMv7-M.  详情 回复 发表于 2015-9-10 10:19
点赞 关注

回复
举报

27

帖子

0

TA的资源

一粒金砂(中级)

沙发
 
菜鸟来给txj顶贴。
 
 

回复

130

帖子

1

TA的资源

一粒金砂(高级)

板凳
 
RTX是一个实时OS,在用户中断函数中调用OS函数必定会切换任务
RTX是一个为CM设计的不关中断的OS,运用了CM的先进特性避免任务间的并发

用户能在中断中使用的OS函数是有限的.且只有3个是写操作,如:
isr_evt_set,
isr_sem_send,
isr_mbx_send

且同样有另外3个相同功能函数供任务使用,如:
os_evt_set,
os_sem_send,
os_mbx_send,
任务用的这3个函数运行在特权级(经SVC调用),由于RTX是不关中断的,所以这3个函数随时可能被中断
而在用户中断中又调用了另外3个对应的函数,如果isr函数直接写操作的话就出现了经典的并发问题

举例:任务A等待0x0011事件,任务B会择机设置任务A的0x0001事件,某用户中断设置任务A的0x0010事件,如果刚好在
任务B执行os_evt_set期间的p_tcb->events |= 0x0001 语句发生用户中断,如果isr_evt_set直接设置
p_tcb->events |= 0x0010的话,当中断返回,p_tcb->events |= 0x0010设置是无效的.也就意味着丢失了一个重要的信号,
对于应用是致命的,一般结构的OS选择关中断避免此类并发.

但是聪明的RTX在isr函数中并没有直接写操作,而是将参数入队,然后悬起PendSV,用户中断返回后继续执行刚才被中断的os_evt_set函数
os_evt_set函数返回时由于咬尾中断特性CPU转而运行PendSV,在PendSV中检查是否需要处理队列.这样就保证了os_evt_set与isr_evt_set
的执行是串行化的.

只有"精妙绝伦"4个字才能形容RTX的这个设计,

RTX是一个绝对可靠的OS,永不关中断,用户的任何中断都能立即得到响应.ARM官网说到"您可以信心十足的将RTX用于您的产品设计中"

点评

答非所问。  详情 回复 发表于 2015-9-10 09:35
 
 
 

回复

420

帖子

0

TA的资源

纯净的硅(初级)

4
 
samos2011 发表于 2015-9-9 09:50
RTX是一个实时OS,在用户中断函数中调用OS函数必定会切换任务
RTX是一个为CM设计的不关中断的OS,运用了CM的 ...

答非所问。

点评

你都不知道用户中断函数调用RTX的isr_evt_set函数为什么要悬起PendSV,因为RTX是实时OS,中断函数必定切换任务,而你却说切换任务的过程是浪费时间. 你那个50us举例貌似你都不懂OS的应用. 还大言不惭的说打残废! 都  详情 回复 发表于 2015-9-10 10:01
 
 
 

回复

130

帖子

1

TA的资源

一粒金砂(高级)

5
 
本帖最后由 samos2011 于 2015-9-10 10:06 编辑

你都不知道用户中断函数调用RTX的isr_evt_set函数为什么要悬起PendSV,因为RTX是实时OS(既然中断中要设置事件,有可能高优先级的任务需要运行),中断函数必定切换任务,而你却说切换任务的过程是浪费时间.
你那个50us举例貌似你都不懂OS的应用.
还大言不惭的说打残废!
都不想说你
你不懂CM基本可以肯定了
真搞不懂你哪里来的信心做LPC4357开发板,好好玩你的2410吧!

点评

http://rtos.com/articles/18835 先把rt thread 作者写的文章好好看一下,希望你能看的懂中断架构。理解了之后再来讨论。乱喷没啥意义。  详情 回复 发表于 2015-9-10 11:39
 
 
 

回复

130

帖子

1

TA的资源

一粒金砂(高级)

6
 
你的ARMv5版OS其实做的挺好的,不要滥竽充数的说支持ARMv7-M.
 
 
 

回复

420

帖子

0

TA的资源

纯净的硅(初级)

7
 
本帖最后由 jorya_txj 于 2015-9-10 11:42 编辑
samos2011 发表于 2015-9-10 10:01
你都不知道用户中断函数调用RTX的isr_evt_set函数为什么要悬起PendSV,因为RTX是实时OS(既然中断中要设置 ...

http://rtos.com/articles/18835  
先把threadx 作者写的文章好好看一下,希望你能看的懂中断架构。理解了之后再来讨论。乱喷没啥意义。
 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/8 下一条
有奖活动 | PI PowiGaN技术学习中心,全方位解读PI 1700V GaN: InnoMux-2 EP技术精髓 ...
活动时间:即日起-2025年3月23日
1、进入 PI PowiGaN技术学习中心,点击任意视频 ,填写并提交表单即可观看(只需提交1次表单);
2、活动结束后,将从视频总观看时长>=5分钟的小伙伴中,随机抽取30名幸运者派送50元京东卡!

查看 »

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

 
机器人开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表