您好!
我在使用 TMS570LC4357的 Launchpad 时遇到一个奇怪的问题。
当 JTAG 被连接时、代码运行正常。 我可以执行自由运行、暂停、重置、再次自由运行或单步执行/步入等操作 一旦我执行下电上电(断开 USB 并重新连接)、代码就会卡在数据中止中、并且不会进一步执行。 (我通过重新连接目标并仅加载符号找到了这一点)。
我的代码的主函数如下所示:
void main (void)
{
/*初始化驱动程序*/
initDrivers();
/*初始化应用程序*/
initApp();
/*初始化调度程序*/
initScheduler();
while (1)
{
}
}
initDrives()函数如下所示:
空 initDrives()
{
/*初始化离散 */
initDiscertes();
/*配置 CAN */
initCan (ConfigAddr);
/*配置 SPI */
initSpi();
/*启用看门狗计时器*/
enableWatchdog();
}
当我通过加载符号重新连接 JTAG 而不再次对闪存进行编程时,我看到 initCan()函数的正式参数不是用"ConfigAddr"的地址作为实际参数进行初始化的。 我看到、即使在直接存储器窗口或使用表达式窗口中、特定的存储器位置和其他几个位置也不可写入。 一旦我对同一代码重新编程、它在连接 JTAG 的情况下就开始完美工作、并在下电上电时再次奇怪地运行。
但有一个转变:
如果我将语句"enableWatchdog()从 initDrives()函数移动到 main()函数,就在调用 initDrives()函数之后,如下所示:
void main (void)
{
/*初始化驱动程序*/
initDrivers();
enableWatchdog();
/*代码的其余部分*/
}
(本质上是相同的执行顺序、没有区别)、一切都无缝工作、具有我们想要的尽可能多的功率周期。
enableWatchdog()函数的内容为:
void enableWatchdog()
{
RTTI->RTIDWDCTRL = DWD_ENA_KEY;
}
我曾多次面对这问题,但似乎已消失,代码出现了一些不合逻辑的变化,如上所述。 我已经没有办法找到问题的根本原因。 请帮帮我。
谢谢你。
