新增一个GPT导致代码跑飞

问题描述

需要添加一个接口,使用微秒级的周期回调,修改之后,一运行起来,代码就进入了ShutdownHook里面。

问题分析

首先通过错误值为14,得知错误类型为内存保护。调试根据堆栈得知在Gpt_LLD_Init接口里面跑飞,刚好就是初始化最新的定时器。

#define TGC_ENDIS_STAT0                 ((uint32)(BIT1|BIT0))

#define BIT1    ((uint32)0x00000002UL)
#define BIT0    ((uint32)0x00000001UL)

C语言代码分析

tempIndex是一个uint32,TGC_ENDIS_STAT0是一个uint32类型的3,要左移14位再进行赋值,直接就溢出了?

明显不符合常理。

汇编代码分析

e_lwz r5,0x74(r11) 的作用是从内存地址 r11 + 0x74 处加载一个32位的值到 r5,并将 r5 的高16位清零。

这时候r11位0xF7C6 8000

R5为0

r11 + 0x74地址为0xF7C6 8074

按照地址来看也没啥,从F7C6 0000开始就是GTM的范围

结论

检查初始化过程当中发现,还没初始化GTM就调用了Gpt_Init,GPT里面可是应用到GTM的东西!

所以得先初始化GTM,才能调用Gpt_Init接口。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

不吃鱼的羊

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值