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

一、新增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();
 }
}

 

posted @ 2025-06-29 22:22  小舟从此逝_1  阅读(85)  评论(0)    收藏  举报