5602|17

73

帖子

0

TA的资源

一粒金砂(初级)

楼主
 

WINCE下如何快速响应中断,而不丢失数据! [复制链接]

问题描述:系统底层以最高优先级,每50ms中断一次,wince创建一个线程响应中断,中断来了读取一次数据。如果不动触摸屏或按键(即不做任何操作),数据读取正常。但是一按触摸屏,线程读取的数据就出错。像是读取数据过程被触摸屏中断抢占了,请各位大大帮帮忙,怎么解决?线程采用普通优先级,若优先级一设高程序就卡死在那了。
此帖出自WindowsCE论坛

最新回复

问题已解决。我是在一个线程类里再创建一个线程响应接收数据,修改了类里线程的优先级,忘了改线程类的优先级了,所以程序老死机。是我犯了低级错误,谢谢各位大大的热心帮助,现在送分!!  详情 回复 发表于 2009-9-9 10:34
点赞 关注
 

回复
举报

69

帖子

0

TA的资源

一粒金砂(初级)

沙发
 
50ms 一次的话不算很快哦,你在线程里面加入临界段试试会不会好一点。
此帖出自WindowsCE论坛
 
 
 

回复

68

帖子

0

TA的资源

一粒金砂(初级)

板凳
 
好的,我马上去试试看,谢谢一楼的建议!
此帖出自WindowsCE论坛
 
 
 

回复

66

帖子

0

TA的资源

一粒金砂(初级)

4
 
http://topic.eeworld.net/u/20090902/19/f2745b71-10f2-4074-a3c1-db83e0200fd2.html

关于S3C2440串口的稳定收发问题
此帖出自WindowsCE论坛
 
 
 

回复

73

帖子

0

TA的资源

一粒金砂(初级)

5
 
引用楼主 wliaoc 的回复:
线程采用普通优先级,若优先级一设高程序就卡死在那了。


最直觉的方法, CeSetThreadPriority 提高 priority, 但是程序会死

1. 将程序 & IST 的演算法优化

2. 换一个更快的 CPU.

Paul, Chao @ Techware
此帖出自WindowsCE论坛
 
 
 

回复

73

帖子

0

TA的资源

一粒金砂(初级)

6
 
是不是 可以 用 isr
此帖出自WindowsCE论坛
 
 
 

回复

63

帖子

0

TA的资源

一粒金砂(初级)

7
 
问题的关键在 IST 中!


中断来了后,IST 被激活,开始读取数据,这个过程是对的;

但如果你读取数据的过程使用了整个【线程时间片】,这样就会卡!


现在不知道你在 IST 中做什么,所以没法回答;

但,如果你能在 IST 中快速读取数据,就可以解决问题。

///////


你可以说说你在 IST 中做了些什么,怎么做的。
此帖出自WindowsCE论坛
 
 
 

回复

82

帖子

0

TA的资源

一粒金砂(初级)

8
 
50ms不算快的。。。。。调整优先级应该可以满足要求的,我做过1s处理过50个中断的。。。。。。
此帖出自WindowsCE论坛
 
 
 

回复

84

帖子

0

TA的资源

一粒金砂(初级)

9
 
数据太多了吧,如果你50ms来一个中断,读一次数据也要50ms,那好了,不用干别的事情了
除非读一次数据在5-10ms还差不多
此帖出自WindowsCE论坛
 
 
 

回复

78

帖子

0

TA的资源

一粒金砂(初级)

10
 
引用 6 楼 zaodt 的回复:
问题的关键在 IST 中!


中断来了后,IST 被激活,开始读取数据,这个过程是对的;

但如果你读取数据的过程使用了整个【线程时间片】,这样就会卡!


现在不知道你在 IST 中做什么,所以没法回答;

但,如果你能在 IST 中快速读取数据,就可以解决问题。

///////


你可以说说你在 IST 中做了些什么,怎么做的。


我现在为了测试方便,底层中断就循环的送1~1000这些数,应用软件中线程函数
DataReadThread(LPVOID LParam)
{
        while (true)
        {
                if(WaitForSingleObject()==WAIT_OBJECT_0)
                {
                        if(ReadFile(HAND1,Receivebuff,40,&real,null)==true)
                        {
                                //读取Receivebuff数据;
                                //结束程序时把读取数据打印出来;
                                //发现打印出来的数据不连续,正常应该1~1000循环的,
                                //触摸屏有点击时就出错或断了
                        }
                }
        }
}
大概是这样代码,因为直接网页上输入指令,不是拷贝代码,可以有写错的地方,大大们多包涵。
前些天出差,没法上网,谢谢各位提供帮助和建议,谢谢大家了!!!
此帖出自WindowsCE论坛
 
 
 

