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.

[参考译文] 编译器/LPSTK-CC1352R:LPSTK-CC1352R

Guru**** 2562120 points
Other Parts Discussed in Thread: SYSBIOS, CC1352R, SYSCONFIG

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

https://e2e.ti.com/support/wireless-connectivity/sub-1-ghz-group/sub-1-ghz/f/sub-1-ghz-forum/925809/compiler-lpstk-cc1352r-lpstk-cc1352r

器件型号:LPSTK-CC1352R
Thread 中讨论的其他器件:SYSBIOSCC1352RSysConfig

工具/软件:TI C/C++编译器

您好!

  1. 处理器:CC1352
  2. TIRTOS simplelink_cc13x2_26x2_SDK_4_10_00_78
  3. xdctools_3_61_00_16_core

目标:

我正在尝试开发 BLE 应用 、该应用旨在配置/更新通过低于1GHz 专有协议传输数据的器件。

第1步:BLE 应用

我修改了 BLE 简单外设示例、以展示不同的服务和特征。

我还创建了一个 Makefile 文件以简化自动编译(不带 CCS)。

Step2: 低于1GHz 的专有协议。

我对进行了调整  开发我自己的协议的示例。

步骤3:将 低于1GHz 的专有协议项目合并到 BLE 应用项目中

我正在尝试将低于1GHz 支持所需的依赖项添加到我的 BLE Makefile 文件中。

但是、 取决于:

l"tirtos_builds_CC1352R1_LAUNCHXL_release_ccs\Debug\configPkg\package\ccfg\release_pem4f.oem4f"
l"\tirtos_builds_CC1352R1_LAUNCHXL_RELEASE_CCS\src\SYSBIOS\ROM_SYSBIOS.aem4f"
l"C:\ti\simplelink_cc13x2_26x2_sdk_4_10_00_78\kernel\tirtos\packages/ti\targets\arm\rtsarm\lib\boot.aem4f"
l"C:\ti\simplelink_cc13x2_26x2_sdk_4_10_00_78\kernel\tirtos\packages/ti\targets\arm\rtsarm\lib\auto_init.aem4f"
l"C:\ti\ccs1000\xdctools_3_61_00_16_core\packages/xdc\rov\runruntime \lib\xdc.rov.runtime.aem4f"

以及 TI-RTOS 内核的构建

而 BLE 外设取决于:

-l "build\simple_peripheral\package\ccfg\simple_peripheral_app_pem4f.oem4f"
-l "build\simple_peripheral\package\ccfg\simple_peripheral_app_pem4f.src\SYSBIOS\ROM_SysBIOS.aem4f"
l"C:\ti\simplelink_cc13x2_26x2_sdk_4_10_00_78\kernel\tirtos\packages/ti\targets\arm\rtsarm\lib\boot.aem4f"
l"C:\ti\simplelink_cc13x2_26x2_sdk_4_10_00_78\kernel\tirtos\packages/ti\targets\arm\rtsarm\lib\auto_init.aem4f"
-l"C:\ti\xdctools_3_61_00_16_core\packages\XDC\ROV\runtime \lib\xdc.rov.runtime.aem4f"

一些符号由*。oem4f 和*。aem4f 文件定义。 我可以使用哪一个、方法是什么?

我看 了<DMM WSN Node + BLE Peripheral> 示例、其中提到:

 此示例使用无线传感器网络节点示例和 BLE simple_peripheral 示例中的任务以及 TI 的 DMM (动态多协议管理器)来演示 CC1352R 的多协议和双频带功能。

不解释如何"合并"两个堆栈...?

