收到RECEIVE_REQ_MSG消息时会运行以下的代码,这里由于某种原因m_receiverSlaverController的值仍为NULL,并没有指向详细的CReceiverSlaverController类。运行到ReceiveHandler函数时,在ReceiveHandler函数中,会通过CReceiverSlaverController类的成员变量m_measurementAgent(类型为Agent类)调用Agent类的成员函数handleMessage。然后在ReceiveHandler函数中发生了訪问非法内存0xE8A4的异常。

这是由于:在运行m_receiverSlaverController->ReceiveHandler时,尽管m_receiverSlaverController指针的值为NULL,但由于类的成员函数是全部类对象的共享代码,所以通过空指针m_receiverSlaverController是能够调用ReceiveHandler函数的(经查看汇编代码。调用该函数时。地址是写死的),但在运行到ReceiveHandler内部的代码时出现了问题。这是由于在ReceiveHandler函数中,获取类CReceiverSlaverController的成员变量m_measurementAgent地址的办法是从m_receiverSlaverController处(实际上就是类第一个成员变量m_srioInterface所在地址处)偏移0xE8A4得到,由于m_receiverSlaverController为空。所以计算得到的m_measurementAgent地址就是0xE8A4,所以从地址0xE8A4处读取m_measurementAgent的值会出问题。这涉及了读取非法内存0xE8A4的操作,所以TI
DSP CPU的L1D内存控制器会检測到该非法訪问,并通过EXCEPTION机制上报该错误。

case RECEIVE_REQ_MSG:

{

            m_receiverSlaverController->ReceiveHandler(&messagePointer);

//m_receiverSlaverController为类CReceiverSlaverController指针

            break;

}

... ....

void CReceiverSlaverController::ReceiveHandler(void** ninja_message)

{

      m_measurementAgent->handleMessage(ninja_message);

}

类CReceiverSlaverController:

class CPuschReceiverSlaverController

{

public:

......................

void      ReceiveHandler(void** ninja_message);

......................

         private:

void        *m_srioInterface;

......................

Agent    *m_measurementAgent; //该成员变量相对于类第一个成员变量m_srioInterface的偏移为0xE8A4. Agent为类的类型.

......................

}

非法内存读的上报log:

FATAL EXCEPTION Nid:0x1271 TYPE:EXTERNAL:[0xEA07A]CpuL1DMemoryProtectionFault Violated memory address(L1DMPFAR):0x0000E8A4Local access type:supervisor read
**

021817 17.06 17:47:03.421  [192.168.255.1]  ** FATAL APPLICATION ERROR Nid:0x1271 Total count of exceptions INT:0 EXT:1 OTHER:0 Current program address(NRP):0x820F4024 (该地址是进入EXCEPTION代码之前保存的返回地址,该地址就是handleMessage函数某条指令的地址)**