回复

64

帖子

0

TA的资源

一粒金砂(初级)

11
 
引用 8 楼 reallyu 的回复:
数据太多了吧,如果你50ms来一个中断,读一次数据也要50ms,那好了,不用干别的事情了
除非读一次数据在5-10ms还差不多

数据量就是这种要求,其实整个软件不只做这个操作,要处理至少两个相同频度的中断,现在先想办法解决一个中断,一步一步来吧。。。
此帖出自WindowsCE论坛
 
 
 

回复

62

帖子

0

TA的资源

一粒金砂(初级)

12
 
引用 7 楼 seven_zhangxw 的回复:
50ms不算快的。。。。。调整优先级应该可以满足要求的,我做过1s处理过50个中断的。。。。。。

在应用层调整吗?要调整为多高才合适呢?
CeSetThreadPriority可以设置0~255,那怎么确定优先级多少,我设置过几个,都是卡死在那。
用SetThreadPriority设置高于普通一级,也会死。
此帖出自WindowsCE论坛
 
 
 

回复

79

帖子

0

TA的资源

一粒金砂(初级)

13
 
水深....
此帖出自WindowsCE论坛
 
 
 

回复

77

帖子

0

TA的资源

一粒金砂(初级)

14
 
引用 7 楼 seven_zhangxw 的回复:
50ms不算快的。。。。。调整优先级应该可以满足要求的,我做过1s处理过50个中断的。。。。。。


seven_zhangxw 能不能把你弄的中断处理源码公开一下,让我观摩学习一下,谢谢!
此帖出自WindowsCE论坛
 
 
 

回复

73

帖子

0

TA的资源

一粒金砂(初级)

15
 
根据需要调节IST的优先级,驱动最高的是96,之前都是内核用的,我曾经用过SPI接收数据,每秒钟>1000字节,很稳定。
这个关键看你ISR和IST的处理过程,wince也算是一个准实时性的操作系统了。
你所说的优先级高就卡死了,是不是出现了中断资源冲突,还有就是wince不能出现两次优先级反转,否则就虾米。
此帖出自WindowsCE论坛
 
 
 

回复

64

帖子

0

TA的资源

一粒金砂(初级)

16
 
你的IST占用了几个时间片?优化一下吧
或者在ISR里面把数据取干净,给IST处理
此帖出自WindowsCE论坛
 
 
 

回复

63

帖子

0

TA的资源

一粒金砂(初级)

17
 
引用 13 楼 wliaoc 的回复:
引用 7 楼 seven_zhangxw 的回复:
50ms不算快的。。。。。调整优先级应该可以满足要求的,我做过1s处理过50个中断的。。。。。。


seven_zhangxw 能不能把你弄的中断处理源码公开一下,让我观摩学习一下,谢谢!


呵呵,其实我就是调整了优先级。ISR的时间我们没有办法控制,实际上是很快的,小于0个ms;从ISR倒IST的时间,我们是可以控制的,当时,我的IST优先级是250的时候,响应时间是4ms-5ms;我调优先级到90以下,基本上都是0ms了,当然,在这个IST里面,我只做简单的事情,设置事件(用于启动真正需要处理中断数据的线程),然后清中断寄存器,然后返回。
所有的数据处理都是在“真正需要处理中断数据的线程”里面完成的,这个线程的优先级可以很高也可以很低,很高就处理及时一点,但不要高于IST的优先级;如果很低就会变得响应慢,自己权衡吧。
我的IST优先级是20,我的“真正需要处理中断数据的线程”是60,另外我的系统是WM6。。。。
此帖出自WindowsCE论坛
 
 
 

回复

96

帖子

0

TA的资源

一粒金砂(初级)

18
 
问题已解决。我是在一个线程类里再创建一个线程响应接收数据,修改了类里线程的优先级,忘了改线程类的优先级了,所以程序老死机。是我犯了低级错误,谢谢各位大大的热心帮助,现在送分!!
此帖出自WindowsCE论坛
 
 
 

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

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/9 下一条

 
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
快速回复 返回顶部 返回列表