当前位置:编程学习 > wap >>

MTK.U8类型导致手机死机(data_abort)

大致代码如下:
static U8 Path1[256] = {0};
static U8 Path2[256] = {0};
static U8 Path3[256] = {0};
static U8 Path4[256] = {0};

static U8 thisvar = 0;


U8 IsOk(void)
{
     return thisvar;
}

其他有2处地方分别对thisvar这个变量赋值0和1

int invoke(void)
{
    //对Path1数组的操作,copy。
    if(IsOk())//这里死机
    {
       //do some thing
     }
}

程序运行到if(IsOk())就挂了,后来把thisvar修改成int就不会挂了。别的c文件也有 if(IsOk())这样的调用。
求解释啊!是否和arm一些优化规则有关系啊,什么原因导致死机的啊,期待高手解释。。。谢谢!

注:用U8类型在mtk6252.10A版本运行正常,在mtk6235.10A上运行死机,改成int后正常。
死机的log如下:

901 901 : 901 [Trace] 12:50:16:000 2011/08/08 MOD_NIL, TRACE_ERROR "[1] fatal error (4): Data_abort - MMI"

901 901 : 901 [Trace] 12:50:16:000 2011/08/08 MOD_NIL, TRACE_ERROR "Exception type: data abort"

901 901 : 901 [Trace] 12:50:16:000 2011/08/08 MOD_NIL, TRACE_ERROR "software version: W10.32.MP.V9"

901 901 : 901 [Trace] 12:50:16:015 2011/08/08 MOD_NIL, TRACE_ERROR "boot mode: normal mode"

901 901 : 901 [Trace] 12:50:16:015 2011/08/08 MOD_NIL, TRACE_ERROR "rtc sec = 50, rtc min = 20, rtc hour = 0"

901 901 : 901 [Trace] 12:50:16:015 2011/08/08 MOD_NIL, TRACE_ERROR "rtc day = 1, rtc mon = 1, rtc wday = 1, rtc year = 4"

901 901 : 901 [Trace] 12:50:16:015 2011/08/08 MOD_NIL, TRACE_ERROR "execution unit: MMIEC_T"

901 901 : 901 [Trace] 12:50:16:031 2011/08/08 MOD_NIL, TRACE_ERROR "status: 0x00000000"

901 901 : 901 [Trace] 12:50:16:031 2011/08/08 MOD_NIL, TRACE_ERROR "stack pointer: 0xF173F6FC"

901 901 : 901 [Trace] 12:50:16:031 2011/08/08 MOD_NIL, TRACE_ERROR "stack dump:"

901 901 : 901 [Trace] 12:50:16:031 2011/08/08 MOD_NIL, TRACE_ERROR "    0x00000045"

901 901 : 901 [Trace] 12:50:16:031 2011/08/08 MOD_NIL, TRACE_ERROR "    0x006D7EF9"

901 901 : 901 [Trace] 12:50:16:031 2011/08/08 MOD_NIL, TRACE_ERROR "    0x006C0FAD"

901 901 : 901 [Trace] 12:50:16:031 2011/08/08 MOD_NIL, TRACE_ERROR "    0x000D0A31"

901 901 : 901 [Trace] 12:50:16:031 2011/08/08 MOD_NIL, TRACE_ERROR "    0x000D079B"

901 901 : 901 [Trace] 12:50:16:046 2011/08/08 MOD_NIL, TRACE_ERROR "    0x006F55B5"

901 901 : 901 [Trace] 12:50:16:046 2011/08/08 MOD_NIL, TRACE_ERROR "    0x006D7F0D"

901 901 : 901 [Trace] 12:50:16:046 2011/08/08 MOD_NIL, TRACE_ERROR "    0x006C1047"

901 901 : 901 [Trace] 12:50:16:046 2011/08/08 MOD_NIL, TRACE_ERROR "    0x00000007"

901 901 : 901 [Trace] 12:50:16:062 2011/08/08 MOD_NIL, TRACE_ERROR "    0x007FEC49"

901 901 : 901 [Trace] 12:50:16:062 2011/08/08 MOD_NIL, TRACE_ERROR "number of messages in the external queue: 0"

901 901 : 901 [Trace] 12:50:16:062 2011/08/08 MOD_NIL, TRACE_ERROR "messages in the external queue:"

901 901 : 901 [Trace] 12:50:16:062 2011/08/08 MOD_NIL, TRACE_ERROR "    MSG_ID_INVALID_TYPE"

901 901 : 901 [Trace] 12:50:16:062 2011/08/08 MOD_NIL, TRACE_ERROR "    MSG_ID_INVALID_TYPE"

901 901 : 901 [Trace] 12:50:16:062 2011/08/08 MOD_NIL, TRACE_ERROR "    MSG_ID_INVALID_TYPE"

901 901 : 901 [Trace] 12:50:16:062 2011/08/08 MOD_NIL, TRACE_ERROR "    MSG_ID_INVALID_TYPE"

901 901 : 901 [Trace] 12:50:16:062 2011/08/08 MOD_NIL, TRACE_ERROR "    MSG_ID_INVALID_TYPE"

