打印

请教关于调试的俩问题

[复制链接]
882|2
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
3123|  楼主 | 2014-12-8 16:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
107的板子,使用jlink调试
调用系统函数时候的现象让我匪夷所思,由于在库里面看不到C代码,所以调试的时候有点晕
1.单步运行的时候可以慢慢走下来正常流程,全速运行就硬错误,难道两者有一些区别吗?使用了定义任务,定时器链表减1这两个系统函数。猜测堆栈操作存在问题?
2.进入中断的时候内存单元显示的现象是堆栈指针减去8个字节,然后保存,再减4字节再保存。。。但是人为加上一个push某寄存器,一开始就只会减4个字节,不清楚怎么回事,某前辈说是debug断点的特殊效果,正常运行就不存在这个问题了,疑惑。

沙发
sunmeat| | 2014-12-12 20:58 | 只看该作者
看不懂,楼主可以上一段具体的代码讨论

使用特权

评论回复
板凳
3123|  楼主 | 2014-12-18 10:11 | 只看该作者
不好意思,之前等了两天看没人,于是放在这不管了。具体代码有点乱,我就直接把这段时间学到的总结一下:
1.xPSR寄存器T位读出来显示是0,单步会修正成1,全速不会。
2.中断堆栈存在8字节对齐的公约,至于权威手册上说的NVIC的寄存器对应位初始化就是0,按道理不会出现这种情况才是,还是不清楚。
3.线程任务调度需要尽可能仿照中断调度的状况,我之前连R0-R3都没保存就直接乱用,现在想想也是醉了。但是中断跳转压栈LR,PC,线程跳转只更新LR,这两者无论如何都没法一样,还是不清楚会有什么问题,猜测中断嵌套的时候调再调用线程调度会发生返回前一级中断无法继续执行hooktask的问题?暂时还没有进行测试。

使用特权

评论回复
评分
参与人数 1威望 +4 收起 理由
sunmeat + 4
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

11

主题

37

帖子

0

粉丝