如何解决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 举报,一经查实,本站将立刻删除。