3123|2

81

帖子

0

TA的资源

一粒金砂(初级)

楼主
 

刚忘记给分了,还是zbuf的问题,求助 [复制链接]

前几天,在跑程序的时候遇到一个zbuf的异常,vxworks打印的调用链如下:
data storage
Exception current instruction address: 0x0050cb60
Machine Status Register: 0x00029230
Data Exception Address Register: 0x0069bf38
Condition Register: 0x44000082
Exception Syndrome Register: 0x00000000
Task: 0xe597970 "CES_BAPCCE"

**************************************************************
*                                                            *
*                3G-Plat PPC Exception Process Result        *
*                                                            *
**************************************************************
Data Access Exception
Exception current instruction address: 0x0050cb60
Data Access Register: 0x0069bf38
Machine Status Register(tEsf.regSet.msr): 0x00029230
Condition Register(tEsf.regSet.cr): 0x44000082
VecNumber = 0x300

-------------------Infomation of Board start-----------------
_NET_ELEMENT=0x00080000      _PHY_BOARD=0x000000a7
_LOGIC_BOARD=0x000000a9
-------------------Infomation of Board End-------------------

-----------------Infomation of Task Start---------------------
Task Name    : CES_BAPCCE
Task id      : 0xe597970
Task options  : 0x4
Task status  : 0x0
Task Current priority : 0x32
Task Normal  priority : 0x32
-----------------Infomation of Task End-----------------------

----------------Current Exception Context Start---------------
pc(tExcRegSet.pc)          = 0x50cb60  _mbufLength
StackFrame(tExcRegSet.gpr[1])  = 0xe597658
lr(tExcRegSet.lr)          = 0x5009ac  zbufLength
----------------Current Exception Context End-----------------

Handle Common Function

Function calling list is as the following...
ret is in the lr register
0x0050cb60      _mbufLength
0x005009ac      zbufLength
0x00280b84      _ZN6CCECTR18CSLPacketAndHeader5BuildEv
0x00276f5c      _ZN6CCECTR17CSectorController23PrepareAccessParametersEv
0x002757d4      _ZN6CCECTR17CSectorController29PrepareAndTransmitSyncCapsuleEv
0x002740cc      _ZNK6CCECTR25ProcessCCBuildCallBac

从调用链的结果分析是跑到_mbufLength里跑飞了,一开始我们认为有可能是传进去的mbufId是NULL导致的,但后来研究了mbufLib中的源代码,发现所有的函数都对入参做了保护,所以不太可能是这个导致。这个问题以前也遇到过,但出现频率极低,属于很烦躁的随机内存异常,到现在我也没再玩出来过~然后看了一下_mbufLength的实现,实现相当简单,就是求一个mbuf链的总长度,实现没发现有什么地方可能导致异常,所以很困惑~~所以想请问一下vxworks的开发高手们,像这种问题一般是什么情况引起的?特别是_mbufLength跑飞可能是什么情况下出现?

附上_mbufLength的实现:

int _mbufLength
(
    MBUF_ID    mbufId                  /* mbufId to find length of */
)
{
    MBUF_SEG        mbuf;
    int            length = 0;        /* total length */

    if (mbufId == NULL ||
        mbufId->type != MBUF_VALID)    /* invalid ID ? */
    {
        errno = S_mbufLib_ID_INVALID;
        return (ERROR);
    }

    for (mbuf = mbufId->mbufHead; mbuf != NULL; mbuf = mbuf->m_next)
        length += mbuf->m_len;

    return (length);                    /* return total length */
}

最新回复

这里面可以飞的地方,只有这里了 for (mbuf = mbufId->mbufHead; mbuf != NULL; mbuf = mbuf->m_next)         length += mbuf->m_len; 看看链表中的内容,如果链表不长的话,把每次值都保存到文件中,解析出来看看!   详情 回复 发表于 2009-4-21 11:24
点赞 关注

回复
举报

70

帖子

0

TA的资源

一粒金砂(初级)

沙发
 
兄弟,仅仅这个貌似没有分析问题...
你应该看看 0x0050cb60 附近的汇编代码...
 
 

回复

81

帖子

0

TA的资源

一粒金砂(初级)

板凳
 
这里面可以飞的地方,只有这里了
for (mbuf = mbufId->mbufHead; mbuf != NULL; mbuf = mbuf->m_next)
        length += mbuf->m_len;

看看链表中的内容,如果链表不长的话,把每次值都保存到文件中,解析出来看看!
 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/8 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表