DSP开发中遇到的问题 - 类指针未初始化后果的更多相关文章

  1. android开发中关于继承activity类中方法的调用

    android开发中关于继承activity类中的函数,不能在其他类中调用其方法. MainActivity.java package com.example.testmain; import and ...

  2. Filter组件开发中的SDK基类分析

    DirectShow SDK提供了一套开发Filter的基类源代码.基于这些基类开发Filter将大大简化开发过程. 1.CBaseObject 大部分SDK类都从CBaseObject类(参见com ...

  3. C++中为何大量使用类指针

    C++的精髓之一就是多态性,只有指针或者引用可以达到多态.对象不行类指针的优点: 第一实现多态. 第二,在函数调用,传指针参数.不管你的对象或结构参数多么庞大,你用指针,传过去的就是4个字节.如果用对 ...

  4. Web开发中Listener、Filter、Servlet的初始化及调用

    我们在使用Spring+SpringMVC开发项目中,web.xml中一般的配置如下: <?xml version="1.0" encoding="UTF-8&qu ...

  5. java中的集合操作类(未完待续)

    申明: 实习生的肤浅理解,如发现有错误之处.还望大牛们多多指点 废话 事实上我写java的后台操作,我每次都会遇到一条语句:List<XXXXX> list = new ArrayList ...

  6. 你应该知道的4个DSP开发支持库

    引言 在dsp开发中,为了节省开发时间和难度,TI将一些成熟的算法封装为模块,供开发者使用.如果能充分利用这些算法支持库,对于加快dsp开发进程与提高代码质量.稳定性有非常大的帮助. Digital ...

  7. c语言中较常见的由内存分配引起的错误_内存越界_内存未初始化_内存太小_结构体隐含指针

    1.指针没有指向一块合法的内存 定义了指针变量,但是没有为指针分配内存,即指针没有指向一块合法的内浅显的例子就不举了,这里举几个比较隐蔽的例子. 1.1结构体成员指针未初始化 struct stude ...

  8. 【EasyUI总结】EasyUI开发中遇到的坑

    普遍: 1.easyui在书写键值对的时候要注意是否要加引号,在需要加引号的地方不加则无法渲染: datagrid数据网格: 1.datagrid默认请求方式是post,如果要使用分页功能pagina ...

  9. void指针、NULL指针和未初始化指针

    一个指针可以被声明为void类型,比如void *x.一个指针可以被赋值为NULL.一个指针变量声明之后但没有被赋值,叫做未初始化指针. 1 2 3 4 5 6 7 8 9 10 11 12 13 1 ...

随机推荐

  1. PHP join() 函数

    PHP join() 函数 实例 把数组元素组合为一个字符串: <?php $arr = array('Hello','World!','I','love','Shanghai!'); echo ...

  2. storm集群安装配置

    1.上传解压 2.进入到storm的conf目录 接上图 启动三台节点的zookeeper集群 启动和查看 Storm 在 nimbus.host 所属的机器上启动 nimbus 服务和 logvi ...

  3. C#篇(二)——属性的实质

    属性的内部实现其实就是方法 我们平时写的代码: class Student { private int age; public int Age { get { return age; } set { ...

  4. Java类和对象8

    按要求编写Java应用程序. (1)创建一个叫做People的类: 属性:姓名.年龄.性别.身高         行为:说话.计算加法.改名 编写能为所有属性赋值的构造方法: (2)创建主类: 创建一 ...

  5. Android RecyclerView 水平滚动+自动循环轮播

    主要处理的地方: 1.RecyclerView中Adapter的item个人可以无限轮询. 2.RecyclerView自动滑动 3.手指按下时滑动停止,手指抬起后继续自动滑动 public clas ...

  6. [POI2002][HAOI2007]反素数 数论 搜索 好题

    题目描述: 对于任何正整数x,其约数的个数记作g(x).例如g(1)=1.g(6)=4. 如果某个正整数x满足:g(x)>g(i) 0<i<x,则称x为反质数.例如,整数1,2,4, ...

  7. iOS开发——设置屏幕亮度

    想在APP里面调节屏幕的亮度,这只是个小众需求.而且,虽然可以直接调节手机的亮度,但是它还是个需求,客户有需求,剩下的就是我们的事了,好了,吐槽到此结束. 刚拿到这个需求的人,或许想的是直接对view ...

  8. Object-C,遍历目录

    最近武汉连续下雨很多天,降温了2次,温度一下子由28度到14度,再到8度,手太冷了. 加上最近发生了一些比较棘手的家庭琐事,最近没心情继续学习Object-C. 后来,我想明白了,心情不好的时候,还是 ...

  9. Unity Shader (一)ShaderLab 语法

    一.什么是Shader Shader(着色器):是可以在GPU上运行的一段程序,通过Shader可以进行一些渲染相关的设置. 二.什么是ShaderLab 目前面向GPU的编程有三种高级图像语言:HL ...

  10. 洛谷 P3902 递增

    P3902 递增 题目描述 现有数列A_1,A_2,\cdots,A_NA1​,A2​,⋯,AN​,修改最少的数字,使得数列严格单调递增. 输入输出格式 输入格式: 第1 行,1 个整数N 第2 行, ...