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.

[参考译文] RTOS/CC2642R:调试配置(闪存中的 RTOS)在邮箱结构中失败

Guru**** 2539500 points
Other Parts Discussed in Thread: SYSBIOS, LAUNCHXL-CC26X2R1

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

https://e2e.ti.com/support/wireless-connectivity/bluetooth-group/bluetooth/f/bluetooth-forum/751100/rtos-cc2642r-debug-configuration-rtos-in-flash-fails-w-mailbox-structures

器件型号:CC2642R
主题中讨论的其他器件:SYSBIOSLAUNCHXL-CC26X2R1

工具/软件:TI-RTOS

您好!

我的同事在这里就我们的问题和缺乏调试能力发表了一篇文章:    

对该线程的响应非常有用-同时我们意识到我们一直在使用发布配置、该配置抑制了许多可用的调试选项。

此后、我遇到了一个问题、导致我们的调试工作停止。 当我在构建配置之间工作时、我注意到 ble_release.cfg 文件中的代码模板、可以注释掉该代码以将 BIOS 置于闪存中、然后另一部分也可以检查我们的任务堆栈是否存在溢出情况:

/*========================= ROM 配置======================== //
*
*要在闪存中使用 BIOS,请注释掉下面的代码块。
//
var ROM = xdc.useModule('ti.sysbios.rom.ROM');
if (Program.cpu.deviceName.match(/CC26/)){
rom.romName = ROM.CC26X2;
}
否则(Program.cpu.deviceName.match(/CC13/)){
rom.romName = ROM.CC13X2;
} 

/*========================= 任务配置=================== *
VAR 任务= xdc.useModule('ti.sysbios.knl.Task');
/*
*检查任务堆栈是否有溢出情况。
*
*选择一项:
*- true (默认值)
*在期间启用任务堆栈溢出情况的运行时检查
*上下文切换("从"和"到")
*-错
*禁用任务堆栈溢出情况的运行时检查。
*
*在 ROM 中使用 BIOS 时:
*此选项必须设置为 false。
*
Task.checkStackFlag = true;
//Task.checkStackFlag = false;

好的、对吧? 嗯、不是那么快。

在进行必要的修改以在我现在修改的.cfg 文件中排除/包含正确的代码后、我清理并重新编译了工程、在该工程中遇到了旧的"未解析的符号保留"错误。 即、以下内容未定义:

未定义的首次引用
符号
------ --------
TI_SYSBIOS_KNL_Mailbox_Params__init__S
TI_SYSBIOS_KNL_Mailbox_construct
TI_SYSBIOS_KNL_Mailbox_pend__E
TI_SYSBIOS_KNL_Mailbox_post__E

很明显、这些都是我们反复用于对多个外部硬件器件进行多个 I2C 和 SPI 操作的基本邮箱结构函数调用。 代码文件仍然存在、我可以使用 F3跳转到源文件、查看源文件和所有内容中的定义。 看起来、无论何时将 RTOS 放入闪存中、这些函数都不再被定义(或者只是不在 BIOS.obj 库中或其他库中)。 如果您取消注释"PUT BIOS IN ROM"部分并使用基于 ROM 的 RTOS、一切都将再次正常。

现在、我期待的有趣调试功能不可用、除非我大幅修改代码以排除邮箱使用... 这毫无意义。

作为一个持怀疑态度的人、我立即以为我做了一些错误的事情来破坏代码、这是我的错。 因此、我在  不同的工作区中打开了一个全新的 simple_peripheral 项目。 它在 Release 和 Debug 配置中都成功构建、 不使用邮箱。 因此、我添加了结构和变量定义以及下面的一些初始化代码、并将其直接放入 SimplePeripheral_init 中、因此我知道它会尝试将其链接到中:  

// TW 调试
typedef 结构体 I2C_InfoMsgObj{
uint8_t slave_addr;
uint8_t TX_length;
uint8_t* tx_data;
uint8_t rx_length;
uint8_t* rx_data;
} I2C_InfoMsgObj;
typedef 结构体 I2C_MailboxInfoMsgObj{
Mailbox_MbxElem;/*邮箱标头*/
I2C_InfoMsgObj obj;//信息邮箱*/
} I2C_MailboxInfoMsgObj;
I2C_MailboxInfoMsgObj i2cInfoBuffer[4];
Mailbox_StructI2C_mbxInfoStruct;
Mailbox_Handle I2C_mbxInfoHandle;

