
难度:★本文首发于我的嵌入式技术号「OneChan」,未经授权禁止转载。上篇文章我们聊了SPACE,知道它可以在内存里“预留空地”而不增加文件体积。但有没有想过一个问题:那片“空地”里,到底是什么?是全零?是随机垃圾?还是某种特定的模式?如果你以为“反正没人用,是什么无所谓”,那你就小看了嵌入式世界的残酷。今天我们要聊的FILL指令,就是用来回答“空地里该填什么”的。它的存在,关系到程序的安全、调试的效率,甚至 Flash 的磨损寿命。一、如果不指定 FILL,默认值到底是什么?先看答案。在 Keil 的 ARM 汇编器(armasm)里:默认填充值是0x00。没错,就是零。如果你用SPACE 1024定义了一块区域而没有用FILL显式指定,那汇编器就把它全填 0。但注意——这个“默认 0x00”只在汇编器分配已初始化区域时才生效。如果你用了NOINIT(如AREA STACK, NOINIT, READWRITE),那片区域根本不占文件空间,汇编器不往里填任何东西。它只存在于链接器的“账本”里,运行时的内容是上电后 RAM 的随机残留值。