wince5.0 DataAbort和位对齐异常

echoJiang 2014-01-07 02:57:10
刚接触wince不久的菜鸟--
做的是一个老化测试用的程序,疲劳测试的时候不定时会出现崩溃,debug模式下抓的错误为:

据说是arm处理器在wince平台存在的一个比较隐晦的问题,改成1字节对齐还是出现了同样的位对齐问题,有点不值所错了。(链接在此http://blog.sina.com.cn/s/blog_4381f9fa0100b756.html)

串口打印如下,
Data Abort: Thread=8d7b2898 Proc=8c226ca0 'Demo.exe'
AKY=00001001 PC=03f924e0(coredll.dll+0x000224e0) RA=1a092b28(Demo.exe+0x00082b28) BVA=1a092b35 FSR=00000003

google说可以在对应的map文件中找到出错的函数,但是0x00082b28在Demo.map中找不到这个地址(最大只到000531f4),还有从RA=1a092b28(Demo.exe+0x00082b28)看,基地址应该是1a092b28-00082b28=1a0100000,而Demo.map中写明基地址为Preferred load address is 00010000,被搞糊涂了,有朋友知道吗,先谢过各位了!
...全文
219 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
wjcapple 2016-06-05
  • 打赏
  • 举报
回复
没有最终稿结果呀
echoJiang 2014-01-09
  • 打赏
  • 举报
回复
时间点到了,还没查出来,转给牛人同事处理了,结贴散分,后面查明真相再来补充
91program 2014-01-08
  • 打赏
  • 举报
回复
引用 11 楼 echojiangyq 的回复:
[quote=引用 9 楼 91program 的回复:] 煲机才出现,可能是内存泄露
呃 有点诡异,有时很快出来有时要很久,基本确定是Gps功能模块有问题,再调调看。。[/quote] 查查代码吧,同时查查是否有越界操作之类。
echoJiang 2014-01-07
  • 打赏
  • 举报
回复
引用 9 楼 91program 的回复:
煲机才出现,可能是内存泄露
呃 有点诡异,有时很快出来有时要很久,基本确定是Gps功能模块有问题,再调调看。。
echoJiang 2014-01-07
  • 打赏
  • 举报
回复
引用 8 楼 accessysq 的回复:
你没用到很正常,如果你的代码有问题,说不定就乱跳。map不是万能的,有些情况是找不到的。 你这种情况我遇到几次。你注意一下出问题是大概执行了什么代码,查查吧,注意结构体有关的东西。 另外看看你的结构体中是否有大数组,如果有时候在结构体的开始定义的。
谢谢回复,现在基本确定为Gps功能模块有问题,确实有结构体和大数组,现在在用加打印的笨办法调,只能先确定代码位置,再处理了。。
91program 2014-01-07
  • 打赏
  • 举报
回复
煲机才出现,可能是内存泄露
  • 打赏
  • 举报
回复
你没用到很正常,如果你的代码有问题,说不定就乱跳。map不是万能的,有些情况是找不到的。 你这种情况我遇到几次。你注意一下出问题是大概执行了什么代码,查查吧,注意结构体有关的东西。 另外看看你的结构体中是否有大数组,如果有时候在结构体的开始定义的。
echoJiang 2014-01-07
  • 打赏
  • 举报
回复
引用 4 楼 91program 的回复:
[quote=引用 3 楼 91program 的回复:] 如果可以通过 USB 在 VS2008 等开发工具中调试,VS2008 在出错时会自动停在你代码出错的地方,这样分析起来会简单很多。
如果这种方法不行,则只能多加打印来分析了。[/quote] 我是用evc4.0,一般的错误debug模式都能跟踪到具体的代码,这个崩溃只给了出错地址和disassembly,跟不下去了,我试下vs2008
echoJiang 2014-01-07
  • 打赏
  • 举报
回复
引用 2 楼 91program 的回复:
PC已经指向 coredll.dll,如果对应 MAP 文件需要 coredll 的 MAP,而不是你应用的 MAP。
问编译nk的同事要了coredll.map,pc地址指向这个函数,不应该啊,似乎没有调用到它的..
 0001:0000121c       LeapYearDaysBeforeMonth    1000221c     coredll_ALL:time.obj
 0001:00001238       NormalYearDayToMonth       10002238     coredll_ALL:time.obj
echoJiang 2014-01-07
  • 打赏
  • 举报
回复
引用 1 楼 accessysq 的回复:
估计你的代码有错误,而出现问题的地方已经跑飞到别的地方了。 对齐这个问题需要你在写代码中比较注意,好好查查你的结构体吧。 比如将buf指针转换成结构体指针,然后操作结构体中的数据?如果有数据没对齐就会出现你这个问题。
哦 谢谢,我再仔细检查一下代码看看
91program 2014-01-07
  • 打赏
  • 举报
回复
引用 3 楼 91program 的回复:
如果可以通过 USB 在 VS2008 等开发工具中调试,VS2008 在出错时会自动停在你代码出错的地方,这样分析起来会简单很多。
如果这种方法不行,则只能多加打印来分析了。
91program 2014-01-07
  • 打赏
  • 举报
回复
如果可以通过 USB 在 VS2008 等开发工具中调试,VS2008 在出错时会自动停在你代码出错的地方,这样分析起来会简单很多。
91program 2014-01-07
  • 打赏
  • 举报
回复
PC已经指向 coredll.dll,如果对应 MAP 文件需要 coredll 的 MAP,而不是你应用的 MAP。
  • 打赏
  • 举报
回复
估计你的代码有错误,而出现问题的地方已经跑飞到别的地方了。 对齐这个问题需要你在写代码中比较注意,好好查查你的结构体吧。 比如将buf指针转换成结构体指针,然后操作结构体中的数据?如果有数据没对齐就会出现你这个问题。

19,500

社区成员

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

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