1
10
添加未初始化的全局变量,该变量在整个代码中设置为不同的值。具体来说,在主要函数调用之前和之后设置它。
处理器复位时,全局变量仍将具有上次设置的值。继续添加这些“面包屑”以缩小问题函数的范围。 |
2
4
附加调试器时,许多软件监视程序会自动禁用(以防止调试器停止应用程序时重新启动)。 也就是说,以下是一些基本知识: 这是一个多线程应用程序吗?您正在使用RT调度程序吗?如果是这样,您的看门狗任务是否已耗尽? 确保你的看门狗任务不会停留在任何事情上(挂起的信号量、等待消息等)。有时,函数会以您可能无法预料的方式阻塞;例如,我现在正在开发一个Linux平台,在那里我可以很容易地阻止printf。 如果是单线程的,探查器可以帮助您确定时间问题。 如果这是一个新系统,确保看门狗工作正常;测试简单的代码,只需点击WD,然后在无限循环中休眠。 |
3
2
我使用基于状态的编程,我一直想使用的一个技巧是以二进制形式为当前状态保留一个输出端口。然后连接逻辑分析仪,查看状态更改的计时。您可以在这里执行类似的操作:按照Robert所说的操作,创建一个全局变量,并在关键点更改其值-最好使用一个函数,该函数可以立即将端口值设置为当前状态(即changeState(nextState);)当您输入踢狗的函数时更改状态,然后在离开函数之前将其更改回先前的状态。您应该能够从哪些函数中看到它不会被踢出,然后您可以处理这些函数。 祝你好运,这听起来像是个时间问题,很难解决。 |
4
2
在处理器重置之前,转储每个任务/线程的执行上下文(本地堆栈、调度状态等)将非常有用。通过一点运气和工作,您将能够确定是什么阻止了看门狗任务启动计时器。 |
5
2
我会使用一个额外的输出管脚,在代码中的适当点设置高然后低,以限制我查看的范围。然后我会在数字示波器或逻辑分析仪上跟踪它。这相当于另一张海报中提到的breadcrumbs方法,但您将能够更好地将时间关联到重置脉冲。 |
6
1
您可以在代码中插入while循环,并在while循环中切换LED。这是检查电路板是否复位的有效方法。 |
7
0
对你所做的每一个假设提出两次问题:
想知道"走过去"和单独跑有什么区别,;时间限制肯定很重要。 |
8
0
|
SRobertJames · 使用printf的gdb显示 1 年前 |
Subin · 在vscode中运行c时出错 1 年前 |
Community wiki · 如何调试Python内存故障? 1 年前 |
Kai · 有什么方法可以轻松优化VSCode中的锈迹? 2 年前 |
Chris Brandon · 如何使节点在堆栈溢出时中断? 2 年前 |