主题中讨论的其他器件:MSP-FET、 MSP430FR5969
工具/软件:Code Composer Studio
使用 CCS 9.1.0.00010尝试调试为什么 MSP430FR5969应用程序在保持运行时停止响应。 使用 MSP-FET 将调试器连接到停止响应的器件后、尝试使用 CCS 验证程序操作来检查 FRAM 中的程序是否仍然有效、但在地址0x04400处获得了数据验证错误、地址0x04400是 FRAM 中的最低地址。
程序的存储器映射使得最低 FRAM 地址被用于使用 #pragma NOINIT 在重新启动时保持其状态的变量、因此、预计 在程序被设置为运行后.TI.noinit 部分中的变量将无法验证。 问题是 CCS 数据验证似乎在第一次验证失败时停止、而是继续检查其他部分。
对于此示例:
在生成的输出文件上运行 CG_xml sectti 实用程序会显示.TI.noinit 段在 ELF 映像中标记为已初始化数据:
$~/ti/ti-processor-sdk-rtos-am335x-evm-05.01.00.11/cg_xml/utils/ofd6x -x ~/workspace_v9/colle_chain_Demo_v1_00/调试/colle_chain_Demo_v1_00.out |~/ti/ti-processor-sdk-rtos-am335x-evm-05.01.00.11/cg_xml/bin/sectti 从 stdin 读取... 秘书长的报告 档案报告:/home/mr_halfword/workspace_v9/Cold_Chain_Demo_v1_00/Debug/Cold_Chain_Demo_v1_00.out 名称:大小(十进制)大小(十六进制)类型加载地址运行地址------------------------------------------------------- :------ ------ -------- ------ .TI.noinit: 4643 0x00001223数据0x00004400 0x00004400 .cinit: 746 0x000002ea 数据0x00005800 0x00005800 const: 143 0x0000008f 数据0x00005aea 0x00005aea .text: 9386 0x000024aa 代码0x00005c00 0x00005c00 .bss: 123 0x0000007B UDATA 0x00001ef0 0x00001ef0 .data: 752 0x000002f0 UDATA 0x00001c00 0x00001c00 .stack: 160 0x000000a0 UDATA 0x00002360 0x00002360 AES256: 2 0x00000002数据0x0000ffcc 0x0000ffcc RTC: 2 0x00000002数据0x0000ffce 0x0000ffce 端口4: 2 0x00000002数据0x0000ffd0 0x0000ffd0 PORT3: 2 0x00000002数据0x0000ffd2 0x0000ffd2 TIMER3_A1: 2 0x00000002数据0x0000ffd4 0x0000ffd4 TIMER3_A0: 2 0x00000002数据0x0000ffd6 0x0000ffd6 端口2: 2 0x00000002数据0x0000ffd8 0x0000ffd8 TIMER2_A1: 2 0x00000002数据0x0000ffda 0x0000ffda TIMER2_A0: 2 0x00000002数据0x0000ffdc 0x0000ffdc 端口1: 2 0x00000002数据0x0000ffde 0x0000ffde Timer1_A1: 2 0x00000002数据0x0000ffe0 0x0000ffe0 定时器1_A0: 2 0x00000002数据0x0000ffe2 0x0000ffe2 DMA: 2 0x00000002数据0x0000ffe4 0x0000ffe4 USCI_A1: 2 0x00000002数据0x0000ffe6 0x0000ffe6 TIMER0_A1: 2 0x00000002数据0x0000ffe8 0x0000ffe8 TIMER0_A0: 2 0x00000002数据0x0000ffea 0x0000ffea ADC12: 2 0x00000002数据0x0000ffec 0x0000ffec USCI_B0: 2 0x00000002数据0x0000ffee 0x0000ffee USCI_A0: 2 0x00000002数据0x0000fff0 0x0000fff0 WDT: 2 0x00000002数据0x0000fff2 0x0000fff2 TIMER0_B1: 2 0x00000002数据0x0000fff4 0x0000fff4 TIMER0_B0: 2 0x00000002数据0x0000fff6 0x0000fff6 Comp_E: 2 0x00000002数据0x0000fff8 0x0000fff8 UNMI: 2 0x00000002数据0x0000fffa 0x0000fffa SYSNMI: 2 0x00000002数据0x0000fffc 0x0000fffc 重置: 2 0x00000002数据0x0000fffe 0x0000fffe ------------------------------------------------------- 按款次类型分列的合计 数------------------------------------------------------- 未初始化的数据: 1035 0x0000040b 已初始化的数据: 5584 0x000015d0 代码: 9386 0x000024aa
在 CCS 调试器中加载程序后、当程序在 main 的入口暂停时、Verify Program 操作通过:
MSP430:/home/mr_halfword/workspace_v9/Cold_Chain_Demo_v1_00/Debug/Cold_Chain_Demo_v1_00.out 的程序验证成功
从调试服务器中、所附 zip 文件中的 load_and_verify.log 可以在 验证期间使用 GTI_READMEM_BLK 看到正在读取的以下存储器区域:
| 起始地址 | 长度 |
| 0x00004400 | 0x00001224 |
| 0x00005800 | 0x0000037A |
| 0x00005C00 | 0x000024AA |
| 0x0000FFCC | 0x00000034 |
其中、上述内容涵盖输出文件中已初始化段的范围。
3.运行更改 .TI.noinit 部分中值的程序,暂停程序并尝试执行验证程序,失败原因如下:
MSP430:文件加载器:验证失败:地址0x04400处的值不匹配请验证目标存储器和存储器映射。
在 验证期间、从所附 zip 文件中的 verify_fail.log 只能使用 GTI_READMEM_BLK 读取以下存储器区域:
| 起始地址 | 长度 |
| 0x00004400 | 0x00001224 |
是否可以将 CCS 验证程序配置为检查所有存储器段、而不是仅在第一个错误时停止、向程序中的各个段报告通过/失败?
这将有助于使用具有初始化段的程序进行调试、一旦程序开始运行、这些段就会发生变化。
e2e.ti.com/.../Cold_5F00_Chain_5F00_Demo_5F00_v1_5F00_00.zip