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.

[参考译文] CC1354P10:BLE 初始化错误

Guru**** 1805680 points
Other Parts Discussed in Thread: CC2674R10, CC1354P10, CC2652R, CC1354R10
请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/wireless-connectivity/sub-1-ghz-group/sub-1-ghz/f/sub-1-ghz-forum/1421026/cc1354p10-ble-initialization-error

器件型号:CC1354P10
主题中讨论的其他器件:CC2654P10CC2652RCC1354R10、CC2674R10

工具与软件:

大家好
我正在尝试使用 FreeRTOS 和 GCC 编译器创建用于 CC2654P10的项目。
我正在使用"LP_EM_CC1354P10_1"的"simple_peripheral"工程作为基座。
我使用为工程生成的文件(ti_driver_config、ti_device_config 等)。 一般来说、一切都运行良好、即我创建可正常工作的任务。
但我无法初始化 BLE。 我看到执行到达 osal_run_system 函数(从 ble5stack_flash 文件夹中)、其中调用第一个函数。 显然、这是 LL_ProcessEvent。

    HAL_ENTER_CRITICAL_SECTION(intState);
    events = tasksEvents[idx];
    tasksEvents[idx] = 0;  // Clear the Events for this task.
    HAL_EXIT_CRITICAL_SECTION(intState);

    activeTaskID = idx;
    events = (tasksArr[idx])( idx, events );
    activeTaskID = TASK_NO_TASK;

    HAL_ENTER_CRITICAL_SECTION(intState);
    tasksEvents[idx] |= events;  // Add back unprocessed events to the current task.
    HAL_EXIT_CRITICAL_SECTION(intState);


由于这是一个封闭堆栈、我无法准确跟踪正在执行的内容。 但是、在该函数内的某个位置、会发生错误、并且整个项目的执行最终会产生故障 ISR 错误。
我不确定错误是否发生在同一位置。 但肯定是执行该功能的过程中的某个地方。 我不知道原因可能是什么、因为带有"simple_peripheral"且 ti RTOS 的项目或多或少地正确工作。 我尝试在进入 faultISR 时在 CPU_SCS 寄存器中找到其他信息。 例如、我在 CFSR 寄存器中看到了0x100、在 HFSR 寄存器中看到了0x40000000、但我不确定这是否包含有用的信息。

设置 FreeRTOS 时是否存在错误? 也许堆栈大小不够? 但如何证明它? 我曾在 FreeRTOS 配置文件中尝试增加堆大小、但没有收到任何帮助。 我曾尝试增加针对射频任务的堆栈大小、但都没有帮助。
也许是关于配置射频任务? 但在 ti RTOS 示例中、这不会导致严重错误。
也许在 CSS 工作室你可以跟踪我从哪里离开在一个关键的中断? 调试中常规的调用栈不会显示此类信息。

感谢您的帮助。

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

    您好!  

    感谢您联系我们。  

    请注意、BLE5Stack 未在 CC1354 / CC2674器件上使用 GCC 编译器进行测试。 出于以下原因、我们建议使用 TIClang 而不是 GCC。  

    此致、

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

    您好!

    感谢您的答复。
    恐怕我还无法切换到另一个编译器。
    但是、也许对我的情况有一些建议? 例如、如果我们讨论一下 CC2652或其他类似芯片的概念、

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

    您好!

    例如、如果我们谈论的是 cc2652或其它类似芯片的概念?

    SDK 6.30 为 CC2652R 上的 BLE5Stack 提供 FreeRTOS + GCC 支持(参阅 multi_role 示例)

    也许堆栈大小不够? 但如何证明它? i [/报价]

    您可以使用 ROV 来查看堆和堆栈大小。 《调试指南》中记录了 ROV 的使用。  https://software-dl.ti.com/simplelink/esd/simplelink_cc13xx_cc26xx_sdk/7.41.00.17/exports/docs/ble5stack/ble_user_guide/html/ble-stack-5.x-guide/debugging-index.html#ti-rtos-object-viewer 

    我希望这将有所帮助、

    此致、  

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

    你(们)好

    我更仔细地研究了问题、发现错误在中 llUserCfg_t 结构。

    因为我没有 EM_CC1354P10_1_LP 定义已安装、该结构内部缺少12个字节(或三个附加字段)。

    正因为如此、在执行该行时

    llUserConfig.rfMode = &RF_modeBle;

    在 setBleUserConfig 函数中、它被写入了一个不正确的偏移、随后在调用 rf_open 函数时、传递了一个不正确的参数 rf_Mode* pRfMode

    随后造成灾难性后果。 不清楚为什么要在没有此默认设置的情况下使用 SDK 示例。

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

    您好!

    这是一个很好的捕获,谢谢分享!

    此致、  

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

    无论如何、我在集成 FreeRTOS 时遇到问题。

    iCall_posix.c 文件(ble5stack_flash/iCall/ctask src)中、有一个 iCall_newtask 函数生成某个函数、并返回一个指向变量的指针 syncEvent

    我想是 FreeRTOS 提供的活动组、但下班后使用 BLE 堆栈、比如 Util_enqueueMsg 从文件 util.c (ble5stack_flash/common/cc26xx)中进行复制。 这个函数内部是这样的

    #ifdef FREERTOS
    
    typedef struct {
        uint8_t * pData;
    }queueMSG;
    
    uint8_t Util_enqueueMsg(mqd_t msgQueue,
                            Event_Handle event,
                            uint8_t *pMsg)
    {
      ConsoleWrite("%s()\r\n", __func__);
        queueMSG myMsg;
    
        myMsg.pData = pMsg;
        mq_send(msgQueue, (char*)&myMsg, sizeof(queueMSG), 1);
    
        // Wake up the application thread event handler.
        if (event)
        {
        
            uint32_t msg_ptr = UTIL_QUEUE_EVENT_ID;
            mq_send(event, (char*)&msg_ptr, sizeof(msg_ptr), 1);
            
        }
    
        return TRUE;
    
    }
    #else
    // Other
    #endif

    如果条件使用 func mq_send 和队列类型(其 syncEvent 变量)、但我们将初始化他的 like 事件组。

    如何最好地解决这个问题?

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

    您好!

    如何解决此问题的最佳条件?

     恐怕我不能完全理解你的问题。  

    根据您之前的消息、由于缺少编译器预定义符号、您遇到了一些问题。 我强烈建议您确保未修改的工程中的所有预定义符号已正确添加到编译器配置。  

    我希望这将有所帮助、

    此致、

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

    您好!

    请说明要在项目中使用的文件夹"ble5stack"和"ble5stack_flash"之间有何差异?

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

    您好!  

    CC13xx/CC26xx 中的某些器件 在 ROM 中具有 ble5stack 的一部分。  ble5stack 应在 ROM 中具有 ble5stack 的一部分的器件上使用。  ble5stack_flash 应在 ROM 中没有 ble5stack 的器件上使用。  

    CC2674R10或 CC1354R10器件 在 ROM 中没有 ble5stack、因此  应使用 ble5stack_flash .  

    现在的问题与初始主题无关、我将关闭此主题。 请随时打开新主题帖、接受有关新咨询的支持-这可确保每次都选择合适的专家。 感谢您的理解。

    此致、  

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

    你(们)好

    是的认为讨论可以结束因为已经解决了我的问题不会主题外的消息我要的是、例中所有问题都出在 BLE 堆栈之间的 ICall使用 FreeRTOS 的示例中的代码之间的错误同步方法

    ""="">谢谢你的帮助!