WINCE下怎么诊断一个驱动有没存在资源锁死的问题?就是多个线程对同一个资源的访问同步互斥没做好。

xqhrs232 2009-11-14 10:21:25
WINCE下怎么诊断一个驱动有没存在资源锁死的问题?就是多个线程对同一个资源的访问同步互斥没做好。
...全文
179 33 打赏 收藏 转发到动态 举报
写回复
用AI写文章
33 条回复
切换为时间正序
请发表友善的回复…
发表回复
ruritanian 2009-11-21
  • 打赏
  • 举报
回复
不是debug版本一样支持断点啊,我经常在retail版本下调试的
qthsrs232 2009-11-21
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 ruritanian 的回复:]
不用debug版本的,但是需要有kitl
[/Quote]

不DEBUG,怎么支持断点,没有断点怎么看STACK和SFR/内存/变量等等的情况
ruritanian 2009-11-21
  • 打赏
  • 举报
回复
为什么看不到?只要有symbol就能看到,当然,release版本有些代码是优化过的,有些变量是看不到的
qthsrs232 2009-11-21
  • 打赏
  • 举报
回复
[Quote=引用 31 楼 ruritanian 的回复:]
不是debug版本一样支持断点啊,我经常在retail版本下调试的
[/Quote]


RELEASE版本看不到STACK和SFR/内存/变量等等的情况吧!VS2005不是DEBUG很多东西看不到的.
xqhrs232 2009-11-16
  • 打赏
  • 举报
回复
觉得还是处理的算法存在某种缺陷!!!那种算法更好呢?
xqhrs232 2009-11-16
  • 打赏
  • 举报
回复
初步发现是一直通不过校验,所以处理线程没数据处理,所以界面会没有东西显示.
但为什么会这样呢?通不过校验怎么会一直发生呢?想不明白?
为什么有时候又是可以通过校验使得材料线程有数据可以处理.
xqhrs232 2009-11-16
  • 打赏
  • 举报
回复
[Quote=引用 23 楼 oneonce 的回复:]
那你设置一下县城的优先级试一下,我在6410上是碰到一运行就卡的情况,设置一下县城优先级。
SetThreadPriority(THREAD_PRIORITY_BELOW_NORMAL);//使用THREAD_PRIORITY_BELOW_NORMAL
[/Quote]

这个应该不是解决问题的根本办法!
OneOnce 2009-11-16
  • 打赏
  • 举报
回复
那你设置一下县城的优先级试一下,我在6410上是碰到一运行就卡的情况,设置一下县城优先级。
SetThreadPriority(THREAD_PRIORITY_BELOW_NORMAL);//使用THREAD_PRIORITY_BELOW_NORMAL
xqhrs232 2009-11-16
  • 打赏
  • 举报
回复
[Quote=引用 21 楼 oneonce 的回复:]
是一运行就很卡? 还是运行了一段时间就很卡。如果是前者可能还好办,后者的话可能就比较棘手。
[/Quote]

两种情况都存在!!!
OneOnce 2009-11-16
  • 打赏
  • 举报
回复
是一运行就很卡? 还是运行了一段时间就很卡。如果是前者可能还好办,后者的话可能就比较棘手。
xqhrs232 2009-11-16
  • 打赏
  • 举报
回复
监视了系统了内存,内存的LOAD百分比是没有什么变化的,什么内存泄漏是不存在的.
91program 2009-11-16
  • 打赏
  • 举报
回复
不打印,说明出现问题,看看从那里开始不再打印信息
xqhrs232 2009-11-16
  • 打赏
  • 举报
回复
[Quote=引用 16 楼 91program 的回复:]
打印消息,来看是否存在死锁
[/Quote]

我现在就是通过打印消息发现死锁了,我在接收线程跟处理消息里面都打印消息,接收里面是会一直打印的,但处理里面打印了一段时间就不打印了.
还发现处理线程不打印消息的时候,系统的CPU使用率从40%直线降为26%,不知道为什么.
guopeixin 2009-11-16
  • 打赏
  • 举报
回复
[Quote=引用 17 楼 xqhrs232 的回复:]
CETK只能测试CE自带的驱动而不能测试写的流驱动吧?
[/Quote]
可以的,遵照tux的框架自己写就可以了
可以使用向导创建
xqhrs232 2009-11-16
  • 打赏
  • 举报
回复
通过打印消息觉得应该不是资源锁死的问题,因为两个线程的消息都有打印.应该是收到的数据一直通不过必要的校验,所以界面没有更新像卡死了一样.
zwtchy123 2009-11-16
  • 打赏
  • 举报
回复
bang ding !!!
qthsrs232 2009-11-14
  • 打赏
  • 举报
回复
CE下那个远程工具可以用这样的功能?
xqhrs232 2009-11-14
  • 打赏
  • 举报
回复
听说用链表可以很好地处理我这个问题,但用链表就不存在同步互斥的问题吗?

CE串口驱动缓冲区数据的管理是个好例子,一个头指针,一个尾指针来弄.但也存在同步互斥的问题啊!


这两种方法那个更好?我现在的缓冲区只是简单地用数组来做的.谁要访问就谁先占住,但没多久就卡死了,接收到了数据,但没处理了.应该是同步互斥没做好!!!
xqhrs232 2009-11-14
  • 打赏
  • 举报
回复
我的驱动是一个线程接数据到缓冲区,处理线程处理缓冲区里面的数据.两个线程都会改变缓冲区的内容.接收线程把数据接到缓冲区后面,处理线程把处理完的数据从缓冲区移除掉.

加了关键区的限制,但限制不住的感觉,过不了多久驱动就卡死了,整个系统的CPU使用率也降下了不少.

我的接收线程是一个中断线程,频繁地被调用到,驱动执行的频率还是很高的,处理线程也需要不断地处理.
xqhrs232 2009-11-14
  • 打赏
  • 举报
回复
我现在有一个驱动就是这样的情况.运行了一段时间就卡死了.但不知道卡在那里了,线程间也做了同步互斥的处理,但觉得没处理好,不知道怎么找到这个问题的所在.
加载更多回复(13)

19,502

社区成员

发帖
与我相关
我的任务
社区描述
硬件/嵌入开发 嵌入开发(WinCE)
社区管理员
  • 嵌入开发(WinCE)社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