加载中…
个人资料
  • 博客等级:
  • 博客积分:
  • 博客访问:
  • 关注人气:
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
正文 字体大小:

vxWorks任务异常处理(1)

(2016-01-15 19:29:15)
标签:

vxworks

task

异常

it

分类: vxworks

 任务异常的一般表现

l         指令异常:系统打印program异常或instruction access异常

l         访问非法地址异常,串口打印data access异常,如:

             data access
             Exception current instruction address:0x00187d4c
             Machine Status Register:0x00009030
             Data Access Register: 0x8003435c
             Condition Register:0x48000080
             Data storage interrupt Register:0x0000000b
             Task:0xc844f0 "XXX"

l              中断处理中产生的异常。

异常原因

l         堆栈写越界,主要是数组写越界,导致前面声明的变量(因为堆栈是从下往上增长的)或者函数的参数或者函数返回的地址被改写为无效值。

l         堆栈溢出,堆栈声明过小,而函数又声明了大数组,超出堆栈的容量。

l         内存改写,这是最通常出现的原因。包括,指针没有初始化,导致访问随机地址;访问空指针;内存操作范围越界,例如在使用memcpy/memset等函数使用的长度超过所分配,导致改写了其他的指针。因此在定位异常问题过程中,可以通过内存管理先查看一下先前是否有内存写越界的记录,但是内存写越界只有在释放该内存区时才能检查到,如果该内存没有被释放,则即使写越界也是不知道的。

l         系统调用不当,在中断回调中,使用printfsemTake之类可能引起阻塞的操作;printf等使用不当导致内存改写,这些函数在中断回调函数中是严格禁止的。

l         增量编译引起的问题,Tornadoworkbench增量编译有时会出现问题,导致古怪的异常,重新全量编译后,可能个会解决问题。

l         任务抢占引起的问题,当多个任务共同访问一个或者多个变量时,如果互斥不当,可能会产生同步或互斥的问题,比较典型的是:任务AB都使用一个变量指针P;而AB的优先级不同(即存在任务抢占),则他们在释放或者修改这个变量指针的时候,可能会出现随机的异常访问问题。

处理策略

l         如果怀疑是增量编译引起的,则首先尝试全量编译一下工程。

l         分析异常出现时的调用栈信息:以data access异常为例;
          
如果在系统出现异常时接了串口,则可以直接看到类似以下列信息;如果出现异常时没有接串口,则定位问题时可首先接上串口或者Tornado,然后使用“ti”命令也可以看到如下的异常信息:
        data access
        Exception current instruction address:0x00187d4c---
通过这个地址通常可以通过符号表知道异常出现时系统正在运行哪个函数
        Machine Status Register:0x00009030
        Data Access Register: 0x8003435c
        Condition Register:0x48000080
        Data storage interrupt Register:0x0000000b
        Task:0xc844f0 "XXX"                                         --
通过这个参数,可以知道是哪个任务出现的异常

l         使用“checkStack”命令看是否产生了堆栈溢出:如果是XXX任务的队战溢出,则在checkStack的打印中,XXX的堆栈状态会显示成“overflow”

l         使用tt命令查看任务调用栈,通过分析调用栈的每一层函数,尝试找原因,参照上面的可能的原因部分。

l         分析函数调用序列中所访问的全局变量(尤其是指针和数组),看是否存在任务抢占而导致全局指针被修改或者访问无效指针的问题。

摘自 http://bbs.chinaunix.net/forum.php?mod=viewthread&tid=1193618

0

阅读 收藏 喜欢 打印举报/Report
  

新浪BLOG意见反馈留言板 欢迎批评指正

新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 产品答疑

新浪公司 版权所有