ARM MCU的软硬件debug过程

控制/MCU

1879人已加入

描述

#define HB_REG(ADDRESS)  (*((volatile unsigned long *)(ADDRESS)))

这种定义默认是读,实际上也可以写,编写简单DMA驱动程序如下:

ARM

但是仿真波形发现,上图49行程序并没有执行:

ARM

C代码编译器默认优化选项是-O3,

GNU_CC_FLAGS = -g -O3 -mthumb $(CPU_TYPE)

从下图lst文件看得到的确有三条str指令,但是为何第三条str指令未执行?我们对比下优化选项是-O0的机器指令。

优化选项是-O0:

GNU_CC_FLAGS = -g -O0 -mthumb $(CPU_TYPE)

lst文件如下图所示,左边是优化-O3,右边是-O0

ARM

程序简单,优化前18条指令,优化后16条指令,优化掉2条机器指令,并调换了指令顺序,但并不影响功能。所以优化级别-o0、-o3功能都OK。

接下来就是定位MCU的内部功能,追踪代码,从CPU的取指令接口开始查询,很快可以找到原因,由于新增DMA控制器新增了MCU的架构地址空间,添加了译码器逻辑,default slave这个IP没有改,造成default slave收到DMA新增的地址空间后认为是地址溢出错误,所以报了resp_err给CPU,造成CPU挂起。关于具体原因、MCU架构请进【知识星球】查看详细解释。

ARM

虽然功能OK,但上图波形明显还有问题需要优化解决,详见【知识星球】

ARM

欢迎加入【全栈芯片工程师】知识星球,手把手教你设计MCU、图像传感器、ISP图像处理,从算法、前端到后端全流程设计。

审核编辑:汤梓红

 

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分