0
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心
发布
  • 发文章

  • 发资料

  • 发帖

  • 提问

  • 发视频

创作活动

完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>

3天内不再提示

关于attribute(section)在GCC和ARMGCC中的使用

小飞哥玩嵌入式 来源:小飞哥学嵌入式 2023-04-15 17:09 次阅读

简介

__attribute__ 是gcc编译器支持的一个编译特性(arm编译器也支持此特性,比如我们常用的keil就是用的ARMGCC编译器),也就是通过给函数或者变量声明属性值,以便让编译器能够对要编译的程序进行优化处理。

而对于 section 这个关键字,我们可以通过它将指定的变量定义到指定的输入段中。

section 属性指定变量必须放置在特定数据部分中,通常,ARM 编译器将其生成的对象放在 .data 和 .bss 等部分中。但是,您可能需要其他数据部分,或者您可能希望变量出现在特殊部分中,例如,映射到特殊硬件

如果使用 section 属性,则只读变量将放置在 RO 数据部分中,读写变量将放置在 RW 数据部分中,除非您使用 zero_init 属性。在这种情况下,变量放置在 ZI 部分中。

/*inROsection*/
constintdescriptor[3]__attribute__((section("descr")))={1,2,3};
/*inRWsection*/
longlongrw_initialized[10]__attribute__((section("INITIALIZED_RW")))={5};
/*inRWsection*/
longlongrw[10]__attribute__((section("RW")));
/*inZIsection*/
longlongaltstack[10]__attribute__((section("STACK"),zero_init));

用法详解

先来看一段代码(摘自CSDN,如有侵权,联系删除):

#include

#defineSEC__attribute__((__section__("ss"),aligned(sizeof(void*))))

