You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

嵌入式裸机编程中.ld文件指定FLASH不可写后的权限保障问询

嵌入式裸机中FLASH只读属性的保障机制

当你在链接脚本(.ld)里把FLASH标记为(rx)只读属性后,系统会从编译链接阶段和运行阶段两层来保障这个权限不被违反:

一、编译链接阶段:GCC与链接器的静态检查

  • GCC会对代码做静态分析:如果直接修改const修饰的只读变量(这类变量默认会被链接到FLASH区域),GCC会抛出编译错误;如果通过指针强制类型转换绕过const限制,开启-Wall等警告选项时,GCC会给出警告,提醒你可能存在非法写入操作。
  • 链接器会严格按脚本内存属性分配段:将.text(代码段)、.rodata(只读数据段)放到FLASH的(rx)区域,把.data、.bss等可写数据段放到RAM的(rwx)区域。要是某个段的属性和目标内存区域不匹配(比如把可写段塞进FLASH),链接器会直接报错终止构建。

二、运行阶段:硬件层面的强制防护

这是最核心的限制,毕竟编译阶段的检查能被代码绕过,而硬件防护是硬约束:

  • FLASH物理特性限制:绝大多数嵌入式FLASH(比如NOR FLASH)不支持普通CPU写指令直接写入,必须通过特定擦写时序(发送擦除命令、编程命令)才能修改内容。如果代码里用普通赋值语句写FLASH地址,CPU执行时要么触发总线错误,要么操作直接无效。
  • 内存保护单元(MPU):如果你的MCU带有MPU,可以在初始化时配置FLASH对应的内存区域为只读访问权限。一旦CPU执行写FLASH的指令,MPU会立刻触发内存访问异常,你可以在异常处理函数里捕获错误,做复位、日志记录等操作。
  • 少数带MMU的高端MCU(比如ARM Cortex-A系列),也能通过MMU页表配置FLASH区域为只读,原理和MPU类似,但裸机场景下MPU的使用更普遍。

内容的提问来源于stack exchange,提问作者james lebron

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.19 22:52:10