1、函数与变量的 Section Attribute

void foobar (void) __attribute__ ((section (".CSECT mmm")));
void foobar (void)
{...}

上面代码,把函数foobar放置在段 .CSECT mmm中。注意,指名段是放在函数的外部声明里的。
多重属性的指定,可以通过逗号来分隔开,

extern int dataobj __attribute__ ((section (".DSECT ooo"), inpage));

2、函数的 Interrupt Attribute
把函数定义为软中断或者可屏蔽中断函数。这种函数不能被其他函数调用。

void int0 (void) __attribute__ ((interrupt));

如果要执行中断处理程序,应该使用下面属性:

void nmi_int0 (void) __attribute__ ((interrupt_nmi));

中断向量表,请参考"crt0.c - Startup Code" section of the crt0.c description

6、Memory Block Attribute
语法:

<type> *<variable_name> __attribute__ ((mem_block (N))); 

其中,N代表内存块数
• CEVA-XC32x 0..3 (4 memory blocks)
• CEVA-XC4210 0..7 (8 memory blocks)
• CEVA-XC4500 0..7 (8 memory blocks)

7、Aligned Attribut

Syntax:
<type> *<argument_name> __attribute__ ((aligned (N)))
<type> <name> __attribute__ ((aligned (N)));

在CEVA-X/CEVA-XC编译器中,默认是所有变量都是4bytes对齐,除了整型是根据类型宽度对齐,char是1byte,short是2bytes,int是4bytes。

例子:

typedef struct
{
char c;
short a[] __attribute__((aligned ()));
}S;
S s __attribute__((aligned ()));

下面是实际对齐的情况
Words offset data
0 c
1 -- padding --
2 -- padding --
3 -- padding --
4 a[0]
5 a[1]
6 a[2]
7 a[3]
8 a[4]
9 a[5]
10 a[6]
11 a[7]
12 a[8]
13 a[9]
14 -- padding -
15 -- padding -

注意,对齐并不支持局部变量!!!

8、Cyclic Attribute
如果指针指定了cyclic(N)属性,那么指针的值,就会在模N个bytes里循环修改。

int arr[] __attribute__((aligned(*sizeof(int)))) = {,,,};
int foo()
{
int* p __attribute__((cyclic( * sizeof(int))));
int i, res = ;
p = &arr[];
for(i = ; i < ; i++)
{
res += (*p);
p++;
}
return res;
}

这里p会指向arr[0],arr[1],arr[2],arr[3],然后又从arr[0]到arr[1],arr[2],arr[3]这样访问。

CevaEclipse - 编译器attribute扩展的更多相关文章

  1. C51编译器的扩展关键字

    附表1-1 ANSIC标准关键字 附表1-2 C51编译器的扩展关键字

  2. WordPress的编译器功能扩展

    //php代码如下://向文章编辑器的Visual区添加自定义按钮,js文件存放在wp-content/plugins/文件夹下 add_action('admin_head', 'my_custom ...

  3. .net framework 2.0使用扩展方法

    .net framework中使用扩展方法,由网摘上看到,是因为编译器将扩展方法带上了ExtensionAttribute特性 要在.net framework 2.0中使用的话,可以自定义一个特性: ...

  4. 当泛型方法推断,扩展方法遇到泛型类型in/out时。。。

    说到泛型方法,这个是.net 2.0的时候引入的一个重要功能,c#2.0也对此作了非常好的支持,可以不需要显试的声明泛型类型,让编译器自动推断,例如: void F<T>(T value) ...

  5. [读书笔记]C#学习笔记五: C#3.0自动属性,匿名属性及扩展方法

    前言 这一章算是看这本书最大的收获了, Lambda表达式让人用着屡试不爽, C#3.0可谓颠覆了我们的代码编写风格. 因为Lambda所需篇幅挺大, 所以先总结C#3.0智能编译器给我们带来的诸多好 ...

  6. C#学习笔记四: C#3.0自动属性&匿名属性及扩展方法

    前言 这一章算是看这本书最大的收获了, Lambda表达式让人用着屡试不爽, C#3.0可谓颠覆了我们的代码编写风格. 因为Lambda所需篇幅挺大, 所以先总结C#3.0智能编译器给我们带来的诸多好 ...

  7. 嵌入式C语言编译器

    GCC与gcc: 初识编译器: 扩展问题: 如何理解“多语言混合开发”? 参考: 狄泰软件学院唐佐林视频教程

  8. 扩展LLVM:添加指令、内部函数、类型等

    扩展LLVM:添加指令.内部函数.类型等 Introduction and Warning Adding a new intrinsic function Adding a new instructi ...

  9. PostSharp AOP

    使用PostSharp 在.NET 平台上实现 AOP   摘要 本文首先介绍AOP(面向方面编程)的相关概念及理论,然后介绍如何使用PostSharp框架在.NET平台上实现AOP,最后对PostS ...

随机推荐

  1. HTML5学习总结——HTML5入门与新增标签

    一.HTML5概要 1.1.为什么需要HTML5 概念: HTML5 是继 HTML4.01, XHTML 1.0 和 DOM 2 HTML 后的又一个重要版本, 旨在消除富 Internet 程序( ...

  2. Alyona and copybooks

    题目连接 题意: 给 n,a,b,c四个数,n为已有的书的数目,问再买k本书所需花费最少是多少,(k+n)%4==0: 有三种套餐 第一种只有一本书,花费a 第二种有两本书,花费b, 第三种有三本书, ...

  3. @classmethod及@staticmethod方法浅析【python】

    目前对于python中@classmethod 类方法和@staticmethod静态方法的有了一定的认识,之后有进一步的认识后继续记录. @classmethod :是和一个class类相关的方法, ...

  4. hadoop操作

    常用命令: https://hadoop.apache.org/docs/r1.0.4/cn/hdfs_shell.html ls命令 /usr/bin/hadoop/software/hadoop/ ...

  5. 一个IT人士的个人经历,给迷失方向的朋友(转)

    作者: 果子狸  来源: WP开发者社区  发布时间: 2013-11-08 10:43  阅读: 50078 次  推荐: 494   原文链接   [收藏] 这些日子我一直在写一个实时操作系统内核 ...

  6. keyboard添加down按钮

    self.textView.inputAccessoryView = [self addToolbar]; - (UIToolbar *)addToolbar { UIToolbar *toolbar ...

  7. 灾情巡视C语言代码

    /*"水灾巡视问题"模拟退火算法.这是一个推销员问题,本题有53个点,所有可能性大约为exp(53),目前没有好方法求出精确解,既然求不出精确解,我们使用模拟退火法求出一个较优解, ...

  8. java导出数据Excel总结

    //创建获取到JFileChooser的文件名的JTextField public JTextField getTextField(Container c){ JTextField textField ...

  9. Restful随笔

    Rest,即Resources Representational State Transfer(资源表现层状态转化). ·资源(Resources),网络上的一个实体,每种资源对应一个特定的URI(统 ...

  10. typeof使用笔记

    typeof操作符返回一个字符串,表示未经计算的操作数的类型 以下是可能值的列表 类型      结果 Undefined   "undefined" Null  "nu ...