#pragma arm section说明

转自:http://blog.csdn.net/humanbeng/article/details/7971570

4.6.3 #pragma arm section [section_sort_list]

此编译指示指定要用于后续函数或对象的节名称。这包括编译器为进行初始化而创建的匿名对象的定义。注意可以将 __attribute__((section(..)))  用于函数或变量以替代 #pragma arm section。

【语法】
#pragma arm section [ section_sort_list]
其中:
section_sort_list 指定要用于后续函数或对象的节名称的可选列表。
section_sort_list  的语法为:section_type[[=]"name"] [,section_type="name"]*

有效的节类型是:• code 、• rodata、• rwdata、• zidata 。

【用法】

可以将分散加载描述文件与 ARM  链接器配合使用,以控制将已命名的节放在特定内存地址的方式。

【限制】

此选项对以下内容无效:
• 内联函数及其局部静态变量。
• 模板实例化及其局部静态变量。
• 删除未使用的变量和函数。但是,可通过使用  #pragma arm section,使链接
器能够删除本来可能会保留的函数或变量,因为它与使用的函数或变量位
于相同的节中。
• 将定义写入对象文件的顺序。

【示例】

int x1 = 5;                     // in .data (default)
int y1[100];                    // in .bss (default)
int const z1[3] = {1,2,3};      // in .constdata (default)
#pragma arm section rwdata = "foo", rodata = "bar"
int x2 = 5;                     // in foo (data part of region)
int y2[100];                    // in .bss
int const z2[3] = {1,2,3};      // in bar
char *s2 = "abc";               // s2 in foo, "abc" in .conststring
#pragma arm section rodata
int x3 = 5;                     // in foo
int y3[100];                    // in .bss
int const z3[3] = {1,2,3};      // in .constdata
char *s3 = "abc";               // s3 in foo, "abc" in .conststring
#pragma arm section code = "foo"
int add1(int x)                   // in foo (code part of region)
{
return x+1;

#pragma arm section code

其实就是增加额外的name段,将这个段放在code、rodata、rwdata或zidata的起始位置,至于具体是哪个段,就是由section_type[[=]"name"]中的section_type指定了。

时间: 2024-11-12 20:48:07

#pragma arm section说明的相关文章

ARM分散加载

在ARM开发当中,希望某些代码或者数据,在编译时放置在指定位置. 关键词:scf(scatter file分散加载文件) _attribute_属性  makefile编译 map文件 bin文件 1. 分散加载文件: bin文件的加载方式: code区+RO(read only data)+RW&ZI(已初始化的变量和未初始化的变量) 执行方式: code区+RO区:如果flash片上可执行,则可直接在该nor flash则可直接在该nor flash上直接执行.否则则要拷贝至RAM当中执行.

Keil sct分散加载文件

首先介绍几个概念: 1.ARM映像文件 ARM映像文件是一个层次性结构的文件,其中包含了域(region).输出段(output section)和输入段(input section).各部分关系如下: 一个映像文件由一个或多个域组成 每个域包含一个或多个输出段 每个输出段包含一个或多个输入段 各输入段包含了目标文件中的代码和数据 输入段中包含了4类内容:代码.已经初始化的数据.未经初始化的存储区域.内容初始化成0的存储区域.每个输入段有相应的属性,可以为只读的(RO).可读写的(RW)以及初始

IAR中常用的 #pragma 命令和扩展关键字

pragma 命令 1.#pragma message(" ") 编译器编译到此处,在Build窗口中打印相应文本信息. 2.#pragma error "" 编译器编译到此处,在Build窗口中产生错误并打印其文本信息. 3.#pragma inline [=forced | never] 用这个指令是建议编译将这条指令后面的函数内联到调用它的函数的函数体中去. 当#pragma inline = forced,则强制让编译器对函数内联,如果内联不成功,会发出警告

UITableView (4): 在TableView中移动cell和Section 从TableView中删除cell和section

一  .问题:你想用流畅直观的动画来移动和拖拽TableView中的cell和section 方案: 用moveSection:toSection:方法把一个Section移动到新位置. 用moveRowAtIndexPath:toIndexPath:方法把一个cell从当前位置移动到新位置 例子: 创建一个TableView并在其中加载3个Section,每个Section有3个cell #pragma - mark 初始化数据 - (NSMutableArray *)newSectionWi

最快的3x3中值模糊

10.1国庆后,知名博主:laviewpbt  http://www.cnblogs.com/Imageshop/ 发起了一个优化3x3中值模糊的小活动. 俺也参加其中,今天博主laviewpbt  共享了一份不错的CLAHE代码. free精神,真心为其点赞. 故俺也分享这份最快的3x3中值模糊的代码. /// 编写者: laviewpbt, 编写时间: 2015.10.16, 联系QQ: 33184777 /// <summary> /// 快速的实现3*3大小的中值模糊,边缘1像素未做处

openMP的一点使用经验

最近在看多核编程.简单来说,由于现在电脑CPU一般都有两个核,4核与8核的CPU也逐渐走入了寻常百姓家,传统的单线程编程方式难以发挥多核CPU的强大功能,于是多核编程应运而生.按照我的理解,多核编程可以认为是对多线程编程做了一定程度的抽象,提供一些简单的API,使得用户不必花费太多精力来了解多线程的底层知识,从而提高编程效率.这两天关注的多核编程的工具包括openMP和TBB.按照目前网上的讨论,TBB风头要盖过openMP,比如openCV过去是使用openMP的,但从2.3版本开始抛弃ope

iOS-tableView点击下拉菜单

#import "ViewController.h" @interface ViewController ()<UITableViewDataSource,UITableViewDelegate> @property(nonatomic, strong)UITableView *tableView; @property(nonatomic, strong)NSMutableArray *sectionArray;//section标题 @property(nonatomic

OpenMP实现生产者消费者模型

生产者消费者模型已经很古老了吧,最近写了个OpenMP版的此模型之实现,来分享下. 先说一下模型的大致做法是: 1.生产者需要取任务,生产产品. 2.消费者需要取产品,消费产品. 生产者在生产某个产品之后,要告知消费者此产品已经可以使用了.消费者通过获得可以使用这个信号来取得产品,进一步消费产品. 比如,我们有N个图像需要对每一个图像作滤波或者变换等处理,并且把处理后的结果存到硬盘上. 那么生产者可以将N个图像看成N个任务,每个任务都是独立的,每个任务的计算结果可以看成是产品,消费者就是取这个产

OpenMp之sections用法

section语句是用在sections语句里用来将sections语句里的代码划分成几个不同的段 #pragma omp [parallel] sections [子句] { #pragma omp section { 代码块    } } 当存在可选参数#pragma omp parallel sections时,块中的代码section才会并行处理,而#pragma omp  sections是串行的程序.详见下面的代码: #include<stdio.h> #include<st