理论教育 如何调试CLA代码:单步执行、启用断点、禁止无限循环

如何调试CLA代码:单步执行、启用断点、禁止无限循环

时间:2023-06-15 理论教育 版权反馈
【摘要】:调试CLA代码是一个简单过程,它独立于主CPU。因为单步时CLA不能刷新流水线,MDEBUGSTOP指令必须作为代码的一部分插入。使能CLA断点首先,在调试器中使能CLA断点。单步执行CLA代码一旦暂停,可以一次一周期单步执行CLA代码。当最初开发CLA代码,由于程序缺陷产生无限循环时,可能出现这种情况。禁止CLA断点在CCS V3.3软件环境中,通过断开CLA调试窗口,可以禁止CLA断点。确认首先发出运行或复位,不然CLA会暂停且不启动其他任务。

如何调试CLA代码:单步执行、启用断点、禁止无限循环

调试CLA代码是一个简单过程,它独立于主CPU。

(1)在CLA代码中插入断点

在希望CLA暂停代码的地方,插入一个CLA断点(MDEBUGSTOP指令),然后编译生成并重装代码。因为单步时CLA不能刷新流水线,MDEBUGSTOP指令必须作为代码的一部分插入。调试器不能在需要时插入。

如果没有使能CLA断点,那么MDEBUGSTOP被忽略而被处理为MNOP。只要不在三条指令即MBCNDD、MCCNDD或MRCNDD指令之中,MDEBUGSTOP指令可以放置到CLA代码的如何地方。

(2)使能CLA断点

首先,在调试器中使能CLA断点。在CCS V3.3中,可以通过连接CLA调试窗口(de-bug->connect)实现。当窗口断开时,断点被禁止。

(3)启动任务

启动任务有三种方法:

外设可以声明一个中断。

●主CPU执行一条IACK指令。

●在调试器窗口手工写入MIFRC寄存器。

当任务启动时,CLA将执行指令直到MDEBUGSTOP指令在流水线的D2阶段。在该点,CLA暂停而流水线被冻结。MPC寄存器将反映MDEBUGSTOP指令的地址

(4)单步执行CLA代码(www.daowen.com)

一旦暂停,可以一次一周期单步执行CLA代码。CLA单步的行为与主C28x不同。当发出一个CLA单步时,流水线只在一个周期提供时钟,然后冻结。对于28xCPU,每一个单步刷新流水线。

也可以运行到下一条MDEBUGSTOP或到任务的结束。如果有另外悬挂的任务,它将在本任务结束后自动启动执行。

注:当CLA程序存储器映射到CLA存储器空间时,CLA取指令比CPU调试读具有更高的优先级。因此,如果CLA正在执行一个循环,CLA有可能长久阻止CPU调试访问。当最初开发CLA代码,由于程序缺陷产生无限循环时,可能出现这种情况。为避免锁死主CPU,当CLA运行时,CPU调试读程序存储器将都返回0x0000。当CLA暂停或空闲时,可以完成对CLA程序存储器正常CPU调试读和写访问。

如果CLA陷入无限循环,可以用软件或硬件复位退出这种情况。调试器复位也可以退出这种情况。

当单步执行任务时可能出现特殊情况,例如程序计数器(MPC)在任务结束遇到MSTOP指令。

1)有一个任务已经悬挂时,MPC暂停在MSTOP或其后。

如果任务A正在单步或暂停,而任务B在MPC到达MSTOP前到来,继续单步通过MSTOP指令,那么任务B将启动。如果在任务A中,MPC到达MSTOP前,任务B正在悬挂,那么任务B启动没有问题且不需要特殊动作。

●没有任务悬挂时MPC暂停在MSTOP或其后

这种情况下,在任务A单步或暂停且MPC到达MSTOP而没有任务悬挂。这时如果任务B到来,MIFR寄存器将设置标志,但是如果继续单步通过任务A中的MSTOP指令,任务B可能启动也可能不启动。这取决于新任务何时准确到达。为可靠地启动任务B,应实行软件复位并重新配置MIER位。完成后,可以开始单步任务B。

如果当任务B到来时有控制转换(例如使用IACK指令启动任务),这种情况可以稍作不同处理。在此情况下,在任务A单步或暂停且没有任务悬挂,MPC到达MSTOP。在强制执行任务B之前,自由运行使得CLA退出调试状态。此后,可以强制执行任务B并继续调试。

(5)禁止CLA断点

在CCS V3.3软件环境中,通过断开CLA调试窗口,可以禁止CLA断点。确认首先发出运行或复位,不然CLA会暂停且不启动其他任务。

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

我要反馈