当前位置: 代码迷 >> WinCE >> wince5.0 DataAbort和位对齐错误
  详细解决方案

wince5.0 DataAbort和位对齐错误

热度:283   发布时间:2016-04-28 12:12:08.0
wince5.0 DataAbort和位对齐异常
刚接触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,被搞糊涂了,有朋友知道吗,先谢过各位了!

------解决方案--------------------
估计你的代码有错误,而出现问题的地方已经跑飞到别的地方了。
对齐这个问题需要你在写代码中比较注意,好好查查你的结构体吧。
比如将buf指针转换成结构体指针,然后操作结构体中的数据?如果有数据没对齐就会出现你这个问题。
------解决方案--------------------
PC已经指向 coredll.dll,如果对应 MAP 文件需要 coredll 的 MAP,而不是你应用的 MAP。