嵌入式常见的段错误死机原因之一strlen函数

Posted 太阳德生

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了嵌入式常见的段错误死机原因之一strlen函数相关的知识,希望对你有一定的参考价值。

          在做嵌入式产品常见死机原因有很多种,其中之一就是strlen函数引起的。这个函数大家不会陌生,学c语言最基本的函数了,但在实际使用中偶尔不小心还是可能会引起段错误造成死机的。为什么呢?

   函数原型:unsigned int strlen(char *s);

也就是输入一个字符串函数指针,判断这个字符串有多长。当你不小心输入了一个空指针的时候,错误就来了。很多时候我们都知道使用指针之前都判断一下这个指针是否是空指针,在开发中往往有时图省事或者自认为这里不判断也不会有事,盲目自信了一把!因此,我们还是得养成良好得习惯,使用之前还是要验证一下合法性。

段错误示例如下:

[2021/9/28 18:34:42] NMI
[2021/9/28 18:34:42] msp: 200087b8  psp: 3832dce8  stack(reg0): 200087b8  reg4: 20008798
[2021/9/28 18:34:42] r0: 00000000  r1: 00000001  r2: e000ed00  r3: 80000833
[2021/9/28 18:34:42] r4: 00000000  r5: 00000000  r6: 7ffffff8  r7: 3832de00
[2021/9/28 18:34:42] r8: 00000000  r9: ffffffff  r10: 2000fd24  r11: 00000001
[2021/9/28 18:34:42] r12: 00000030  r14(lr): 18124c19  r15(pc): 18124c18  xPSR: 61000033
[2021/9/28 18:34:42] The exception call: 200087b8
[2021/9/28 18:34:42] The exception end: 20008800
[2021/9/28 18:34:42] PC call-0: 18124c18: f7ff fffe 4770 460b 0781 d503
[2021/9/28 18:34:42] PC call-1: 18124c14: f000 f828 f7ff fffe 4770 460b
[2021/9/28 18:34:42] The normal call: 3832dce8

[2021/9/28 18:34:42] PC call_normal-0: 1811a076: 42d3 d100 bd10 f813 4d01 f801
[2021/9/28 18:34:42] PC call_normal-1: 1812060e: f7f9 fd21 68a3 1b9b 60a3 6823
[2021/9/28 18:34:42] PC call_normal-2: 1812060e: f7f9 fd21 68a3 1b9b 60a3 6823
[2021/9/28 18:34:42] PC call_normal-3: 18120582: 0000 e92d 47f0 688e 429e 4682
[2021/9/28 18:34:42] PC call_normal-4: 1811ad2c: 47c0 3001 d0aa 6823 079b d413
[2021/9/28 18:34:42] PC call_normal-5: 18120582: 0000 e92d 47f0 688e 429e 4682
[2021/9/28 18:34:42] PC call_normal-6: 1811a4ac: 0020 6c68 004c 6665 4567 4746
[2021/9/28 18:34:42] PC call_normal-7: 101667d4: 7325 2500 3a73 6425 7325 2f00

以上是关于嵌入式常见的段错误死机原因之一strlen函数的主要内容,如果未能解决你的问题,请参考以下文章

嵌入式常见的段错误死机原因之一strlen函数

嵌入式软件错误的五个主要原因

高手经验分享,嵌入式开发出现BUG的常见原因

嵌入式代码中产生bug的几大原因

为啥我在 c 中遇到 atoi 的段错误?

笔记本电脑蓝屏了,如何解决?