提前感谢。

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

    你好、Jo、

    您似乎在正确的轨道上、似乎只是对合并的内核部分有轻微的影响。

    考虑这两个项目都是独立的。 每个项目依赖于 TI-RTOS、因此使用 XDC 工具和.cfg 文件生成一个内核。 (在 EasyLink 示例中、TI-RTOS 可能有一个外部项目、而 BLE 项目不会像这样拆分)。 内核构建完成后、将生成上面列出的数据包、这些数据包随后将与应用程序链接。

    当您合并两个 TI-RTOS 项目时、您也不会合并 TI-RTOS 生成的文件。 通常、您永远不会移动"Debug"文件夹中的文件、因为这些文件是生成的文件。 一个项目应该/需要只有一个.cfg 文件、这与表明它只包含一个 TI-RTOS 设置相同。 这意味着您应该选择一组 TI-RTOS 文件(在本例中、我建议使用 BLE)、并确保用于生成这些文件的.cfg 文件与另一个工程的文件一致。

    此致、

    最大

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

    尊敬的 Max:

    感谢您的快速响应。 我明白了! 由于两个项目都有*。cfg 文件、因此它们配置 TI_RTOS

    因此、我比较了*。cfg 文件和以下内容是主要区别:

    /*========================= 程序配置=================== 必须将*/
    *
    Program.stack 设置为0、以便在
    示例
    的*链接器命令文件中确定系统堆栈大小的设置*。
    /Program.stack
    = 0;//for 
    
    program.stack = 1024;//for 
    
    /*
    最小化系统模块中的退出处理程序数组。 System 模块包括
    *一个在 System_atexit()中注册的函数数数组,System_exit()
    调用该函数组。 默认值为8。
    //
    System.maxAtexitHandlers = 2;//针对 
    
    System.maxAtexitHandlers = 0;//for 
    /*
    如果 Task.enableIdleTask 设置为 true,则此选项设置空闲任务
    的*堆栈大小。
    *
    *减小空闲堆栈大小可节省更多内存。
    //
    Task.idleTaskStackSize = 512;// for 
    
    task.idleTaskStackSize = 768;//for 
    
    /*========================= 邮箱配置=========== */
    var Mailbox = xdc.useModule('ti.sysbios.knl.Mailbox');// for 
    无邮箱//用于 

    我尝试了不同的*。cfg 组合、并确保使用类似的* syscfg (在 RFDesign 中启用低于1GHz)文件、但出于虚假原因、在 BLE 项目中、我的射频模块在调用函数时挂起:

    RF_EventMask RF_runCmd (RF_Handle h、RF_OP* PoP、RF_Priority EPRI、RF_Callback PCB、RF_EventMask bmEvent) 

    在 rfEasyLinkTx 中、此函数在 C:\ti\simplelink_cc13x2_26x2_sdk_4_10_00_78\source\ti\drivers\rf\RFCC26X2_multimple.c 中定义  

    而在 BLE 简单外设中、此函数在该库中实现:

    -l$(SIMPLELINK_CC13X2_26X2_SDK_INSTALL_DIR)/source/ti/drivers/rf/lib/rf_multiMode_cc13x2.aem4f

    问题:

    1. 此库是否包含特定的 RF_* 实现,可能导致与低于1GHz 的器件不兼容?
    2. 对于 BLE 项目、构建 C:\ti\simplelink_cc13x2_26x2_sdk_4_10_00_78\source\ti\drivers\rf\RFCC26X2_multimple.c 而不是与库 rf_multimple_cc13x2.aem4f 建立 tlink 是否存在任何限制?
    3. 如果是、如何重建/配置此库以与低于1GHz 接口兼容?
    4. 最后、在哪里可以获得与此构建流程相关的精确信息?

    此致

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

    在 BLE simplePeripheral 项目中、我删除了与库 RF_MODULL_cc13x2.aem4f 的依赖关系、然后构建源文件 C:\ti\simplelink_cc13x2_26x2_SDK_4_10_00_78\sources\ti\drivers\RF\RF\RFCC26X2_MODULL.c (类似于 rfEasyLinkTx 中的内容)

    有趣的是、链接器抱怨一些函数未实现:

    符号 文件中
    ------ --------
    NOROM_RFAnaDivTxOverride ./obj/debug/RFCC26X2_multiMode.o
    NOROM_RFCCpeIntGetAndClear ./obj/debug/RFCC26X2_multiMode.o
    NOROM_RFCCpePatchReset /obj/debug/RFCC26X2_multiMode.o
    NOROM_RFCDoorSendto ./obj/debug/RFCC26X2_multiMode.o
    NOROM_RFCHwIntGetAndClear ./obj/debug/RFCC26X2_multiMode.o
    NOROM_RFCOverrideSearch ./obj/debug/RFCC26X2_multiMode.o
    NOROM_RFCOverrideUpdate /obj/debug/RFCC26X2_multiMode.o
    NOROM_RFCSynthPowerDown ./obj/debug/RFCC26X2_multiMode.o
    RF_PATCH_CPE_BT5 /obj/debug/ti_radio_config.o
    rf_patch_mce_iqdump /app/../lib/libmioty_1.0.0.a 

    基本上、BLE 简单外设使用专用且经过修补 的 RFCC26X2_MODULL.c 模块、这阻止了我添加/使用低于1GHz 的功能。

    1-如果 TI 开发人员在 BLE Simple 外设中修补了一些 SDK 公用文件/功能、请建议如何合并这两个项目?

    2-是否有任何参考/文档可以帮助我了解这一不透明的构建过程?

    此致、

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

    你好、Jo、

    我建议您在必须选择时始终使用"BLE"值(就堆栈大小等而言)。 至于您的应用程序“挂起”,RF_runCmd()不是 DMM 支持的 API,这可能是您的问题。 这应该意味着您尚未打开 EasyLink 的"多客户端模式"、您可以在 SysConfig 中的 Easylink->Advanced View 下执行此操作。

    在您的案例中、解决方案不是删除射频库、而是更有可能导致您遇到更多问题。 如果您确实想覆盖库版本、最好只将源文件添加到项目中、因为链接器会在可能的情况下选择库的此版本。 缺少符号可能是由于您在项目中缺少 DriverLib 的某些部分、这意味着链接器不会找到要链接的这些符号。 您是否在项目链接器设置中添加了"driverlib"库?  

    由于您的最终目标似乎是使用 DMM 的 EasyLink + BLE、因此我实际上建议您采用"DMM_wsnnode_ble_sp_app"示例、只需替换此项目中的 EasyLink 和 BLE 应用文件、因为这意味着您无需从头开始手动设置全部文件。 如果您希望自己坚持合并、此示例仍应作为示例、说明在您的案例中需要如何设置项目设置。

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

    您好!

    感谢您的回答。

    "由于您的最终目标似乎是使用 DMM 的 EasyLink + BLE、因此我实际上建议您采用"DMM_wsnnode_ble_sp_app"示例、只需替换此项目中的 EasyLink 和 BLE 应用文件、因为这意味着您无需从头开始手动设置全部文件。 如果您希望自己坚持合并、此示例仍应作为示例、说明在您的案例中需要如何设置项目设置。"

    我的初始目标只是接收 BLE 写入请求/命令、以便配置器件并添加无线更新。

    基本上、当 BLE 打开时、低于1GHz 关闭。

    当低于1Gh 打开时、BLE 关闭(按下按钮将启动 BLE 广播并关闭低于1GHz Tx)

    因此、BLE 和低于1GHz 不会同时运行、而是按顺序运行!

    "我建议您在必须选择时始终使用"BLE"值(就堆栈大小等而言)。"

     

    实际上、我可能 缩小了问题的范围

    1. 我保留了 BLE *。cfg 并添加了低于1GHz 应用所需的邮箱支持。
    2. 在 BLE 简单外设示例中、我添加了 源文件。
    3. 每个协议都在自己的线程上运行。
    4. 出于测试目的、我不会初始化 BLE 应用和堆栈(没有 iCall_createRemoteTasks 调用)
    5. 低于1GHz 的器件可以毫无问题地进行传输!
    6. 然后在 main.c 中、我 通过调用 iCall_createRemoteTasks 初始化 BLE5-Stack
    7. 低于1GHz 的器件不再传输 系统挂起在 rf_runCmd 上
    8. 我对 iCall_createRemoteTasks 进行注释
    9. 低于1GHz 的器件可以无任何问题地进行传输

    根据我的基本理解、一旦与 BLE5-STACK 相关的线程初始化、我就无法使用 RF_runCmd API。

    1. 是否有任何限制?
    2. 即使我们不打算同时使用两个堆栈、也需要 DMM 接口吗?

    此致

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

    你好、Jo、

    DMM 解决的是轻松共享无线电、它支持"并发"操作、但不强制执行它、您仍然可以仅根据需要执行"单个堆栈"。 它为您提供了一个额外的工具箱、用于控制射频驱动器中发生的调度(对于 DMM、DMM 调度程序中的调度程序基本上是驱动程序的扩展)。  

    无论是否使用 DMM、您都需要确保在这种情况下使用正确的 API、以"rf_runCmd"为例、此命令假定只有一个驱动程序用户、如果您有两个驱动程序用户(Easylink 和 BLE)、 您需要使用命令的“计划”版本。 这是例如 RF_runScheduleCmd (),而不是 RF_runCmd ()。 这也是 EasyLink 在启用"多客户端模式"时的作用、它使用适合在驱动程序与其他人共享时使用的 API (您应该能够看到 EasyLink TX/RX 函数中有一条 if 语句、其中它使用一条或另一条、具体取决于"multiClientMode"标志。

    翻转此复选框可能会为您提供一些进展、我建议您首先执行此操作。  

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

    您好、M-W、

    我通过启用 DMM 并编辑无线电策略取得了一些进展。

    但是、如何 使用 RF_scheduler 运行 CMD_GET_FW_INFO 等立即命令(BLE 栈已初始化时)?

    我有什么问题吗?

    rf_open()
    
    RFC_CMD_GET_FW_INFO_t cmdInfo;
    
    cmdInfo.commandNo = CMD_GET_FW_INFO;
    
    RF_ScheduleCmd 参数 sched_params;
    rf_ScheduleCmdParams_init (&sched_params);
    
    SCHED_params.EndTime = 0;
    SCHED_params.allowDelay = RF_AllowDelayAny;
    
    
    rf_CmdHandle cmdHdl = rf_scheduleCmd (handle、(rf_Op*)&cmdInfo、&sched_params、0、0);
    
    RF_Close ()
    

    此致、

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

    你好、Jo、

    您是否尝试过"立即运行"API?

    rf_runImmediateCmd ();