0

我是 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

loggerZephyr v1.5.1 中的示例中,这可以通过简单地添加CONFIG_TEST_EXTRA_STACKSIZE=4096prj.conf. 然而,在我自己的项目中,由于某种原因,大幅增加我所有任务的堆栈大小并没有帮助:(

所以,问题是,可能是什么原因,我怎样才能轻松解决它?

4

0 回答 0