由于raw-os的内核集成了系统最大关中断时间的测量,所以测试变得会很简单,用户只需要移植一个定时器的接口就行了。下面是两个平台的具体测试结果:
iar 6.6 编译器优化等级中间(相当于-O2) 在k60 100Mhz 的cpu 平台下,在开了内核最大关中断为0us的特性下, 内核最大关中断时间实际测试为0.7us。
iar 6.6 编译器优化等级中间(相当于-O2) 在k60 100Mhz 的cpu 平台下,在关了内核最大关中断时间为0us的特性下,实际量的内核最大关中断时间为6.2us。
keil 4.71版本下编译器优化等级-O2, 在lpc1788 120Mhz的cpu平台下,在开了内核最大关中断为0us的特性下, 内核最大关中断时间实际测试为0.43us。
keil 4.71版本下编译器优化等级-O2, 在lpc1788 120Mhz的cpu平台下,在关了内核最大关中断为0us的特性下, 内核最大关中断时间实际测试为5.8us。
需要指出的是在开了最大内核0us中断特性的情况下, 内核最大关中断时间是一个稳定的常数,但是在关了最大内核0us中断特性的情况下,内核最大关中断时间取决于使用的系统api。
举个例子,如果用户采用广播的发送信号量,或者广播发送信息到队列,或者使用flag,一次唤醒多个任务的话,内核关中断时间会急剧上升。
大部分应用下关掉最大内核0us中断特性,也能满足应用的需求了。最大内核0us中断特性往往应用在一些极端苛刻实时性的应用下,比如精度需要控制在1us以下的这种应用等等。
非CM的CPU是要关中断,做个汇编封皮,在汇编中关了中断再调用OS的C代码,岂不是最快关中断时间,跟编译器优化级别没有任何关系 本帖最后由 samos2011 于 2015-8-6 17:59 编辑
你理解错了,最大关中断时间的意思了。这个是指关了中断后多长时间再开中断,不是单纯的关中断时间,那根本没任何意义。建议踏踏实实学习rtos基础理论。
本帖最后由 jorya_txj 于 2015-8-10 12:55 编辑
关中断不就是为了避免内核函数重入吗!
CM处理器已经不需要你关中断来避免了
你连<系统调用>都不用(也可能是你不懂),内核函数居然是直接调用,
你好,针对你的描述有两个问题:
1 内核函数为啥不能直接调用?对于一个没有进程概念的rtos来说系统调用是否需要?
2 CM处理器已经不需要你关中断来避免重入,那使用什么来保护临界区?如果通过屏蔽底优先级中断来实现关中断, 在raw-os里面只要把移植关中断的接口改为屏蔽低优先级中断的接口即可,这只是一个简单的移植的工作。架构设计上是完全支持的。
一个rtos的设计必须要考虑各种芯片平台的存在不仅仅是CM处理器。