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.

[参考译文] TM4C1294KCPDT:TM4C1294KCPDT 调试

Guru**** 664280 points
Other Parts Discussed in Thread: TM4C1294NCPDT, TM4C1294KCPDT
请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1195092/tm4c1294kcpdt-tm4c1294kcpdt-debug

器件型号:TM4C1294KCPDT
主题中讨论的其他器件:TM4C1294NCPDT

大家好、

原芯片为 TM4C1294NCPDT。 现在、该芯片已替换为 TM4C1294KCPDT。 程序中没有更改、并且在重新编译工程编译时没有问题。

 在调试过程中 IntDefaultHandler 程序中存在死循环。  "在地址"0xfff8"处中断、并且没有可用的调试信息、或者程序代码之外"也存在问题。

请帮帮我。

此致、
凯瑟琳
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好!

     TM4C1294NCPDT (1024kB 闪存)和 TM4C1294KCPDT (512kB 闪存)之间的差异 是闪存大小。 请确保您的程序映像适合  TM4C1294KCPDT。 查看.map 文件并找出程序映像大小。  接下来、您需要了解您的程序是否会为堆动态分配存储器或跳转到超出闪存大小的任何存储器位置。 如果动态分配的堆超出了所拥有的内存量、则会出现内存故障或其他故障。  

    接下来、对于 IntDefaultHandler、这通常意味着您没有为外设创建矢量。 您需要确定哪个外设正在生成中断、并在启动文件中为其插入一个矢量。 如果没有外设的相关中断矢量、处理器将跳转到默认 ISR 、即 IntDefaultHandler。 请查看下面的典型启动文件。 大多数向量都默认为 IntDefaultHandler。 假设您使用 GPIOA 来生成中断。 当处理器响应 GPIOA 中断时、它将跳转到 IntDefaultHandler。  IntDefaultHandler 只在 while 循环中旋转。  

    //
    //
    //转发默认故障处理程序的声明。
    //
    //
    void ResetISR (void);
    静态空 NmiSR (空);
    静态空 FaultISR (空);
    静态空 IntDefaultHandler (void);

    //
    //
    //在时要调用的复位处理程序的外部声明
    //处理器启动
    //
    //
    extern void _c_int00 (void);

    //
    //
    //标记栈顶的链接器变量。
    //
    //
    extern uint32_t __stack_top;

    //
    //
    //矢量表。 请注意、必须将适当的构造放置在到上
    //确保它在物理地址0x0000.0000或开始处结束
    //程序(如果位于0以外的起始地址)。
    //
    //
    #pragma DATA_SECTION (g_pfnVectors、".intvecs")
    void (* const g_pfnVectors [])(void)=

    (void (*)(void)((uint32_t)&_stack_top)、
    //初始堆栈指针
    ResetISR、//复位处理程序
    NmiSR、// NMI 处理程序
    FaultISR、//硬故障处理程序
    IntDefaultHandler、// MPU 故障处理程序
    IntDefaultHandler、//总线故障处理程序
    IntDefaultHandler、//用法故障处理程序
    0、//保留
    0、//保留
    0、//保留
    0、//保留
    IntDefaultHandler、// SVCall 处理程序
    IntDefaultHandler、//调试监视器处理程序
    0、//保留
    IntDefaultHandler、// PendSV 处理程序
    IntDefaultHandler、// SysTick 处理程序
    IntDefaultHandler、// GPIO 端口 A
    IntDefaultHandler、// GPIO 端口 B
    IntDefaultHandler、// GPIO 端口 C
    IntDefaultHandler、// GPIO 端口 D
    IntDefaultHandler、// GPIO 端口 E
    IntDefaultHandler、// UART0 Rx 和 Tx
    IntDefaultHandler、// UART1 Rx 和 Tx

     

    静态空
    IntDefaultHandler (空)

    //
    //进入无限循环。
    //
    while (1)


    另请查看此应用手册、了解如何诊断非常有用的软件故障。  

    https://www.ti.com/lit/pdf/spma043

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、Charles、

    非常感谢您的回复。  我检查 了.map 文件的大小、它是157k、小于芯片闪存容量的上限。

    对于 IntDefaultHandler 的连续操作, 已找到原因。 创建新项目后、外设矢量仍然是默认的 IntDefaultHandler、因此中断会立即进入 IntDefaultHandler 循环。  我已经使用 了与外设矢量对应的正确函数。 修改后、编译错误 'DescriptionResource Path Location Type: Unresolved symbol SoftI2CIntClear、first referenced in ./PI2C.obj MBcodesK1 C/C++ problem'、需要 进一步调试和编译。

    此致、

    凯瑟琳