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. metrics实践 (metrics-spring)

    这里主要介绍metrics与spring集成的使用方式. 1  添加maven依赖 <dependency> <groupId>com.ryantenney.metrics&l ...

  2. 观察者模式 C++11

    #include <functional> #include <vector> #include <algorithm> #include <iostream ...

  3. ASP.NET Calendar(日历控件)

    定义和用法 Calendar 控件用于在浏览器中显示日历. 该控件可显示某个月的日历,允许用户选择日期,也可以跳到前一个或下一个月. 属性 属性 描述 .NET Caption 日历的标题. 2.0 ...

  4. mycat 概述

    从开始接触mycat,到现在为止也有三个多月的时间了,目前在测试环境中已经初步应用!大概可以总结一下了 mycat是一个数据库中间件,也可以理解为是数据库代理.在架构体系中是位于数据库和应用层之间的一 ...

  5. sql中判断是否存在某个对象

    If object_id(N'对象名',N'对象类型') is not null   例如:表是否存在 if object_id(N'tablename',N'U') is not null begi ...

  6. IP地址接口小结

    1 百度http://api.map.baidu.com/location/ip?ak=F454f8a5efe5e577997931cc01de3974&ip=58.67.143.169 {& ...

  7. php中的curl常用例子

    1.基本请求 <?php $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, "http://www.baidu.com"); ...

  8. 浅谈position: absolute和position:relative

    一.在此先说一下文档流的概念: 1,文档流定义: 百度百科定义:文档流是文档中可显示对象在排列时所占用的位置. 大多网友的理解:元素的位置由元素在 (X)HTML 中的位置决定.将窗体自上而下分成一行 ...

  9. ensp实战之防火墙安全转发策略

    本次实验用防火墙是USG6000V,拓扑图如下: 步骤一: 按上面配好PC1.2.3以及WWW服务器的IP地址.子网掩码以及网关: 步骤二: 进入防火墙的CLI命令模式下,按一下命令配置: 配置各个接 ...

  10. 求指定范围里的不重复的N个随机数

    原本是朋友问了一个题目,怎样把1到25个整形数随机排列,想了想,换个意思就是说如何把25个数随机不重复显示出来,即求1—25中25个随机数的一个数组.最简单的方法即利用双循环,是在每次得到一个随机数后 ...