901 901 : 901 [Trace] 12:50:16:062 2011/08/08 MOD_NIL, TRACE_ERROR "    MSG_ID_INVALID_TYPE"

901 901 : 901 [Trace] 12:50:16:078 2011/08/08 MOD_NIL, TRACE_ERROR "    MSG_ID_INVALID_TYPE"

901 901 : 901 [Trace] 12:50:16:078 2011/08/08 MOD_NIL, TRACE_ERROR "    MSG_ID_INVALID_TYPE"

901 901 : 901 [Trace] 12:50:16:078 2011/08/08 MOD_NIL, TRACE_ERROR "    MSG_ID_INVALID_TYPE"

901 901 : 901 [Trace] 12:50:16:078 2011/08/08 MOD_NIL, TRACE_ERROR "    MSG_ID_INVALID_TYPE"

901 901 : 901 [Trace] 12:50:16:078 2011/08/08 MOD_NIL, TRACE_ERROR "    MSG_ID_INVALID_TYPE"

901 901 : 901 [Trace] 12:50:16:078 2011/08/08 MOD_NIL, TRACE_ERROR "    MSG_ID_INVALID_TYPE"

901 901 : 901 [Trace] 12:50:16:093 2011/08/08 MOD_NIL, TRACE_ERROR "    MSG_ID_INVALID_TYPE"

901 901 : 901 [Trace] 12:50:16:093 2011/08/08 MOD_NIL, TRACE_ERROR "    MSG_ID_INVALID_TYPE"

901 901 : 901 [Trace] 12:50:16:093 2011/08/08 MOD_NIL, TRACE_ERROR "    MSG_ID_INVALID_TYPE"

901 901 : 901 [Trace] 12:50:16:093 2011/08/08 MOD_NIL, TRACE_ERROR "    MSG_ID_INVALID_TYPE"

901 901 : 901 [Trace] 12:50:16:093 2011/08/08 MOD_NIL, TRACE_ERROR "    MSG_ID_INVALID_TYPE"

901 901 : 901 [Trace] 12:50:16:093 2011/08/08 MOD_NIL, TRACE_ERROR "    MSG_ID_INVALID_TYPE"

901 901 : 901 [Trace] 12:50:16:093 2011/08/08 MOD_NIL, TRACE_ERROR "    MSG_ID_INVALID_TYPE"

901 901 : 901 [Trace] 12:50:16:093 2011/08/08 MOD_NIL, TRACE_ERROR "    MSG_ID_INVALID_TYPE"

901 901 : 901 [Trace] 12:50:16:109 2011/08/08 MOD_NIL, TRACE_ERROR "interrupt mask: 0x00000000 0x00000000"

901 901 : 901 [Trace] 12:50:16:109 2011/08/08 MOD_NIL, TRACE_ERROR "processing_lisr: 0x00000000"

901 901 : 901 [Trace] 12:50:16:109 2011/08/08 MOD_NIL, TRACE_ERROR "lr: 0x000D079B"

901 901 : 901 [Trace] 12:50:16:109 2011/08/08 MOD_NIL, TRACE_ERROR "diagnosis: healthy"

901 901 : 901 [Trace] 12:50:16:125 2011/08/08 MOD_NIL, TRACE_ERROR "owner: "

901 901 : 901 [Trace] 12:50:16:125 2011/08/08 MOD_NIL, TRACE_ERROR "timing check: 0 0 0 0 0 0"

901 901 : 901 [Trace] 12:50:16:125 2011/08/08 MOD_NIL, TRACE_ERROR "fatal error code 1: 0x00000004"

901 901 : 901 [Trace] 12:50:16:125 2011/08/08 MOD_NIL, TRACE_ERROR "fatal error code 2: 0x000D079B"

901 901 : 901 [Trace] 12:50:16:125 2011/08/08 MOD_NIL, TRACE_ERROR "CPSR = 0xA0000033"

901 901 : 901 [Trace] 12:50:16:125 2011/08/08 MOD_NIL, TRACE_ERROR "R0 = 0xF18E2789"

901 901 : 901 [Trace] 12:50:16:125 2011/08/08 MOD_NIL, TRACE_ERROR "R1 = 0x00000045"

901 901 : 901 [Trace] 12:50:16:125 2011/08/08 MOD_NIL, TRACE_ERROR "R2 = 0x0000000A"

901 901 : 901 [Trace] 12:50:16:125 2011/08/08 MOD_NIL, TRACE_ERROR "R3 = 0x006D7EF9"

901 901 : 901 [Trace] 12:50:16:140 2011/08/08 MOD_NIL, TRACE_ERROR "R4 = 0xF17177EC"

901 901 : 901 [Trace] 12:50:16:140 2011/08/08 MOD_NIL, TRACE_ERROR "R5 = 0xF17176EC"

901 901 : 901 [Trace] 12:50:16:140 2011/08/08 MOD_NIL, TRACE_ERROR "R6 = 0x00000008"