// TW 调试
Mailbox_Params mbxParams;
Mailbox_Params_init (&mbxParams);
mbxParams.buf =&i2cInfoBuffer;
mbxParams.bufSize = sizeof (i2cInfoBuffer);
Mailbox_con构(&I2C_mbxInfoStructt、 sizeof (I2C_InfoMsgObj)、4、&mbxParams、NULL);
I2C_mbxInfoHandle = Mailbox_Handle (&I2C_mbxInfoStruct); 

结果是调试配置发出了一个非常相似的错误、但仅包含前两个部分(因为我根本没有在挂起/后处理中复制)。

所有这些之后-问题就变成了、TI-RTOS 的闪存库映像是否未完成邮箱使用? 如何正确定义这些函数、以便能够进行正确的调试配置?

未定义的首次引用
符号  
------ --------
TI_SYSBIOS_KNL_Mailbox_Params__init__S  
TI_SYSBIOS_KNL_Mailbox_construct  

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

    您可以上传.cfg 文件吗?

    我刚刚尝试在 LAUNCHXL-CC26X2R1的新项目中复制您的步骤、同时使用 TI-RTOS 的发布和调试配置、但仍然没有遇到链接器错误。 您使用的是哪个 SDK 版本?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    Edvard、  

    我们最近采取措施逐步升级我们的项目、以使用 simplelink_cc26x2_sdk_2_30_00_34。 据我所知、这是最新的。

    下面您会发现 simple_peripheral.c 的修改版本随附、我用于导致调试配置中的错误(链接步骤失败、因此我从不需要将代码放在任何目标上)、 以及我在我们自己的源代码中使用的版本.cfg 文件的修改版本。

    如果您需要其他信息、请告诉我。

    更改了 simple_peripheral.ce2e.ti.com/.../3175.simple_5F00_peripheral.c 的版本

    配置文件:e2e.ti.com/.../ble_5F00_release_5F00_modified.cfg

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

    Edvard、

    为了获得良好的衡量标准、我重新尝试了我的流程、并获得了相同的失败。 总结所有步骤(希望您也能看到问题):

    1. 从 Resource Explorer 中干净导入 ble5_simple_peripheral_cc26x2r1lb_app 项目(软件-> SimpleLink CC26X2 SDK - v:2.30.00.34 ->示例->开发工具-> CC26x2R LaunchPad -> BLE5-Stack -> simple_peripheral -> TI-RTOS -> CCS 编译器-> simple_peripheral_app)
    2. 重新构建堆栈库项目以进行良好的测量
    3. 将有效构建配置更改为 FlashROM_Debug
    4. 进行修改、如之前附加的 simple_peripheral 示例的更改版本中所示
    5. 重建应用程序项目

    下面是我收到的全部错误消息:

    
    未定义 第一
    个引用的符号 文件中
    ------ --------
    TI_SYSBIOS_KNL_Mailbox_Params__init__S 
    TI_SYSBIOS_KNL_Mailbox_construct 
    
    错误#10234-D:未解析的符号仍存在
    错误#10010:链接期间遇到错误;"ble5_simple_peripheral_cc26x2r1lp_app.out"未生成
    
    >>编译失败
    makefile:190:目标'ble5_simple_peripheral_cc26x2r1lp_app.out'的配方失败
    
    
    ***:'ble5_makefile:'ble2r1r1r1r1rg1r1r1rg1r1rg1r1rg1p_out'的配方失败***
    
    生成错误***[ble_all_make:g2r2r1r1r1r2p_make:g1r1
    

    我将继续尝试并从我的角度对其进行调试、但我对其执行方式有点迷失。

    此致、
    Tyler Witt

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    好的、我将尝试重新跟踪您的步骤。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    我能够重现您的错误。 问题是、配置内核时、工程中的*。cfg 不包含邮箱。

    在*。cfg 文件中的任意位置添加以下行:

    VAR 邮箱= xdc.useModule('ti.sysbios.knl.Mailbox'); 

    和重建。

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

    这对我来说很有用-感谢您的快速周转和解决!

    此致、
    Tyler Witt