我是 Zephyr 的新手,我对printk()
函数的行为有点困惑。
我想要的是允许在单个打印操作中打印很长(最多 1024 个字符)的字符串到 UART。当我在不更改任何配置的情况下执行此操作时,我尝试打印的字符串被删节为 128 个字符。
我想,如果我将以下行添加到prj.conf
,我可以将最大字符串长度增加到 512 字节:
CONFIG_LOG_PRINTK_MAX_STRING_LENGTH=512
但是,如果我将其进一步更改为 768 字节:
CONFIG_LOG_PRINTK_MAX_STRING_LENGTH=768
– 这会导致崩溃循环并显示以下错误消息:
[00:00:00.251,861] <err> os: ***** MPU FAULT *****
[00:00:00.251,861] <err> os: Stacking error (context area might be not valid)
[00:00:00.251,892] <err> os: Data Access Violation
[00:00:00.251,892] <err> os: MMFAR Address: 0x20015a28
[00:00:00.251,892] <err> os: r0/a1: 0x6ed54200 r1/a2: 0xdb5d3fa9 r2/a3: 0x0df5de7d
[00:00:00.251,922] <err> os: r3/a4: 0xb4da66d2 r12/ip: 0x65bcc27a r14/lr: 0x3d222cec
[00:00:00.251,922] <err> os: xpsr: 0x717c5a00
[00:00:00.251,922] <err> os: s[ 0]: 0x00000000 s[ 1]: 0x00000000 s[ 2]: 0xffffffff s[ 3]: 0xffffffff
[00:00:00.251,953] <err> os: s[ 4]: 0x00000000 s[ 5]: 0x00000003 s[ 6]: 0x00000000 s[ 7]: 0x00000000
[00:00:00.251,953] <err> os: s[ 8]: 0x00000000 s[ 9]: 0x00000000 s[10]: 0x00000000 s[11]: 0x00000000
[00:00:00.251,983] <err> os: s[12]: 0x00000000 s[13]: 0xffffffff s[14]: 0x00000000 s[15]: 0x00000000
[00:00:00.251,983] <err> os: fpscr: 0x5bb10e10
[00:00:00.251,983] <err> os: Faulting instruction address (r15/pc): 0x2205e68f
[00:00:00.251,983] <err> os: >>> ZEPHYR FATAL ERROR 2: Stack overflow on CPU 0
[00:00:00.252,014] <err> os: Current thread: 0x20000918 (unknown)
[00:00:01.758,026] <err> fatal_error: Resetting system
在logger
Zephyr v1.5.1 中的示例中,这可以通过简单地添加CONFIG_TEST_EXTRA_STACKSIZE=4096
到prj.conf
. 然而,在我自己的项目中,由于某种原因,大幅增加我所有任务的堆栈大小并没有帮助:(
所以,问题是,可能是什么原因,我怎样才能轻松解决它?