0

我们正在尝试在 nrf52832 上设置 Zephyr 以运行 HCI 接口。由于硬件限制,我们必须不使用流控制,因此 H:5 HCI(三线 UART)和 bluez 5.54 我们在 DTS 覆盖中禁用了流控制。我们尝试使用 west build -t menuconfig标准 hci uart zephyr 示例来激活 H5。但这不起作用,因为它在控制器端而不是我们需要的客户端女巫。

我们在网上找到了当前的 HCI UART 示例和@carlesc 给我们的提示。您可以在此处找到源代码:代码。我已经使用 Bluez 3wire 支持编译了我的 linux 内核,并使用hciattach /dev/ttyUSB0 3wire 1000000 noflow nosleep. Linux 识别适配器并附加它,但随后系统崩溃并显示以下日志:

00> [00:00:44.900,909] <err> os: ***** MPU FAULT *****
00> [00:00:44.900,909] <err> os:   Stacking error (context area might be not valid)
00> [00:00:44.900,909] <err> os:   Data Access Violation
00> [00:00:44.900,939] <err> os:   MMFAR Address: 0x20006230
00> [00:00:44.900,939] <err> os: r0/a1:  0xedf4f9de  r1/a2:  0x48854818  r2/a3:  0xaaaaaaaa
00> [00:00:44.900,970] <err> os: r3/a4:  0xaaaaaaaa r12/ip:  0xffffffff r14/lr:  0x00000009
00> [00:00:44.900,970] <err> os:  xpsr:  0x61000000
00> [00:00:44.900,970] <err> os: Faulting instruction address (r15/pc): 0x00016bf0
00> [00:00:44.900,970] <err> os: >>> ZEPHYR FATAL ERROR 2: Stack overflow on CPU 0
00> [00:00:44.901,000] <err> os: Current thread: 0x20000890 (unknown)
00> [00:00:45.324,310] <err> os: Halting system

我试图 arm-none-eabi-addr2line -e zephyr/build/zephyr/zephyr.elf 0x16bd0确定错误发生的位置。我收到了这个回复 zephyrproject/zephyr/kernel/queue.c:280

我尝试更改CONFIG_BT_HCI_TX_STACK_SIZE大小,CONFIG_MAIN_STACK_SIZE以及CONFIG_ASSERT=ynrf52sdk_nrf52832.conf 中的 但这并没有改变。

建立连接时似乎会发生错误。建立连接后,zephyr 代码在net_buf_get函数上崩溃。

4

1 回答 1

0

我认为您在尝试增加 prj.conf 文件中的 CONFIG_MAIN_STACK_SIZE 时走在正确的轨道上。我会进一步增加到 512 的倍数(1024、2048、4096),直到不再出现堆栈溢出。

我对 Zephyr RTOS 和一个具有多个级别的嵌套函数的任务有同样的问题。

于 2021-01-28T16:50:56.037 回答