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.
工具与软件:
大家好
我正在尝试使用 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。
TIClang 支持 GCC 语言扩展
大多数 CLI 选项在两个编译器之间是相同的
仅不兼容性:TI 链接器。 链接器脚本与 GCC 非常相似、但并不完全相同。 简单的迁移指南:https://software-dl.ti.com/ccs/esd/documents/sdto_cgt_linker_migration_gcc_to_tiarmclang.html
此致、
您好!
例如、如果我们谈论的是 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 的示例中的代码之间的错误同步方法。
""="">谢谢你的帮助!