问题描述
我是 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 (将#修改为@)