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/RM48L952:CCS9调试器开始位置

Guru**** 2539500 points


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

https://e2e.ti.com/support/tools/code-composer-studio-group/ccs/f/code-composer-studio-forum/830337/ccs-rm48l952-ccs9-debugger-start-location

器件型号:RM48L952

工具/软件:Code Composer Studio

您好!

我有一个包含多个部分的嵌入式固件项目、其中内核和应用程序(+引导加载程序)是单独的项目。 软件将引导、以便在引导加载程序之后、内核程序启动并初始化硬件。 之后、内核会调用已固定到已知位置的应用软件的启动函数(_c_init00)。 当处理器(RM48)在冷复位后自行启动时、我可以正常工作。 当我尝试刷写和调试应用程序时、调试器仅将应用程序(按计划)刷写到内部闪存中、然后直接从应用程序的_c_init00开始运行代码、跳过内核的硬件初始化代码。  与此类似、如果我刷写/调试内核、调试器将跳过引导加载程序。

是否可以设置 CCS 调试器开始运行代码的开始/复位位置、以便在调试应用程序时运行内核代码? 我无法从 UI 中找到此类参数。

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

    我认为 CCS 调试器从.out 文件 ELF 头文件中的"入口点地址"获取起始位置。

    使用 TI 工具链时 、--entry_point 选项可用于将入口点的符号从默认符号 _c_int00更改为默认符号。

    我在 RM57项目的链接器命令文件中尝试了以下操作来设置任意入口点:

    /*将入口点设置为内核(本示例中设置的任意地址)*/
    kernel_entry=0x123456;
    --entry_point=kernel_entry
    
    //抑制警告,因为我们在上面故意将入口点覆盖*/*
    - 10063:有关入口点不是_c_int00的警告 */
    --diag_suppress=10063
    
    //防止链接器丢弃运行时库入口点。 不确定是否需要*/
    -retain=_c_int00 

     而自 readelf -h 的输出报告说入口点已设置为请求的地址:

    ELF 接头:
    魔术:7F 45 4c 46 01 01 00 00 00 00 00 00 00 00 00
    类: ELF32
    数据: 二进制补码、小端字节序
    版本: 1 (当前)
    OS/ABI: UNIX -系统 V
    ABI 版本: 0
    类型: Exec (可执行文件)
    机器: ARM
    版本: 0x1
    入口点地址: 0x123456
    程序头开始: 248392 (文件中的字节)
    段头开始: 248488 (字节到文件)
    标志: 0x5000000、版本5该
    头的 EABI 大小: 52 (字节)
    大小的程序头文件: 32 (字节)
    程序头文件数量: 3
    节标题的大小: 40 (字节)
    段标头数量: 24
    段标头字符串表索引:23 

    我在会议期间没有多个部分的固件项目来检查它对 CCS 调试器有何预期影响。