首页 > 其他分享 >由uint8_t USART_RX_BUF[USART_REC_LEN] __attribute__((at(0X20001000)));属性操作引出的问题

由uint8_t USART_RX_BUF[USART_REC_LEN] __attribute__((at(0X20001000)));属性操作引出的问题

时间:2024-10-23 21:47:48浏览次数:3  
标签:__ function 函数 USART int attribute my

在 GCC 编译器中,除了 __attribute__((at(x))),还有许多其他属性可用于控制变量和函数的行为。以下是一些常见的属性及其用途:

1. section

将变量或函数放置在特定的段中。例如,将变量放在 .data 段中:

int my_var __attribute__((section(".my_section")));

2. aligned

指定变量的对齐方式。例如,将变量强制对齐到 16 字节:

int my_var __attribute__((aligned(16)));

3. packed

指示编译器紧凑地排列结构体或联合体的成员,通常用于节省内存:

struct __attribute__((packed)) MyStruct {
    char a;
    int b;
};

4. deprecated

标记函数或变量为过时,使用时会产生警告:

void old_function() __attribute__((deprecated));

5. noreturn

指示函数不会返回,通常用于终止程序的函数,如 exit()abort()

void fatal_error() __attribute__((noreturn));

6. unused

告知编译器该变量或函数可能不会被使用,避免产生未使用的警告:

int my_var __attribute__((unused));

7. weak

定义一个弱符号,允许其他文件定义同名的强符号,优先级更高:

void my_function() __attribute__((weak));

8. const

表明函数的返回值是常量且不依赖于任何全局状态,每次调用返回相同的结果:

int my_constant_function() __attribute__((const));

9. pure

指示函数是纯函数,可能有副作用但不依赖于全局状态:

int my_pure_function() __attribute__((pure));

10. format

用于指定格式化函数,检查其参数是否正确。例如,类似于 printf 函数的参数:

int my_printf(const char *fmt, ...) __attribute__((format(printf, 1, 2)));

使用示例

以下是一个包含多个属性的示例:

#include <stdio.h>  // 引入标准输入输出库

// 声明一个过时的函数,使用 deprecated 属性
void my_function() __attribute__((deprecated));

// 声明一个变量,使用 aligned 属性指定对齐为 8 字节,并标记为 unused 以避免未使用警告
int my_var __attribute__((aligned(8), unused));

// 定义过时的函数
void my_function() {
    printf("This function is deprecated.\n");  // 打印消息,表示该函数已过时
}

int main() {
    my_function();  // 调用过时的函数
    return 0;  // 返回 0,表示程序正常结束
}

见下图,使用定义为过时的函数会有警告,但是如果定义为void my_function();则不会出现警告。

在这里插入图片描述

标签:__,function,函数,USART,int,attribute,my
From: https://blog.csdn.net/ZLongTeng/article/details/143194654

相关文章

  • EnumMap
    EnumMap是一种基于枚举类型的Map实现,它具有非常高的性能和可读性。EnumMap的定义如下所示:public class EnumMap<K extends Enum<K>,V> extends AbstractMap<K,V>implements java.io.Serializable, CloneableEnumMap的主要特点如下:EnumMap是一种基于枚举类型的Map实......
  • ⑤分支与循环
    提前说一下哦,C语言是结构化的程序设计语言,结构是说顺序结构、选择结构、循环结构if语句if语法形式为下if(表达式)语句当表达式为真时,语句执行,反之为假时语句不执行。那何谓真何为假呢?c语言中,0为假,非0为真。简单来讲,表达式的结果为0时,语句不执行,反之执行。......
  • 头脑特工队教案
    《头脑特工队》教案设计——情绪识别与管理教师背景:作为一名拥有20年教学经验的小学老师,我深知孩子们在成长过程中对情绪管理的需求。通过多年的教学实践,我发现《头脑特工队》这部电影能够生动地展示情绪世界,帮助孩子们更好地理解和管理自己的情绪。教学目标:引导学生识别并理......
  • 渗透测试-信息收集
    声明学习视频来自B站UP主泷羽sec,如涉及侵权马上删除文章。笔记的只是方便各位师傅学习知识,以下网站只涉及学习内容,其他的都与本人无关,切莫逾越法律红线,否则后果自负。目录X一、Whois信息1.思路2.工具3.社工库二、搜索1.Google、bing、baidu三、Github四、搜索引......
  • 数据库作业3
    准备工作:(1).分别查询student表和score表的所有记录(2).查询student表的第2条到5条记录(3).从student表中查询计算机系和英语系的学生的信息、(4).从student表中查询年龄小于22岁的学生信息(5).从student表中查询每个院系有多少人(6).从score表中查询每个科目的......
  • 红队知识入门学习——安全见闻(五)
    声明学习视频来自B站UP主“泷羽sec”,若涉及侵权泷羽sec权益将马上删除该文章笔记。该学习笔记只是方便各位师傅学习讨论,以下内容只涉及学习内容,其他与本人无关,切莫越过法律红线,否则后果自负。“如果没有天赋,那就一直重复。”接下来继续更新今日份学习笔记。硬件设备的网络......
  • 【数据结构】-数组
    数组特点:数组的地址连续,可以通过下标获取数据。1.数组扩容步骤:$1.创建一个比原来数组更长的新数组$2.让原来数组当中的数据依次复制到新数组当中$3.让arr指向新数组,原数组空间释放  2.数组插入2.1最后位置插入$1.判断数组当中有没有位置,用size记录当......
  • 【2024/10/22】ChatGPT国内中文版镜像网站整理合集
    一、GPT中文镜像站 yixiaai.com 支持GPT4、4o以及o1,支持MJ绘画1.什么是镜像站镜像站(MirrorSite)是指通过复制原始网站内容和结构,创建的备用网站。其主要目的是在原始网站无法访问时,提供相同或类似的服务和信息。2. ChatGPT镜像站的用途绕过访问限制 :在某些地区,访问O......
  • 红队知识入门学习——安全见闻(四)
    声明学习视频来自B站UP主“泷羽sec”,若涉及侵权泷羽sec权益将马上删除该文章笔记。该学习笔记只是方便各位师傅学习讨论,以下内容只涉及学习内容,其他与本人无关,切莫越过法律红线,否则后果自负。“根深才能叶茂,本固方可枝荣”,接下来继续更新今日份学习笔记。潜在的安全问题......
  • ctfshow-pwn-前置基础
    pwn13按照题目提示的信息,用gcc命令生成可执行文件,再运行即可得到flagpwn14题目提示:阅读以下源码,给定key为”CTFshow”,编译运行即可获得flag,那么我们直接看源代码开始有一个文件是否存在的检查,如果当前目录下不存在名为"key"的文件就会报错接下去就是通过循环将fp的值(也就......