概述
基于Hightc的ld文件含义
r是读,w是写,p是管道,x是执行。
!不满足该字符之后的任何一个属性的section
链接文件最好把所有使用到的段给列举在如下包含里面,这样子做的好处是之后查内存一目了然。
Memory
{
PFLASH_USER_DATA (rx!p) : org= 0x801FFFE0 ,len = 0x20
x1 (rx!p) : org= 0xyyyyyyyy ,len = 0xzzzz
.......
xn (rx!p) : org= 0xuuuuuuuu ,len = 0xvvvv
}
使用方法
Hightec固定一个CONST数据在某个地址空间的方法两种如下:
方法1
第一步:先确定需要指定的空间,存储空间不可以与其他部分有任何的冲突,否则无效
链接文件里面
Memory
{
PFLASH_USER_DATA (rx!p) : org= 0x801FFFE0 ,len = 0x20
}
.userdata :ALIGN(32)
{
KEEP(*(.userdata ))
} > PFLASH_USER_DATA
第二步
MemMap.h 里面
#elif define (USER_DATA_START_CONSE_32)
#undef USER_DATA_START_CONSE_32
#program section " .userdata " aw4
#elif define (USER_DATA_STOP_CONSE_32)
#undef USER_DATA_STOP_CONSE_32
#program section
第三步
源文件里面进行包含即可
#define USER_DATA_START_CONSE_32
#include "Memmap.h"
const uint32 array[] =
{
0x11111111,
0x11111111,
0x11111111,
0x11111111,
0x11111111,
0x11111111,
0x11111111,
0x11111111,
}
#define USER_DATA_STOP_CONSE_32
#include "Memmap.h"
方法2
源文件里面
const uint32 array[] __attribute__((section(".userdata"))) =
{
0x11111111,
0x11111111,
0x11111111,
0x11111111,
0x11111111,
0x11111111,
0x11111111,
0x11111111,
}
链接文件里面
Memory
{
PFLASH_USER_DATA (rx!p) : org= 0x801FFFE0 ,len = 0x20
}
.userdata:
{
. = ALIGN(32)
KEEP(*(.userdata ))
. = ALIGN(32)
} > PFLASH_USER_DATA
小知识
.bss(RAM区域存储)
BSS段(bss segment)通常是指用来存放程序中未初始化的全局变量的一块内存区域。BSS是英文Block Started by Symbol的简称。BSS段属于静态内存分配。
.data 存放初始化的变量
静态局部变量被编译器放在全局存储区.data 无论是否初始化,虽然是局部的,但是在程序的整个生命周期中存在(定义时出生,随着程序结束而结束)。