主题中讨论的其他器件:C2000WARE
大家好、
我需要有关调试问题的帮助。 我已将 memcopy 添加到设置代码中。 在某些 DELAY_US()时代码仍然失败。 是否有人可以通过查看代码流来指导远程访问、这是一个问题。 代码适用于 CPU1_RAM、但在跳过一些 DELAY_US 函数调用后进入非法 ISR。 无法识别正在发生的情况。
谢谢、
Akshay Godase
This thread has been locked.
If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.
大家好、
我需要有关调试问题的帮助。 我已将 memcopy 添加到设置代码中。 在某些 DELAY_US()时代码仍然失败。 是否有人可以通过查看代码流来指导远程访问、这是一个问题。 代码适用于 CPU1_RAM、但在跳过一些 DELAY_US 函数调用后进入非法 ISR。 无法识别正在发生的情况。
谢谢、
Akshay Godase
Akshay、
此函数是一个宏、以 ASM vs C 编码、以提供精确的周期计数(以微秒为单位)。 只需确保您已将此文件包含在位于 C:\ti\c2000\C2000Ware_1_00_06_00\device_support\f2837xd\common\source\f2837xD_usDelay.asm 的 pjt 中
这需要从 RAM 运行的原因同样与周期计数准确和 RAM 为0WS 相关。
在调试非法 ISR 方面、您需要执行以下操作:\
1)进入非法 ISR 并停止后、打开正在调试的内核上的 CPU 寄存器窗口(查看寄存器、然后展开内核寄存器)
2)找到堆栈指针、SP 寄存器。
3)堆栈指针的值将是一个16位的立即地址,其中堆栈被保存在内存中
4)当调用任何 ISR (包括非法)时、会将某些信息保存到堆栈中、此处的相关信息是返回地址。 这将是获取非法指令后的地址。
5)对 SP 内容进行解码、您可以看到代码尝试执行指令但返回非法(通常为0x0000或0xFFFF)的位置。 就代码的实现方式而言、您可以在栈中或 RPC 寄存器中进一步查看正常函数调用的返回地址
让我们知道您的发现、我怀疑宏没有放置在它需要的位置、但这应该指向链接器认为它应该位于的位置、我们可以在那里工作。
最棒的
Matthew
您好、Matthew、
此问题现已部分解决。 我有一些代码、例如:
#pragma CODE_SECTION (GetMax、".xtraCode")
uint8 GetMax (uint16*数组、uint8长度){
uint16最大值;
uint8 i;
uint8 MaxIndex;
I=0;
最大值= 0;
for (i=0;<Length;i++){)
if (Array[i]>Max){
MaxIndex=I;
Max=Array[i];
}
}
返回 MaxIndex;
}
此.bigcode 未在我的链接器命令文件中定义。 我已注释掉该文件、代码开始正常工作、但处于"调试"模式。
当我尝试使用此选项刷写代码时、
没有发生任何事情。 我尝试重置 launchpad、我希望 UART 上的数据在我以调试模式工作时可用、但却失败了。 此外、我希望 LED 至少发生变化、这是我的代码调试的一部分。 在调试模式下不起作用。 我想知道一个问题。 可以帮帮我吗?
谢谢、
Akshay Godase