打印

中断不如查询好吗?arm中断疑问

[复制链接]
2579|12
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
quarticarm|  楼主 | 2011-11-22 09:44 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
我公司是arm核上的裸奔系统,多媒体处理,arm+DDR2内存,主流程就是一个大循环,我发觉IIC代码都不用中断做,甚至整个系统都不用中断,没有串口通讯。
  同事告诉我,我们arm用了mmu,关键用了cache,很多代码在cache中,用了中断,上下文切来切去,cache装上,中断玩了,马上卸掉,效率反而低。
     但是我想,cache不是可以设置中断代码No cache 的嘛~或者其中有我想不到的地方,大家看看~~

相关帖子

沙发
xinzha| | 2011-11-22 11:06 | 只看该作者
复杂操作系统中的中断和异常更加频繁,不用cache会死人的。
cache的刷新和替换是有它的内部算法和策略的,不存在说退出中断cache内容就一定会被刷掉的情况,除非你的cache大小只有流水线长度那么大。举个例子来说,一般cache是每路4k左右的大小,如果你的整个程序都小于4k,运行一段时间之后,所有能跑到的代码就都已经在cache里,干脆都不用刷新了。

使用特权

评论回复
板凳
quarticarm|  楼主 | 2011-11-22 13:58 | 只看该作者
复杂操作系统中的中断和异常更加频繁,不用cache会死人的。
cache的刷新和替换是有它的内部算法和策略的,不存在说退出中断cache内容就一定会被刷掉的情况,除非你的cache大小只有流水线长度那么大。举个例子来说, ...
xinzha 发表于 2011-11-22 11:06

我们的主程序3M,但是我感觉,中断的东西如果不多,比如我们,就IIC可以中断,串口都没有,不cache应该可以吧,所以我同事说,用中断打乱流程,反而效率低下也不对吧

使用特权

评论回复
地板
airwill| | 2011-11-23 12:27 | 只看该作者
不cache 是不合理的.
中断打乱流程, 也是真的.
但是是否这样就会效率低了呢, 大大的未必.
如果很短的延时等待就能等到数据, 用中断会很频繁切换流水线. 可能中断会反而导致效率下降.
但是楼主的系统, arm+DDR2内存的多媒体处理系统, I2c 再频繁, 最高也不见得超过 100K/s 去.
对于动辄 几百M 的 ARM 来说, 几千的机器周期才冒出一个中断, 不频繁, 一点都不频繁.

使用特权

评论回复
5
quarticarm|  楼主 | 2011-11-23 13:51 | 只看该作者
不cache 是不合理的.
中断打乱流程, 也是真的.
但是是否这样就会效率低了呢, 大大的未必.
如果很短的延时等待就能等到数据, 用中断会很频繁切换流水线. 可能中断会反而导致效率下降.
但是楼主的系统, arm+DDR2内存 ...
airwill 发表于 2011-11-23 12:27

中断代码很小通常,为什么不cache不合理呢 ?
还有你的意思是,中断不止影响cache,还打乱流水线 ?

使用特权

评论回复
6
xinzha| | 2011-11-23 14:48 | 只看该作者
JMP, LOAD这些指令都会打乱流水线,但是也一定要用,你的系统是否使用中断服务还是轮询完全取决于你自己的应用。如果你的中断一秒钟一次,轮询也无所谓(你的大循环可别比一秒都长),如果你的中断一秒钟很多次,你怎么保证轮询方式一定不丢中断,万一中间有那个顺序执行的函数卡住,中断就会丢。

使用特权

评论回复
7
quarticarm|  楼主 | 2011-11-24 09:17 | 只看该作者
JMP, LOAD这些指令都会打乱流水线,但是也一定要用,你的系统是否使用中断服务还是轮询完全取决于你自己的应用。如果你的中断一秒钟一次,轮询也无所谓(你的大循环可别比一秒都长),如果你的中断一秒钟很多次,你 ...
xinzha 发表于 2011-11-23 14:48

中断一定要cache,为了速度,你的意思收到了;
但是如果cache已经flush了,流水线当然也被打乱了,其实替换cache和流水线,是一件事情吧

使用特权

评论回复
8
xinzha| | 2011-11-24 13:45 | 只看该作者
不管开不开cache,好的中断处理函数对整个工程的影响极小,我的意思是不要因噎废食,因为所谓的cache和中断的相互影响就去禁止中断。
Cache和流水线不是一回事,只是有了cache可以让流水线跑得更顺畅。

使用特权

评论回复
9
quarticarm|  楼主 | 2011-11-24 17:14 | 只看该作者
不管开不开cache,好的中断处理函数对整个工程的影响极小,我的意思是不要因噎废食,因为所谓的cache和中断的相互影响就去禁止中断。
Cache和流水线不是一回事,只是有了cache可以让流水线跑得更顺畅。 ...
xinzha 发表于 2011-11-24 13:45

恩,对,cache喂流水线具体的指令~

使用特权

评论回复
10
airwill| | 2011-11-25 10:23 | 只看该作者
中断代码很小通常,为什么不cache不合理呢 ?
还有你的意思是,中断不止影响cache,还打乱流水线 ?
quarticarm 发表于 2011-11-23 13:51


是的, 中断代码很小, 也应该 Cache. 中断的执行不止影响cache,因为有转移, 肯定打乱流水线!
    另外, 往往 Cache 都是多组相连的, 所以小的中断执行未必冲刷掉主程序的 Cache 映射.

使用特权

评论回复
11
bald| | 2011-11-25 22:41 | 只看该作者
如果中断程序量不大,可以用锁定 技术。如果不在运行过程中做替换,这个技术并不复杂。程序数据都可以锁定。在配置锁定方案后可以像往RAM中加载程序一样调入程序。

使用特权

评论回复
12
quarticarm|  楼主 | 2011-11-28 10:50 | 只看该作者
如果中断程序量不大,可以用锁定 技术。如果不在运行过程中做替换,这个技术并不复杂。程序数据都可以锁定。在配置锁定方案后可以像往RAM中加载程序一样调入程序。 ...
bald 发表于 2011-11-25 22:41

怎么锁定?arm还有个锁定技术 ?baidu不到啊

使用特权

评论回复
13
bald| | 2011-11-28 18:13 | 只看该作者
不是ARM的锁定技术,而是cache的锁定技术。这个可以从MMU的管理章节里找到。注意Icache和Dcache的
锁定方法不同。
其实很简单,难点不在锁定过程,而是整个内存管理方案,如何申请和释放所需cache需要查看操作系统相应规范。不过裸奔系统内存是自己分配的,因而会简单得多。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

0

主题

32

帖子

1

粉丝