Zephyr RTOS 中的 printk() 最大字符串长度

问题描述

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

在 Zephyr v1.5.1 中的 logger 示例中,这可以通过简单地将 CONfig_TEST_EXTRA_STACKSIZE=4096 添加prj.conf解决。但是,在我自己的项目中,由于某种原因大幅增加我所有任务的堆栈大小无济于事:(

那么,问题是,可能是什么原因造成的,我该如何轻松解决

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)