zhilenkov Asked:2022-04-27 20:39:39 +0000 UTC2022-04-27 20:39:39 +0000 UTC 2022-04-27 20:39:39 +0000 UTC 如何在 C 中用零初始化结构 772 我有这个结构: typedef struct { char str[4][256]; int sizeStr; } _StrCalc; _StrCalc StrCalc; 全局结构必须用零初始化。除了'memset()'之外,如何做到这一点? c 1 个回答 Voted Best Answer maestro 2022-05-05T15:41:31Z2022-05-05T15:41:31Z 如果你编译成 IAR,那么一切都会自动初始化。如果在 Keil 或其他基于 GCC 的系统上,请查找startup_stm32f*.asm. 它包含只执行静态内存初始化的代码。这是一个例子: Reset_Handler: /* Copy the data segment initializers from flash to SRAM */ movs r1, #0 b LoopCopyDataInit CopyDataInit: ldr r3, =_sidata ldr r3, [r3, r1] str r3, [r0, r1] adds r1, r1, #4 LoopCopyDataInit: ldr r0, =_sdata ldr r3, =_edata adds r2, r0, r1 cmp r2, r3 bcc CopyDataInit ldr r2, =_sbss b LoopFillZerobss /* Zero fill the bss segment. */ FillZerobss: movs r3, #0 str r3, [r2], #4 LoopFillZerobss: ldr r3, = _ebss cmp r2, r3 bcc FillZerobss 代码包含常量_sbss,_sidata等_edata。它们在链接描述文件(带有 LD 扩展名的文件)中指定。 你需要: 检查指定代码的存在; 检查链接描述文件中常量的正确性。
如果你编译成 IAR,那么一切都会自动初始化。如果在 Keil 或其他基于 GCC 的系统上,请查找
startup_stm32f*.asm. 它包含只执行静态内存初始化的代码。这是一个例子:代码包含常量
_sbss,_sidata等_edata。它们在链接描述文件(带有 LD 扩展名的文件)中指定。你需要: