常量和函数放置在flash的指定区域

分类: 365bet线上注册 时间: 2025-11-07 06:53:40 作者: admin

一、新增flash区域

FLASH (rx) : ORIGIN = 0x00000000, LENGTH = 128K

FLASH1 (rx) : ORIGIN = 0x00020000, LENGTH = 224K

RAM (xrw) : ORIGIN = 0x20000000, LENGTH = 32K

二、新增txt段

.text1 :

{

. = ALIGN(4); /*设置当前位置指针向前移动到下一个 4 字节对齐的位

置*/

KEEP(*(.text1.used)) /*使用 KEEP 指令保留所有输入文件中名为 .text1.used

的段。

KEEP 指示链接器即使在优化过程中也不应丢弃这些段

的内容,确保它们始终包含在最终的映像中。

通常用于标记重要的初始化代码、中断向量表等必须存

在的部分。*/

*(.text1) /*将所有输入文件中名为 .text 的段的内容合并到当前

定义的 .text 输出段*/

*(.text1.const)

*(.text1.func)

*(.text1.*) /*合并所有以 .text. 开头的其他子段,这些通常是编译

器为特定功能(如内联汇编、特定编译选项生成的代码等)生成的特殊文本段*/

. = ALIGN(4);

} >FLASH1 AT>FLASH1 /*指定 .text 段以及其包含的所有子段应当被放置在名

为 FLASH 的存储区域中

表示虽然 .text 段的内容会被存储在 FLASH 中,但在

运行时,CPU应从 FLASH 中加载这部分内容到内存中

这里的 AT 关键字指示了段的实际存储位置(物理地

址),而>操作符则指定了运行时的加载地址(虚拟地址)

*/

三、使用 attribute 对常量与函数进行修饰

// 该属性表示编译器将带有此属性的变量放入名为 .text1.const 段

__attribute__((section(".text1.const"))) const u8 DataTab[6] = {0x00,0x11,0x2

2,0x33,0x44,0x55};

// 该属性表示编译器将带有此属性的变量放入名为 .text1.func 段

__attribute__((section(".text1.func"))) void CPUDelay(volatile uint32_t us){

while(us--){

__NOP();__NOP();__NOP();__NOP();__NOP();__NOP();__NOP();__NOP();__NOP

();__NOP();

}

}