[STM32L4] 对 strcat() 的调用实际上没有调用 strcat()?

[复制链接]
 楼主| Hitomi22 发表于 2025-7-19 10:00 | 显示全部楼层 |阅读模式
rc, 实际, ST, AB, ov, vr
本帖最后由 Hitomi22 于 2025-7-28 22:48 编辑

在使用STM32CubeIDE v1.6.1,遇到了一些奇怪的问题。
当我调用strcat()函数时,如果目标字符串末尾(即null终止符所在位置)的地址是奇数地址,就会出现硬件错误(hardfault)?
以下是.list文件中的代码:
                  char s1[20];                  strcpy(s1, "--"); 8
00ab50:        f107 030c         
add.w        r3, r7, #12
800ab54:        4a65
             ldr        r2, [pc, #404]        ;
(800acec <sd_cmdproc_process_packet+0x374>)
800ab56:        6812            
ldr        r2, [r2, #0]
800ab58:        4611
             mov        r1, r2
800ab5a:        8019  
            strh        r1, [r3, #0]
800ab5c:        3302
              adds        r3, #2 800ab5e:        0c12              lsrs        r2, r2, #16 800ab60:        701a              strb        r2, [r3, #0]                  strcat(s1, "1"); 800ab62:        f107 030c         add.w        r3, r7, #12 800ab66:        4618              mov        r0, r3 800ab68:        f7f5 fbc4         bl        80002f4 <strlen> 800ab6c:        4603              mov        r3, r0 800ab6e:        461a              mov        r2, r3 800ab70:        f107 030c         add.w        r3, r7, #12 800ab74:        4413              add        r3, r2 800ab76:        495e              ldr        r1, [pc, #376]        ; (800acf0 <sd_cmdproc_process_packet+0x378>) 800ab78:        461a              mov        r2, r3 800ab7a:        460b              mov        r3, r1 800ab7c:        881b              ldrh        r3, [r3, #0] 800ab7e:        8013              strh        r3, [r2, #0]                  strcat(s1, "2"); 800ab80:        f107 030c         add.w        r3, r7, #12 800ab84:        4618              mov        r0, r3 800ab86:        f7f5 fbb5         bl        80002f4 <strlen> 800ab8a:        4603              mov        r3, r0 800ab8c:        461a              mov        r2, r3 800ab8e:        f107 030c         add.w        r3, r7, #12 800ab92:        4413              add        r3, r2 800ab94:        4957              ldr        r1, [pc, #348]        ; (800acf4 <sd_cmdproc_process_packet+0x37c>) 800ab96:        461a              mov        r2, r3 800ab98:        460b              mov        r3, r1 800ab9a:        881b              ldrh        r3, [r3, #0] 800ab9c:        8013              strh        r3, [r2, #0] 800ab9e:        e1c4              b.n        800af2a <sd_cmdproc_process_packet+0x5b2>  }
"strcat "1"" 可以工作,但"strcat "2""会导致硬件故障。我怀疑是与"strh"的对齐错误有关。
另一个奇怪的现象是:对strcat()(以及strcpy())的调用并没有调用实际的函数。


LOVEEVER 发表于 2025-7-29 23:28 | 显示全部楼层
没有遇到过
您需要登录后才可以回帖 登录 | 注册

本版积分规则

43

主题

45

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部