901 901 : 901 [Trace] 12:50:16:140 2011/08/08 MOD_NIL, TRACE_ERROR "R7 = 0x006C0FAD"

901 901 : 901 [Trace] 12:50:16:156 2011/08/08 MOD_NIL, TRACE_ERROR "R8 = 0x00000000"

901 901 : 901 [Trace] 12:50:16:156 2011/08/08 MOD_NIL, TRACE_ERROR "R9 = 0x00000000"

901 901 : 901 [Trace] 12:50:16:156 2011/08/08 MOD_NIL, TRACE_ERROR "R10 = 0xF173E1E0"

901 901 : 901 [Trace] 12:50:16:156 2011/08/08 MOD_NIL, TRACE_ERROR "R11 = 0xF173F9E0"

901 901 : 901 [Trace] 12:50:16:171 2011/08/08 MOD_NIL, TRACE_ERROR "R12 = 0x000D0A31"

901 901 : 901 [Trace] 12:50:16:171 2011/08/08 MOD_NIL, TRACE_ERROR "R13 = 0xF173F748"

901 901 : 901 [Trace] 12:50:16:171 2011/08/08 MOD_NIL, TRACE_ERROR "R14 = 0x000D079B"

901 901 : 901 [Trace] 12:50:16:171 2011/08/08 MOD_NIL, TRACE_ERROR "R15 = 0x000A22D4"

901 901 : 901 [Trace] 12:50:16:171 2011/08/08 MOD_NIL, TRACE_ERROR ""

901 901 : 901 [Trace] 12:50:16:171 2011/08/08 MOD_NIL, TRACE_ERROR ""

901 901 : 901 [Trace] 12:50:16:171 2011/08/08 MOD_NIL, TRACE_ERROR ""

901 901 : 901 [Trace] 12:50:16:171 2011/08/08 MOD_NIL, TRACE_ERROR ""

901 901 : 901 [Trace] 12:50:16:171 2011/08/08 MOD_NIL, TRACE_ERROR ""

901 901 : 901 [Trace] 12:50:16:171 2011/08/08 MOD_NIL, TRACE_ERROR ""

901 901 : 901 [Trace] 12:50:16:187 2011/08/08 MOD_NIL, TRACE_ERROR ""

901 901 : 901 [Trace] 12:50:16:187 2011/08/08 MOD_NIL, TRACE_ERROR ""

901 901 : 901 [Trace] 12:50:16:187 2011/08/08 MOD_NIL, TRACE_ERROR ""

901 901 : 901 [Trace] 12:50:16:187 2011/08/08 MOD_NIL, TRACE_ERROR ""

901 901 : 901 [Trace] 12:50:16:187 2011/08/08 MOD_NIL, TRACE_ERROR ""

901 901 : 901 [Trace] 12:50:16:203 2011/08/08 MOD_NIL, TRACE_ERROR ""

901 901 : 901 [Trace] 12:50:16:203 2011/08/08 MOD_NIL, TRACE_ERROR ""

901 901 : 901 [Trace] 12:50:16:203 2011/08/08 MOD_NIL, TRACE_ERROR ""

901 901 : 901 [Trace] 12:50:16:203 2011/08/08 MOD_NIL, TRACE_ERROR ""

901 901 : 901 [Trace] 12:50:16:203 2011/08/08 MOD_NIL, TRACE_ERROR ""

901 901 : 901 [Trace] 12:50:16:203 2011/08/08 MOD_NIL, TRACE_ERROR ""

901 901 : 901 [Trace] 12:50:16:203 2011/08/08 MOD_NIL, TRACE_ERROR ""
如需其他信息请回复告知。
--------------------编程问答-------------------- 这个有意思啊 !! 呼吁版主加个精吧~~~
看样子是和arm流水线脱不了关系了 
if(U8) VS if(int)  --------------------编程问答-------------------- 估计对数组操作那块有问题吧 --------------------编程问答-------------------- if(IsOk()) 应该没有什么问题,估计数组操作什么有问题啦,估计得好好查看下代码是否有越界等操作。
static U8 Path1[256] = {0};
static U8 Path2[256] = {0};
static U8 Path3[256] = {0};
static U8 Path4[256] = {0};
这个方法定义数组真够浪费的 --------------------编程问答--------------------  //对Path1数组的操作,copy。

这里没有死机,也是U8操作。
关注中... --------------------编程问答-------------------- 看看ARM编译选项里面是不是对int和U8做了字节对齐处理
如果没有的话 int占几个bit U8占几个
或者可以试试写成下面这样
static U8 Path1[256] = {0};
static U8 Path2[256] = {0};
static U8 Path3[256] = {0};
static U8 Path4[256] = {0};
static U8 temp[4];
static U8 thisvar = 0;
static U8 temp2[3];
--------------------编程问答-------------------- 代码全部贴出来才能知道 --------------------编程问答-------------------- 代码全部贴出来才能知道 --------------------编程问答-------------------- 代码全部贴出来才能知道 --------------------编程问答-------------------- 去掉 【对Path1数组的操作,copy。】这段操作看看是否会死?
补充:移动开发 ,  移动开发其他问题
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,