社区
嵌入开发(WinCE)
帖子详情
如何实现从中断ISR到IST的时间比较恒定,或者小于某一特定时间。
wjf_zjut
2009-03-23 04:50:29
编驱动时,发现。一般情况下,中断ISR到IST的响应时间很快,几十个US足够了。但是偶有这么一两次,响应速度极慢。大概有几十个MS。这个是由于有更高优先级中断抢先了,还是由于系统调度产生的原因? 我要是想做到,中断ISR到IST的响应时间无论在什么情况下都小于某一个值,比如200US,如何能做到,把中断优先级提高,能解决这一问题吗?
...全文
399
16
打赏
收藏
如何实现从中断ISR到IST的时间比较恒定,或者小于某一特定时间。
编驱动时,发现。一般情况下,中断ISR到IST的响应时间很快,几十个US足够了。但是偶有这么一两次,响应速度极慢。大概有几十个MS。这个是由于有更高优先级中断抢先了,还是由于系统调度产生的原因? 我要是想做到,中断ISR到IST的响应时间无论在什么情况下都小于某一个值,比如200US,如何能做到,把中断优先级提高,能解决这一问题吗?
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
16 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
wjf_zjut
2009-03-31
打赏
举报
回复
结贴
paul_chao
2009-03-25
打赏
举报
回复
1. Thread 執行次序是根據 priority, 但同一 priority 則是 round robin, 所以你要先確定你的機器上不會出現相同或是更高 priority 的 thread.
2. Kernel 大部份是 MS 寫的, 但裡面一堆東西 (OEM or OAL 開頭的) 是在你的 bsp 內, 若是你在 OEMInterruptHandler 裡面做一些耗時間的事, 系統還是會動, 但是下一個中斷被 acknowledge 的時間就會被拖延, 因為 ARM core 只有一個中斷, 所以 MS 是沒辦法保證 ARM 下的 ISR latency.
3. Interrupt Controller 通常可以設定硬體的 priority, 記得要先設好.
你說的非常好, WINCE 某些地方是可以訂制的.
所以, 你用這些方法, 或許可以測出中斷發生時有 99.999% 的 200 us 達成率, 但是沒人可以跟你保證 100% 的達成率, 除非你能保證你所提供的每一段 code 的執行時間.
通常, us 等級的東西, 用 wince 那麼大的系統來做, 是有一些風險的.
Paul, Chao @ Techware
wjf_zjut
2009-03-25
打赏
举报
回复
我看了一下PB的帮助,ISR latency指的是CPU从响应硬件中断到开始执行相应ISR的时间。由于这个任务是由,KERNEL执行的所以MS可以保证。
而IST latency是指从ISR结束提交SYSINTR_XXX,到响应IST的时间间隔。因为这里涉及到线程的调度,而WINCE采用的是基于优先级的时间片算法对线程进行调度的。这里面有两点导致MS保证不了IST latency,一个是MS不知道某个特定系统有多少个更高优先级的线程来抢占内核时间;二是单个IST的执行时间未知。说白了,WINCE是可以订制的!
但我想这两点订制内核的人可以保证,首先我可以确定我这个系统要执行哪些IST。而且每个IST的优先级是有可能设置或者得知的,线程执行时间也可以测量出来。那么问题就可以解决了。简单的莱,比如:我把我这个中断IST的优先级设为0,也就是最高,保证整个系统就它的优先级最高,也就是说每次都是先响应它,这样IST latency就可以控制在一个很小的值了。
请教,paul_chao,我这样的理解正确吗?
wjf_zjut
2009-03-25
打赏
举报
回复
我大概明白了,谢谢你!
paul_chao
2009-03-24
打赏
举报
回复
Microsoft 從來沒保證 IST latency, WinCE 的 realtime, 指的是 ISR latency 是可預估的, 若是你有應用需要保證 IST latency, 你可能要考慮
1. 換一個 OS => 不在 WinCE 版討論.
2. 將該 IST 的功能, 放在 ISR 內, 優雅一點的寫一個 Installable ISR, 不用動到 kernel code, 暴力一點地就直接把 OEMInterruptHandler 改掉.
雖然你沒描述你是用哪一個 CPU, 但能簡單地用 GPIO, 應該是 ARM (or other RISC), 其實, ARM 的 IRQ 只有一個, 所以沒有 Nested IRQ 的觀念, 所以連 ISR latency 都沒辦法絕對地保證.
當然, 你改了 ISR, 你自己要小心 side effect.
Paul, Chao @ Techware
wjf_zjut
2009-03-24
打赏
举报
回复
把IST的优先级设置为0,也就是最高,几率小多了(但还是有,说明没根除!)。但是疑问来了,因为硬件中断优先级和中断线程优先级不是同一个东西。
我给高优先级的硬件中断,设置一个低优先级的中断线程。然后再给一个低优先级的硬件中断设置一个高优先级的中断线程,当两个中断同时发生的时候,最终是谁先响应呢?
wjf_zjut
2009-03-24
打赏
举报
回复
我概念不清,从ISR响应IST应该是线程优先级的问题。从硬件中断响应ISR才需考虑中断优先级。现在情况是每次中断ISR响应正常的,所以应该修改IST优先级!
wjf_zjut
2009-03-24
打赏
举报
回复
[Quote=引用 6 楼 singlerace 的回复:]
中断优先级调高,IST线程优先级调到最高试试。
[/Quote]
对哦,还有IST线程也有优先级的!
wjf_zjut
2009-03-24
打赏
举报
回复
[Quote=引用 10 楼 paul_chao 的回复:]
Microsoft 從來沒保證 IST latency, WinCE 的 realtime, 指的是 ISR latency 是可預估的, 若是你有應用需要保證 IST latency, 你可能要考慮
1. 換一個 OS => 不在 WinCE 版討論.
2. 將該 IST 的功能, 放在 ISR 內, 優雅一點的寫一個 Installable ISR, 不用動到 kernel code, 暴力一點地就直接把 OEMInterruptHandler 改掉.
雖然你沒描述你是用哪一個 CPU, 但能簡單地用 GPIO, 應該是 ARM (or other RISC), 其實, ARM 的…
[/Quote]
很有启发,我好好研究一下!
friendfish
2009-03-24
打赏
举报
回复
拜楼上
singlerace
2009-03-23
打赏
举报
回复
中断优先级调高,IST线程优先级调到最高试试。
-小仙-
2009-03-23
打赏
举报
回复
[Quote=引用 3 楼 wjf_zjut 的回复:]
在ist和isr中加一条写GPIO的指令,先置高,再拉低。用示波器看高电平时间!在这里面调试信息是万万不能加,不然
速度极慢!
[/Quote]
有意思
gooogleman
2009-03-23
打赏
举报
回复
几十个MS也很正常,因为wince不是实时操作系统,不适用工控的。
上次我提高键盘驱动的优先级也是没有用。你现在不妨试试。哈哈,告诉我提高到驱动最高优先级97看看能快多少。
wjf_zjut
2009-03-23
打赏
举报
回复
在ist和isr中加一条写GPIO的指令,先置高,再拉低。用示波器看高电平时间!在这里面调试信息是万万不能加,不然
速度极慢!
gooogleman
2009-03-23
打赏
举报
回复
我记得MSDN有帮助说这个的。你找找。我现在也找不到了 。(*^__^*) 嘻嘻……。
gooogleman
2009-03-23
打赏
举报
回复
你是怎么测试到的时间?
WinCE
中断
处理程序
ISR
详解
首先来解释一下, OAL实际上就是一个硬件的抽象层,WinCE的内核通过OAL来和硬件进行通信,应该说它并不包含硬件外设的驱动,而只是对基于处理器本身的硬件模块的控制。
ISR
(Interrupt service routine),
中断
处理程序。 WinCE实际上使用
ISR
来处理
中断
,即默认的
中断
入口函数
ISR
是OEM
实现
的一段这段处理代码,它属于OAL层的一部
中断
服务子程序(
ISR
)
中断
是嵌入式系统中重要的组成部分,这导致了很多编译开发商提供一种扩展-让标准C支持
中断
。其代表事实是,产生了一个新的关键字__interrupt(51即如此)。下面的代码就使用了__interrupt关键字去定义了一个
中断
服务子程序(
ISR
),请评论一下这段代码的。 __interrupt double compute_area (double radius) { double are......
中断
处理过程和
中断
服务程序
ISR
的限制
在程序员面试和笔试中
中断
是一个经常被问及的很基础的问题,本文对这次问题做一点简单说明。
中断
处理过程:一次完整的
中断
过程由
中断
请求、
中断
响应和
中断
处理三个阶段组成。
中断
处理流程:关
中断
->保存断电保护现场->判断
中断
源转到相应的
中断
服务->开
中断
->执行相应的
中断
服务程序(
ISR
)->关
中断
->恢复现场恢复断点->开
中断
->返回断点
中断
服务程序的限制
中断
服务程序(
ISR
)
中断
服务程序 关键词:软
中断
、
中断
向量、
中断
向量表、TSR内存驻留、DOS重入、
中断
请求、段地址、偏移量、寄存器、BIOS、DOS、setvect ( )、getvect ( )、keep ( )、disable ( )、enable ( )、geninterrupt ( )、int86 ( )、interrupt 对于一般的C语言爱好者而言,就如何在C中使用
中断
例程这一问题应该已经非常熟悉,例如,我们可以通过int86 ( )函数调用13H号
中断
直接对磁盘物理扇区进行操作,也可以通过INT86 .
中断
机制
isr
ire
嵌入开发(WinCE)
19,502
社区成员
41,568
社区内容
发帖
与我相关
我的任务
嵌入开发(WinCE)
硬件/嵌入开发 嵌入开发(WinCE)
复制链接
扫一扫
分享
社区描述
硬件/嵌入开发 嵌入开发(WinCE)
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章