目 录CONTENT

文章目录

链接文件学习(一):数据固定到指定地址

moke
2024-07-25 / 0 评论 / 0 点赞 / 82 阅读 / 0 字

概述

基于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 无论是否初始化,虽然是局部的,但是在程序的整个生命周期中存在(定义时出生,随着程序结束而结束)。

博主关闭了所有页面的评论