![](https://img-blog.csdnimg.cn/20190918140129601.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
C语言
文章平均质量分 58
C语言进阶 探索与研究
轩哥谈芯
(全网同名) 软硬件设计,团队管理,供应链管理经验,专注产品设计→量产交付
展开
-
C语言中连字符“#”的使用,输出固件的编译时间和版本号
这里我们也可以 g_version这个变量重定向到一个固定地址,以便于使用上位机可以直接从 bin 文件或者hex 文件中检验版本号和编译时间。然后我们在全局变量中定义一个存储信息的字符串,这个使用 const 修饰可以存在flash中,也可以通过。另外,我们也可以通过通信协议,让上位机从运行的状态中获取固件的编译版本和编译时间。这样的形式来把常量存储到 Flash 的固定位置。首先我们使用C语言宏定义和“#”来组合字符串。原创 2024-03-28 12:40:13 · 199 阅读 · 0 评论 -
活用C语言之宏定义应用大全
C语言的编程过程中经常会用到宏定义,然而如果你只是使用宏定义做一些常量的定义,那么你不是OUT了就是C语言小白。那么我们在编程过程中,宏定义都有哪些作用呢?常量定义可以作为功能代码的开关防止头文件被重复包含定义一些通用类型,防止因为平台和编译器不同导致的类型差异,方便移植其他高级浮夸用法。。。。。。原创 2024-03-23 13:02:08 · 322 阅读 · 0 评论 -
从宏和函数引出内联函数
从上一篇文章中,我们讨论了一下关于宏定义的写法,逐步深入讨论了了不同级别的程序员编写宏定义的手法。MAX宏定义的基础和深度扩展 https://blog.csdn.net/yixuanyuxiao/article/details/136953694今天我们来看一下利用宏定义编写类似函数调用的方法和真实的函数有什么区别,来进一步理解宏定义的应用。首先来看一个例子:这里,我们得理解宏的工作方式,它是在编译器编译代码之前做的一个纯文本的替换工作。因此,有时候简单宏替换的结果就会和我们预想的结果出现偏差,比如原创 2024-03-23 12:56:50 · 796 阅读 · 0 评论 -
宏定义的基础和深度扩展
合格:x : y//测试一下??MAX(1!= 1, 1!= 2);中等(x) : (y)//测试一下??良好(x) : (y))//测试一下??优秀int _x = x;int _y = y;_x > _y?_x : _y;})//测试一下??资深_x > _y?_x : _y;})//测试一下??其中在简化可以做到 typeof(x) x = _x;这是linux的GCC特性,linux内核有_x < _y?_x : _y;})如果x和。原创 2024-03-22 22:45:55 · 191 阅读 · 0 评论 -
C语言的 4 个冷知识
01语法规定,数组的长度必须是个常量,保证数组所占的内存大小不变。数组下标从 0 开始,依次往后递增。于是大部分同学都把它当作了默认的规则。其实,数组的长度可以是0,叫做柔性数组,目的是让结构体变成可变长度,不过也是使用 malloc 进行空间的申请。另外,数组的下标也可以是负数,正数表示向后访问,负数表示向前访问。如果不太明白,可以看下下面的内存示意图:对于二维数组,同样可以使用负数的下标来访问元素。原创 2024-03-21 12:37:39 · 918 阅读 · 0 评论 -
关于MMU的学习
在中断配置时 有一个函数 MMU_Init() 这个是MMU的初始化函数,用来初始化存储器管理单元的 (Memory Manage Unit )。那这个单元是来干嘛的呢,顾名思义,用来管理存储器的。 许多年以前,当人们还在使用DOS或是更古老的操作系统的时候,计算机的内存还非常小,一般都是以K为单位进行计算,相应的,当时的程序规模也不大,所以 内存容量虽然小,但还是可以容纳当时的程序。但催着转载 2012-04-08 12:36:28 · 387 阅读 · 0 评论 -
2440启动文件分析(转)
;===================================================================== ; ; NAME: 2440INIT.S ; DESC: C start up codes ; Configure memory, ISR ,stacks ;Initialize C-variables ; HISTORY转载 2012-04-08 12:35:32 · 388 阅读 · 0 评论 -
ARM汇编----GBLA,GBLL及GBLS
GBLA,GBLL及GBLS伪操作用于声明一个ARM程序中的全局变量,并将其初始化。GBLA伪操作声明一个全局的算术变量,并将其初始化为0。GBLL伪操作声明一个全局的逻辑变量,并将其初始化成{FALSE}。GBLS伪操作声明一个全局的串变量,并将其初始化为空串""。 语法格式: variable其中: 是后面3种伪操作之一:GBLA、GBLL或者G转载 2012-04-08 12:29:16 · 10744 阅读 · 0 评论 -
ROM、SDRAM、RAM、DRAM、SRAM、FLASH的区别
ROM和RAM指的都是半导体存储器,ROM是Read Only Memory的缩写,RAM是Random Access Memory的缩写。ROM在系统停止供电的时候仍然可以保持数据,而RAM通常都是在掉电之后就丢失数据,典型的RAM就是计算机的内存。 RAM有两大类,一种称为静态RAM(Static RAM/SRAM),SRAM速度非常快,是目前读写最快的存储设备了转载 2012-04-08 12:31:00 · 286 阅读 · 0 评论 -
关于AREA和ENTRY的理解
1、AREA AREA指令指示汇编程序汇编新的代码节或数据节。节是不可分的已命名独立代码或数据块,它们由链接器处理。有关详细信息,请参阅ELF节和AREA指令。语法 AREA sectionname{,ATtr}{,ATtr}...其中: sectionname是将要指定的节名。可以为节选择任何名称。但是,以数字开始的名称必须包转载 2012-04-08 13:30:47 · 501 阅读 · 0 评论