voidfunc_1(inta,intb)
{
printf("%s%d%d
",__func__,__LINE__,a+b);
}
voidfunc_2(inta,intb)
{
printf("%s%d%d
",__func__,__LINE__,a*b);
}

//编译器会自动提供__start_ss,__stop_ss标志段ss的起止地址
externsize_t__start_ss;
externsize_t__stop_ss;

typedefstruct
{
void(*p)(int,int);
}node_t;

//结构体变量a位于自定义段ss
SECnode_ta={
.p=func_1,
};
SECnode_tb={
.p=func_2,
};
intmain(intargc,char**argv)
{
inta=3,b=4;
node_t*p;
//遍历段ss,执行node_t结构中的p指向的函数
for(p=(node_t*)&__start_ss;p< (node_t *)&__stop_ss; p++)
    {
        p->p(a,b);
a+=1;
b+=2;
}
}

来看一下运行的结果:

poYBAGQ6aiyAGKAiAACaDdW4qbM210.jpg

1、section关键字可以将变量定义到指定的输入段中,

#defineSECTION(level)__attribute__((used,__section__(".fn_cmd."level)))
#defineCMD_START_EXPORT(func,func_s)conststructCMD_LISTcmd_fn_##funcSECTION("0.end")={func,func_s}
CMD_START_EXPORT(start_fun,"start_fun");

conststructCMD_LISTcmd_fn_##funcSECTION("0.end")={func,func_s}

conststructCMD_LISTcmd_fn_funcSECTION("0.end")={start_fun,start_fun}

conststructCMD_LISTcmd_fn_func__attribute__((used,__section__(".fn_cmd.""0.end")))={start_fun,start_fun}

这个时候再来看会发现其实就是定义了一个struct CMD_LIST 类型的变量,变量的名字是cmd_fn_start_fun,并且这个变量被放到了我们所希望的一个输入段.fn_cmd.0.end中了

typedefvoid(*fun)();
structCMD_LIST
{
funfuns;
constINT8*cmd;
};

2、使用section将变量放到我们自定义的输入段中有什么意义呢?

#defineSECTION(level)__attribute__((used,__section__(".fn_cmd."level)))
#defineCMD_START_EXPORT(func,func_s)conststructCMD_LISTcmd_fn_##funcSECTION("0.end")={func,func_s}
#defineCMD_EXPORT(func,func_s)conststructCMD_LISTcmd_fn_##funcSECTION("1")={func,func_s}
#defineCMD_END_EXPORT(func,func_s)conststructCMD_LISTcmd_fn_##funcSECTION("1.end")={func,func_s}

当这几个宏被调用时将会产生名为cmd_fn_xx的变量,并且这个变量根据被调用的宏来把这个变量放到相应的输入段。例如CMD_START_EXPORT这个宏,这个宏其实上面已经讲过了,调用这个宏的时候会产生一个名为cmd_fn_xx的变量,并且把这个变量放到了我们自定义的输入段.fn_cmd.0.end中了。

其他两个宏的其实也是差不多的,不同之处就是输入段有些区别。言归正传,现在继续来讲如何使用section将不同的函数放到我们想要的输入段中,并且获得他们的起始地址和结束地址。

我们可以在每个XXX_Init函数后面都调用宏CMD_EXPORT,在调用这个宏时编译器会将XXX_init这个函数加入到输入段中,由于变量在输入段中的地址是连续的,并且顺序先按 section 名 01234排一遍,section 内再按函数名称排。

所以可以按照输入段中顺序来逐个调用这些初始化函数来完成系统的初始化。具体实现我会根据我的一个自定义命令行的应用来进行部分的说明。

/*命令函数段起始位置*/
intcmd_start(void)
{
return0;
}
CMD_START_EXPORT(cmd_start,"intcmd_start(void)");

/*命令函数段结束位置*/
intcmd_end(void)
{
return0;
}
CMD_END_EXPORT(cmd_end,"intcmd_end(void)");

voidtest(void)
{
printf("helloworld
");
}
CMD_EXPORT(test,"voidtest(void)");

voiddemo(void)
{
printf("helloworld
");
}
CMD_EXPORT(demo,"voiddemo(void)");

先定义start和end函数并且分别使用CMD_START_EXPORT和CMD_END_EXPORT来将其放到输入段.fn_cmd.0.end和.fn_cmd.1.end中,按照上面的说明输入段.fn_cmd.0.end是排在输入段.fn_cmd.1.end前面的,而使用的CMD_EXPORT这个宏对应的输入段.fn_cmd.1是排在.fn_cmd.0.end和.fn_cmd.1.end之间的,这里可以看一下编译产生的.map会更加的形象一些。具体在MAP文件的位置如下所示

cmd_fn_cmd_start0x080042f0Data8serialcmd.o(.fn_cmd.0.end)
cmd_fn_test0x080042f8Data8application.o(.fn_cmd.1)
cmd_fn_demo0x08004300Data8application.o(.fn_cmd.1)
cmd_fn_cmd_end0x08004308Data8serialcmd.o(.fn_cmd.1.end)

typedefvoid(*fun)();
structCMD_LIST
{
funfuns;
constINT8*cmd;
};

conststaticstructCMD_LIST*CmdList;
staticUINT8CmdSize=0;

/*命令函数初始化*/
voidSerialCmdInit(void)
{
conststructCMD_LIST*cmd_ptr;
CmdList=&cmd_fn_cmd_start;
CmdList++;
for(cmd_ptr=CmdList;cmd_ptr< &cmd_fn_cmd_end;cmd_ptr++)
 {
        /*这里如果用于初始化的话可以使用下面这种方式来执行初始化函数,因为我的应用并不是用于初始            
         化,所以就没有进行函数调用。
         (*cmd_ptr->fun)();
*/
CmdSize++;
}
}

其中cmd_fn_cmd_start是在.fn_cmd.0.end这个输入段中的,而各个要执行的函数是在.fn_cmd.1这个输入段中的,cmd_fn_cmd_end作为结束的标志在.fn_cmd.1.end输入段中。

其余的就不做过多讲解了,从上面的.map文件中的地址很容易就可以看出在得到了起始地址和结束地址之后怎样一个个遍历这些函数。

然而上述功能只能对 GCC 平台有效, 如果是 ARMCC 或是其他平台, 因为编译器不同, 方法可能不一样, 为了跨平台, 就不得不添加平台检测的宏, 比如将下面的代码替换获取 myfun_section 所在的内存区间部分即可支持 ARMCC 平台。

#ifdef__ARMCC_VERSION/*ARMCCompiler*/
externtest_command_tmyfun_section$$Base;
externtest_command_tmyfun_section$$Limit;
test_command_t*myfun_section_begin=&(myfun_section$$Base);
test_command_t*myfun_section_end=&(myfun_section$$Limit);
#elifdefined(__GNUC__)
externtest_command_t__start_myfun_section;
externtest_command_t__stop_myfun_section;
test_command_t*myfun_section_begin=&__start_myfun_section;
test_command_t*myfun_section_end=&__stop_myfun_section;
#else
#error"Theplatformisnotsupported"
#endif

结语

以上就是关于attribute(section)在GCC和ARMGCC中的使用。






审核编辑:刘清

  • arm
    arm
    +关注

    关注

    131

    文章

    7364

    浏览量

    357496
  • GNU
    GNU
    +关注

    关注

    0

    文章

    106

    浏览量

    17056
  • CMD命令
    +关注

    关注

    0

    文章

    14

    浏览量

    8076
  • gcc编译器
    +关注

    关注

    0

    文章

    21

    浏览量

    3084
收藏 人收藏

    评论

    相关推荐

    怎么理解RTT#define UNUSED __attribute__((unused))这个语句呢

    ){UNUSED rt_uint32_t iir;而UNUSED的定义,rtdef.h:#ifdef __CC_ARM /* ARM Compiler */#include#define SECTION
    发表于 03-29 09:27

    CH32V307 Bootloader编译时提示FLASH长度不够如何处理?

    = 20KRAM (xrw) : ORIGIN = 0x20000000, LENGTH = 64K}3.程序中有两个长的USB用的 RAM DMA 缓冲区 每个16K长度LD 文件,无特别指出这个
    发表于 05-25 07:03

    MounRiver keil的定位语句无法使用是为什么?

    由于从F转到V,keil变为MounRiver,用gcc编译器。原先keil的定位语句无法使用了。1、keil地址0x08005400位置定位一个变量用于存放程序版本号:#define
    发表于 06-15 07:47

    请问GCC支持attribute at属性吗?

    MAP您好,GCC目前不支持attribute at属性,需要通过section属性LD来实现类似功能,编译显示RAM也超出了,您使用的是哪款芯片,以及具体的用法及程序可以到邮箱:yangy@wch.cn 。详细沟通下。你好,已发送至你的邮箱,请赐教
    发表于 07-18 08:59

    请问CH573的中断函数如何定义?

    __attribute__((interrupt("WCH-Interrupt-fast")))__attribute__((section("
    发表于 09-05 06:38

    SPI + DMA为什么不适用于放置RETRAM

    RetRAM 部分。bss1与__attribute__ ((节 ( ".bss1" )))命令。这行得通,但是,这是我的下一个小问题,这个变量没有出现在 gcc *.map 文件。也有些好奇。第一个问题是最重要的。
    发表于 12-06 07:08

    请问AzureRTOS ThreadX/NetXDuo通用字节池上缓存怎么样

    [ETH_RX_DESC_CNT] __attribute__((section(".RxDecripSection"))); /* Ethernet Rx DMA Descriptors
    发表于 12-19 06:29

    如何将STM32CubeIDE代码添加到.s文件

    我从STM32CubeIDE用户手册的2.5.7.2节了解到,可以通过修改.ld文件.s文件并使用__attribute__((section(&quot;.RAM_Code&
    发表于 12-22 07:30

    如何调用从闪存到RAM的SPC5代码?

    操作闪存,所以我需要从 RAM 调用一些代码。我 application.ld 添加了必要的部分,并为我的方法添加了必要的属性:__attribute__ ((section ("
    发表于 01-09 08:22

    如何将中断放入RAM或预缓存?

    我正在使用 GCC eclipse CDT。我需要非常快地执行一个外部中断(每 4µs)。那里没什么可做的,但我中断处理程序中使用了大约 2.5µs 的时间。我尝试将处理程序放入 ram,这
    发表于 01-09 08:09

    STM32CubeIDE如何在联合中使用部分属性?

    uint16_t buffer16[32768] __attribute__ ((section(".myD3memory")));希望这将是来自更多(GCC?)精通编译器的人的简单建议,我们将不胜感激任何推动这一进展的帮助。
    发表于 01-10 06:46

    请问如何将编译日期存储最终的二进制文件以便外部程序读取它?

    字符串日期,第二行告诉 IAR 编译器,尽管代码未引用该变量,但它必须将其包含在最终二进制文件。要将它迁移到 STM32CubeIDE(使用 gcc 编译器),我需要使用 __attribute
    发表于 01-31 06:23

    关链接脚本(ld)的使用中段(section),编译之后user_section_tab段里的内容是空的怎么处理?

    USER_SECTION_NAME__attribute__((section("user_section_name_tab")))#define
    发表于 02-10 06:33

    __attribute__((weak)) __weak_symbolidf4.4库无效,要怎么操作才能起作用呢?

    请教下,在编译时,遇到几个问题:1.同一个工程不同的C文件写相同的函数,编译时不报错,函数生效随机;2.使用__attribute__((weak)) __weak_symbol无效。请教下,__attribute__((weak)) __weak_symbol怎么才能起作用。
    发表于 02-14 06:43

    用vscode开发关于gccgdb的配置路径应该用哪一个?

    与.espressif/dist/xtensa-esp32s2-elf/esp-2020r3-8.4.0/xtensa-esp32s2-elf/bin请问这两个路径下的文件有何区别?我用vscode开发,请问关于gccgdb的配置路径应该用上面哪一个?谢谢
    发表于 02-21 08:44

    怎么处理链接脚本(ld)的使用中段(section)被优化的问题呢?

    USER_SECTION_NAME__attribute__((section("user_section_name_tab")))#define USER_SECTION__attribute__((section
    发表于 03-03 09:20

    关于链接脚本(ld)的使用中段(section)被优化的问题求解

    USER_SECTION_NAME__attribute__((section("user_section_name_tab")))#define USER_SECTION__attribute__((section
    发表于 03-08 07:56

    入门——C语言:关于gcc#C语言

    C语言GCC
    jf_49750429
    发布于 :2022年11月16日 15:31:42

    如何使用AT_NONCACHEABLE_SECTION()将DMA缓冲区重新定位到不可缓存的RAM?

    :AT_NONCACHEABLE_SECTION_ALIGN(uint8_t s_nor_program_buffer[256], 4); // 我更改了全局缓冲区,以便在地图文件可见但是,查看映射文件,缓冲区
    发表于 03-20 08:01

    GCC连接脚本学习笔记(转载)

    连接脚本将我整整蒙了1天零一个上午,做了很多实验,看了人家不少例子代码勉强能驾驭了,让linker按照我想要的来处理,做个笔记。1,什么叫输入段,什么叫输出段不知道怎么回事,我对GCC系列的输入
    发表于 09-15 16:18

    pads提示警告:Section *DEL_ATTRIBUTE*

    第一次从pads logic向pads layout中导入原理图的时候没有提示警告,但是我第一次的基础上再重复一次的时候就会提示很多的警告类似于:Line 6 , Section
    发表于 08-27 13:53

    keil *.sct(7): error: L6236E: No section matches selector - no section

    keil *.sct(7): error: L6236E: No section matches selector - no section to be;没有添加*.s文件。对头文件的跨文件包含,C/C++include path添加路径。
    发表于 07-19 18:14

    如何在ubuntu安装gcc

    如何在ubuntu安装gcc
    发表于 04-19 09:02

    4个文件夹arm gcc_ride7 iar TrueSTUDIO 到底选择哪个文件夹呢

    ——自问自答选择启动文件的时候有选择性区别!STM32 为什么需要选择启动文件?4个文件夹arm gcc_ride7 iar TrueSTUDIO 到底选择哪个文件夹呢怎么选择101xx 102xx 103xx是小容量、容量还是大容量?
    发表于 01-16 11:39

    【小例子】CW 10.5的KL25Z把代码放到指定位置

    源代码中用__attribute__把函数放到指定的section romsymbols2).ld文件为romsymbols分配地址空间,并把函数funcInROM代码放到这个空间
    发表于 02-10 15:09

    KEIL环境下如何让代码 RAM运行

    __((section(“name ”)))KEIL可以通过__attribute__((at(address)))的方式将变量放到指定的位置。通过__attribute__((section(“name
    发表于 08-04 14:14

    __ATTRIBUTE__ 你知多少?

    , transparent_union, unused, deprecated may_alias 。使用__attribute__ 参数时,你也可以参数的前后都加上“__” (两个下划线),例如
    发表于 09-05 11:12

    海湾GCC认证如何办理?GCC认证需要多少钱?

    及阿拉伯海相邻,东靠阿拉伯湾,西濒红海。境内绝大部分是沙漠,属热带沙漠气候。 对外贸易GCC六国的国民经济占有十分重要的地位,由于其单一的经济结构,除了石油石化产品外,其它生活生产所需大都依赖进口
    发表于 02-28 13:45

    MM32KEIL环境实现部分代码RAM运行

    需要放到RAM的函数前,用__attribute__((section("RAMCODE")))声明该函数放在RAMCODE section。 编译时,编译器会自动将这些函数
    发表于 03-01 16:44

    GCC认证要求的产品范围GCC收费标准

    `一、认证简介GCC是海湾阿拉伯国家合作委员会(GulfCooperation Council)的英文缩写。海湾合作委员会于1981年5月25日阿联酋阿布扎比成立。目前其成员国为沙特阿拉伯,科威特
    发表于 03-06 09:28

    gcc编译器编译过程介绍

    明如何使用gcc编译器。a;文本编辑器编辑 hello.c,输入下面内容,并保存为hello.c#includeint main(int argc,char **argv){ printf("
    发表于 07-09 07:49

    请教关于#pragma DATA_SECTION的问题

    各位好,请教各位一个问题。我在编写代码时使用#progma DATA_SECTION将一个数组(比如buffer1)指定存放在DDR2(与之前的代码相比,只添加了这个数组),但是在编译以后,我
    发表于 07-25 08:08

    请问CMD文件section部分添加段是PAGE 0还是PAGE 1定义段mysect?

    1、将main的数组变量放到RAML0段去:#pragma DATA_SECTION(array,"mysect")_iq array[16][16];然后CMD文件
    发表于 08-22 09:13

    请问CCS5.2IQmath.lib不兼容要怎么设置?

    今天尝试着CCS5.2下面建了个工程,关于IQmath的,其实就是把CCS3.3工程下面的文件拷贝到CCS5.2的工程下面,然后进行编译,然后就出现了下列问题:warning #16002-D
    发表于 08-22 11:19

    沙特GCC认证,插座GCC认证,电烤箱GCC认证

    后,7个海湾国家(包括阿联酋、巴林、沙特阿拉伯、阿曼、卡塔尔、科威特、也门)本地制造或者进口到该国市场的部分低压电器设备必须满足该技术法规列出的安规电磁兼容EMC 要求。二、GCC认证认证模式非
    发表于 09-04 11:29

    沙特G-markGCC有什么区别?GCC认证大概多少钱

    ,7个海湾国家(包括阿联酋、巴林、沙特阿拉伯、阿曼、卡塔尔、科威特、也门)本地制造或者进口到该国市场的部分低压电器设备必须满足该技术法规列出的安规电磁兼容EMC 要求。二、GCC认证认证模式非
    发表于 09-05 11:12

    #pragma DATA_SECTION的解释

    的意思是:定义一个数据段:段名为: "section name"段的内容:symbol里CCS编程,如果我们不指定变量的存放位置,编译器会自动的给变量分配一个位置,但是如果有
    发表于 09-25 10:45

    海湾七国GCC认证,沙特GCC产品范围,申请GCC认证需要提供什么资料

    、IEC 、ISO、CISPR根据法规的要求,额定电压下使用的气设备必须满足基本安全电磁兼容要求; 二、GCC认证申请流程如下:1)制造商提供产品资料、样品 G-mark认证申请书;2)认证机构进行
    发表于 09-29 16:09

    PDLv2.0.1是否有I2S示例?

    /DIR)来运行示例,但是尝试将PDVL2.0.2I2S示例与PDLV2.0.1示例结合起来,ARMGCC的东西会产生很多错误(OB)。尤利)所以,我的问题是:PDLV2.0.1是否有I2S示例?最好
    发表于 11-06 14:19

    PSOC5LP编译错误与SRAM的功能代码

    你好,我仍在研究一个问题。中断处理的PSOC5LP抖动通过SRAM执行一个函数来解决这个问题。HTTPS://Cultuy.CyPress?COM/Exel-Link?JSPA?URL
    发表于 11-06 14:19

    如何在SPC5Studio从RAM运行代码

    :__attribute __((section('.ram_code')))函数声明之前,其中ram_code是链接描述文件定义的。请你举个例子吗?谢谢。问候亚历山德罗 #spc5studio #ram
    发表于 11-09 09:53

    LDF文件有关input section的详细资料?

    LDF文件里有很多input section,这些section我不是很懂,找了不少资料也没找到一个好的。在编写代码时常常遇到需要调整LDF文件,但却无从下手。请问哪里有关于这个section的详细资料?涉及编译原理吗?
    发表于 12-04 09:44

    关于DSP28_28062P(80PIN)DSP28_28062PZ(100PIN)配置的问题?

    TI的支持库中找到关于80Pin100Pin的初始化配置文件,定义的宏选择如#define DSP28_EPWM70例程只找到相关的GPIO初始化用此宏做编译选择,那其对应的时钟
    发表于 12-13 11:05

    XC32链接器错误,用于尝试绝对地址上分配持久数据

    IDE版本:MPLA4.0编译器XC32 GCC版本V1.44背景信息/上下文:我的Bootloader应用程序一个绝对RAM地址中使用一个持久的数据标志,“BootSuMeDEYStand
    发表于 12-28 15:45

    怎么Flash区域中模拟EEPROM布局

    的链接脚本文件(工作区的探险家Source Tab生成的源cm0gcc。LD)文件添加以下行后,LD ROM部分(有一个建议,后段{………} >;ROM)。eepromdata
    发表于 01-15 06:40

    XC32 1.43上编译器错误

    );1,我们如何解决这个问题来保持固件从以前版本的可压缩性?2 -有人知道为什么微芯片升级会造成新的错误吗?AdvestDeavy.P.D.D.D.D.,我们需要保持这个变量属性持久性,因为这个
    发表于 04-03 06:50

    请问Ubuntu怎么安装arm-linux-gcc

    请问Ubuntu怎么安装arm-linux-gcc?我将光盘上的压缩文件解压到Ubuntu上面,但是不知道怎么安装?求指导!压缩的文件的后缀名为".bz2"
    发表于 04-28 08:16

    如何把Flash更新实用程序变成RAM

    下载期间的变化!虽然可以进入并手动添加(A1)((RAMCODE)部分)空隙RAMFUNC(无效);cyflash每个功能。C,似乎必须在客户的链接文件,将所有cm3gcc_custom.ld例程
    发表于 07-19 14:28

    基于Keil的汇编转换为基于armgcc的汇编

    Keil的启动代码,有这样一段:AREA |.ARM.__at_0x400|, Code, READONLYDCD 0xFFFFFFFF,0xFFFFFFFF,0xFFFFFFFF
    发表于 03-16 17:12

    C6748_StarterWare编译报错“invalid attribute for "struct <unnamed>"”的解决办法?

    下载的TI例程编译没能通过,报错信息是“invalid attribute for "struct "”我论坛上看好像是说GCC变量长度问题,我不懂什么意思,解决方法好像是设置工程属性,但是没有详细说明,不知道怎么设置。希望TI专家帮忙解决一下,谢谢啦!
    发表于 07-27 15:11

    gccLinux gcc 的常用选项

    :objet file (OBJ文件)小结:1)输入文件的后缀名选项共同决定gcc到底执行哪些操作2)在编译过程,除非是使用了-E,-S,-c选项(或者编译过程中出错阻止了编译过程否则最后的步骤都是链接
    发表于 10-19 22:43

    灵动微课堂 (第168讲) | MM32F013x——IEC60730-1 B类认证软件设计指南(三)

    __((section("STACK_BOTTOM"), zero_init));MDK的Options for Target选项卡中进行如下配置:ClassBtest.sct文件
    发表于 05-28 13:38

    关于AVR的GCC中断向量看完你就懂了

    关于AVR的GCC中断向量看完你就懂了
    发表于 10-29 07:28

    如何删除编译过程未使用的section

    如何删除编译过程未使用的section
    发表于 11-05 07:04

    ThreadX GUIX的GCC方式移植设计框架

    怎样将ThreadX GUIX移植到STM32H7(GCC)上去?移植过程要注意哪些事项?
    发表于 11-08 06:09

    section的使用方法

    无论是GNU还是ARM的编译器,都支持__attribute__所指定的编译属性,这里着重讲解一下KEIL环境下__attribute__section的使用方法。section关键字可以将
    发表于 11-25 08:10

    attribute用法section部分的资料大合集

    转载:http://blog.sina.com.cn/s/blog_5e11a56a0100c8h5.html###1. gcc的__attribute__编译属性要了解Linux Kernel代码
    发表于 11-25 08:25

    vimgcc有何区别

    给大家介绍下vimgcc,这两个搞不懂,代码都写不了。vim以前的版本叫做vi,两者配置上略微有区别,操作系统默认都会安装vi,不一定安装vim,所有如果环境里面没有的可以现安装一下。一...
    发表于 12-15 07:15

    eclipse + armgcc + jlink 进行嵌入式MCU开发环境搭建

    eclipse + armgcc + jlink 进行嵌入式MCU开发环境搭建(windows版本)由于不想用keiliar等集成环境进行开发,个人比较喜欢eclipse的操作和更高的颜值。这里
    发表于 12-16 07:30

    linux编译升级gcc无法定位软件包libmpfr4请问怎么解决

    A40i板子第四章linux编译篇4.3安装 依赖包升级gcc安装依赖是出现无法定位软件包libmpfr4,请问怎么解决?请问您解决了吗?我用了链接里的方法还是无法定位。想问一下,gcc的版本必须要是4.8吗请问开发环境在哪边下载?
    发表于 01-04 07:06

    怎么把代码编译到自己想要的位置

    最近在研究怎么把代码编译到自己想要的位置,然后只运行一次就自宫,分享一下。方法一:void fun(void) __attribute((section("
    发表于 02-21 07:07

    来了解一下GNU C __attribute__机制

    ,比如GNU C的__attribute__,ubootLinux源码中会常用到此命令。__attribute__实际上是GCC的一种编译器命令,用来指示编译器执行实现某些高级操作
    发表于 03-03 15:49

    Section I FPGA Configuration D

    This section provides information on Altera® configuration devices. Thefollowing chapters
    发表于 03-28 14:46 20次下载

    GCCSTUDIO的使用方法(WINAVR及AVR_STUDIO)

    GCCSTUDIO的使用方法(WINAVR及AVR_STUDIO),感兴趣的可以看看。
    发表于 07-25 18:26 36次下载

    教你如何使用AVR-gcc

    教你如何使用AVR-gcc
    发表于 09-21 11:33 12次下载
    教你如何使用AVR-<b>gcc</b>

    浅谈gcc编译器

    3.3 gcc编译器 GNU CC(简称为gcc)是GNU项目中符合ANSI C标准的编译系统,能够编译用C、C++Object C等语言编写的程序。gcc不仅功能强大,而且可以编译如C、C++
    发表于 10-18 13:48 0次下载

    关于GCC的分析,想进一步了解GCC的朋友可以看看

    关于GCC的分析,想进一步了解GCC的朋友可以看看
    发表于 10-25 08:40 5次下载
    <b>关于</b><b>GCC</b>的分析,想进一步了解<b>GCC</b>的朋友可以看看

    LinuxUNIX的GCC命令大全

    GCC 有超过 100 个的编译选项可用。 这些选项的许多你可能永远都不会用到, 但一些主要的选项将会频繁用到。 很多的 GCC 选项包括一个以上的字符。 因此你必须为每个选项指定各自的连字符
    发表于 11-01 08:00 0次下载
    Linux<b>和</b>UNIX的<b>GCC</b>命令大全

    使用gccgdb来开发stm32单片机

    使用gccgdb来开发stm32单片机
    发表于 11-13 13:51 10次下载
    使用<b>gcc</b><b>和</b>gdb来开发stm32单片机

    __attribute__((section(x))) 使用详解

    无论是GNU还是ARM的编译器,都支持__attribute__所指定的编译属性,这里着重讲解一下KEIL环境下__attribute__section的使用方法。section关键字可以将
    发表于 11-16 18:06 5次下载
    __<b>attribute</b>__((<b>section</b>(x))) 使用详解

    attribute 用法 section 部分

    attribute 用法 section 部分
    发表于 11-16 18:21 86次下载
    <b>attribute</b> 用法 <b>section</b> 部分

    C语言中的__attribute__宏定义之section属性

    __attribute__所指定的编译属性,这里着重讲解一下KEIL 环境下__attribute__section的使用方法。一、起因我们先来看一个宏#define INIT_EXPORT(fn, level) \ RT_USED const init_fn
    发表于 11-16 18:21 46次下载
    C语言中的__<b>attribute</b>__宏定义之<b>section</b>属性

    __attribute__((section(“section_name“)))使用方法

    __attribute__((section("section_name")))使用方法内容待补充!!!!
    发表于 11-16 19:06 8次下载
    __<b>attribute</b>__((<b>section</b>(“<b>section</b>_name“)))使用方法

    瑞萨 报错 Section “.monitor2“ overlaps section “.textf“

    最近再加FDL时,发现报如下错误。E0562321:Section ".monitor2" overlaps section ".textf"查看map文件发现.textf段的范围
    发表于 12-20 19:02 11次下载
    瑞萨 报错 <b>Section</b> “.monitor2“ overlaps <b>section</b> “.textf“

    STM32 GCC编译环境搭建

    ://launchpad.net/~team-gcc-arm-embedded/+archive/ubuntu/ppa(1)、/usr/local目录下新建 complier 文件夹(存放编译工具链)#cd /user/local#mkdir complier#chmod -R 777 complie.
    发表于 12-22 18:44 8次下载
    STM32 <b>GCC</b>编译环境搭建

    stm32 全局变量(变量函数)绝对地址编译

    最近在研究怎么把代码编译到自己想要的位置,然后只运行一次就自宫,分享一下。方法一:void fun(void) __attribute((section(".ARM.__at_0x8100000
    发表于 12-27 18:39 6次下载
    stm32 全局变量(变量<b>和</b>函数)绝对地址编译

    【STM32CubeIDE】将变量定义到指定地址

    )));使用STM32CubeIDE由于编译器不同,STM32CubeIDE是不支持 __attribute__((at()))这一属性的,所以需要另辟蹊径。在网上查找到的资料说可以使用__attribute__((section()))属性//将array放到地址空间0x20010000
    发表于 12-27 19:08 20次下载
    【STM32CubeIDE】将变量定义到指定地址

    怎么样Atmel Studio 6GCC创建一个新的C项目?

    Create a New C Project for GCC in Atmel Studio 6
    的头像 发表于 07-06 04:13 3838次阅读

    你了解linux驱动的入口?

    gcc 3.4之前的编译器被展开成__attribute__((unused))来禁止编译器弹出有关函数没有被用到的的警告信息
    发表于 05-08 14:03 660次阅读

    关于 printfscanf开发STM32的配置应用

    关于printfscanf开发STM32的配置应用
    的头像 发表于 03-24 10:50 6391次阅读
    <b>关于</b> printf<b>和</b>scanf<b>在</b>开发STM32<b>中</b>的配置<b>和</b>应用

    源代码形式提供的GCC软件包的安装过程

    我的系统上,上述命令显示:/usr/bin/gcc。因此,原来的gcc命令/usr/bin目录下。我们可以把GCC 3.4.0gcc、g++、gcj等命令/usr/bin目录下分别做一个符号连接:
    发表于 08-20 11:45 916次阅读

    Linux系统下Gcc的基本用法选项

    使用Gcc编译器的时候,我们必须给出一系列必要的调用参数和文件名称。Gcc编译器的调用参数大约有100多个,其中多数参数我们可能根本就用不到,这里只介绍其中最基本、最常用的参数
    发表于 08-20 09:57 852次阅读

    gcc的使用方法以及Linux gcc 的常用选项

    gcc的使用方法 gcc 【选项】文件名 gcc常用选项 gcc -v: 查看gcc编译器的版本,显示gcc执行时的详细过程 -ofile please the output into file
    的头像 发表于 10-22 14:42 2234次阅读

    vscode上用gcc征服debug过程遇到的各种疑难杂症

    编译器老掉牙了。 为啥不用gcc呢? gcc不是Linux里面的吗,能用在Windows?还能debug吗? 什么?你不知道Windows也可以用gcc? 好吧,我今天手把手教你用gcc,并且教你
    的头像 发表于 11-18 16:18 4304次阅读

    利用GCC插件实现代码分析安全审计

    GCC 4.5.0开始引入的一项插件功能,允许用户通过插件来干预GCC的编译过程,获取到GCC编译过程的各种数据,甚至可以修改编译过程中生成的中间数据,从而达到修改最终生成的二进制文件行为的目的
    的头像 发表于 10-13 14:00 273次阅读
    利用<b>GCC</b>插件实现代码分析<b>和</b>安全审计

    C语言中__attribute__ 关键字的用法

    嵌入式开发,离不开 C 语言,C语言中有很多语法会直接或间接影响你代码的质量,下面就来讲讲__attribute__ 关键字的用法。 1. 什么是 __attribute__ GNU C 编译器
    发表于 10-19 09:06 3037次阅读

    深入了解GCC Rust前端

    Philip Herron Arthur Cohen 2022 Kangrejos 会议上介绍了 Rust 语言 GCC 前端的更新。
    的头像 发表于 10-24 11:05 306次阅读

    gcc的编译选项总结

    本文用于记录我在学习工作遇到的各种GCC选项,虽然这些选项可以GNU的手册上查到,不过这里做个总结,可以避免每次都去查手册,算是一个备忘吧。本文的内容会不断更新扩充。
    的头像 发表于 11-02 09:37 267次阅读

    GCC将加入对Rust的支持

    GCC Rust 的代码仍然需要更仔细的审查。按照计划,它有可能作为 GCC 13 的一部分而亮相,GCC 13 将于 2023 年 4 月左右发布稳定版,其对 Rust 语言的支持有希望达到 beta 级别。
    的头像 发表于 12-13 10:04 429次阅读

    CS+ for CC自定义Section方法

    RL78的用户可以ROMRAM区域定义自己的Section,方法如下: 1 任意定义自己Section,地址根据芯片的地址空间分配 2 Build project后,观察MAP文件
    的头像 发表于 02-03 01:55 596次阅读

    小编科普一下Linux内核中常用的C语言技巧

    Linux内核采用的是GCC编译器,GCC编译器除了支持ANSI C,还支持GNU C。Linux内核,许多地方都使用了GNU C语言的扩展特性,如typeof、__attribute__、__aligned、__builtin_等,这些都是GNU C语言的特性。
    的头像 发表于 02-08 11:51 164次阅读

    为MindSDK搭建armgcc编译环境(Windows版)

    ,也是微控制器开发者常用的编译工具解决方案。命令行方式使用的工具,Linux操作系统较为常用,但在Windows操作系统,可以基于 MSYS2 作为模拟命令行工作环境的虚拟终端,配合 armgcc 工具集,搭建微控制器开发环境。
    的头像 发表于 04-13 14:48 104次阅读

    下载硬声App