c语言 变量 section,__attribute__ 指定函数、变量到某个特定的section段

本文介绍了如何利用C语言的__attribute__关键字和section来将函数和变量指定到特定的内存段,以满足特定的业务需求,如将全局变量限制在特定区域,同时分别讲解了代码的实现和链接脚本的修改方法。
摘要由CSDN通过智能技术生成

我们先来看一个业务逻辑需求:

假设项目需要把RAM分2个bin区域,    bin1负责OS,以及一些驱动,BIN2负责相对业务,我想只让BIN1可定义全局变量,BIN2可以使用,但是不可以定义全局变量。

该如何实现?

__attribute__ 和 section

__attribute__这个关键词是GNU编译器中的编译属性,ARM编译器也支持这个用法。__attribute__主要用于改变所声明或定义的函数或 数据的特性,它有很多子项,用于改变作用对象的特性。

__attribute__肯定有很多的用法,今天就用到了section部分,所以就只针对这个做一些记录。

提到section,就得说RO RI ZI了,在ARM编译器编译之后,代码被划分为不同的段,RO Section(ReadOnly)中存放代码段和常量,RW Section(ReadWrite)中存放可读写静态变量和全局变量,ZI Section(ZeroInit)是存放在RW段中初始化为0的变量。

链接脚本

众所周知,我们所有的全局变量都是在  RW ZI两个段中。(具体可以百度下为什么)

那为了完成我们的前面提到的问题,我们就可以重新规划我们的 .sct 链接脚本。

我们把 RAM 分为两个区域    BIN_OS 和 BIN_APP

其中  BIN_OS 用来存放我们的全局变量 和 OS 的代码:

;BIN_OS为48K,只存放 OS的代码 和 +RW +ZI 也就是全局变量了。

RW_IRAM1 0x20000000 0x0000c000 {

  • 1
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值