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.

[参考译文] CCS/NFC-DATALOGGER-EVM:是否可以将 CCS 9.1验证程序配置为检查所有段、而不是在第一个错误时停止?

Guru**** 2589300 points
Other Parts Discussed in Thread: MSP-FET, MSP430FR5969

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

https://e2e.ti.com/support/tools/code-composer-studio-group/ccs/f/code-composer-studio-forum/839218/ccs-nfc-datalogger-evm-can-ccs-9-1-verifiy-program-be-configured-to-check-all-sections-rather-than-stopping-on-the-first-error

器件型号:NFC-DATALOGGER-EVM
主题中讨论的其他器件:MSP-FETMSP430FR5969

工具/软件: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

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

    切斯特、

    目前无法将验证配置为报告所有错误。

    我们曾经想过的一个问题是、如果验证跳过该段、我们是否将其标记为只写。  遗憾的是、我尝试了这种方法、它仅报告一个错误、表示存储器映射阻止读取该地址。

    在验证过程中、我们可能需要知道跳过或只是在.TI.noinit 中的内容不匹配时发出警告。  我们在加载时验证此部分、而不是手动验证操作时验证此部分、这甚至是明智的。

    我需要进一步了解.TI.noinit。

    此致、

    John

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

    [引用 user="Johnes]maybe 验证时、我们需要知道如何跳过或在.TI.noinit 中的内容不匹配时发出警告。  我们甚至可以在加载时验证此段、但不在手动验证操作上验证此段。我喜欢不同的加载.vs 行为的想法 手动验证操作。

    在使用"RAM 自动初始化模型"的 Cortex-A 项目上、我发现中的.data 段存在类似的问题、即在加载时成功验证、但在程序运行后.data 段上的手动验证失败。

    也许不是为.TI.noinit 添加特殊逻辑:

    a:加载时、任何已初始化段上的验证失败都是错误。

    B.关于手动核查:
    -在没有写入权限的已初始化段上出现任何验证失败都是错误;因为运行的程序不会更改段内容。
    -具有写入权限的已初始化段上的任何验证失败都是一个警告,验证将继续下一个段。

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

    对于 b)我们还需要确保很容易取消该操作。

    John

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

    切斯特、

    我们将使用 CCBT-2520对此进行跟踪

    此致、

    John