
C语言
文章平均质量分 50
奔跑的小赛兔
擅长嵌入式项目,熟悉各类单片机。擅长Python。
爱动手,爱运动!
展开
-
C语言 strcmp、strncpy、sprintf、strncmp函数总结
C语言 strcmp、strncpy、sprintf、strncmp函数总结原创 2022-05-11 19:24:34 · 820 阅读 · 0 评论 -
__attribute__中的section的应用
__attribute__中的section的应用原创 2022-01-14 15:07:52 · 663 阅读 · 1 评论 -
__attribute__中的section的理解
__attribute__中的section的理解原创 2022-01-14 14:55:09 · 2830 阅读 · 4 评论 -
C语言浮点数的发送和接收
C语言浮点数的发送和接收原创 2022-01-06 11:36:21 · 1615 阅读 · 0 评论 -
C语言之#和##和__VA_ARGS__和##__VA_ARGS__
C语言之#和##和__VA_ARGS__和##__VA_ARGS__原创 2021-12-30 11:25:18 · 577 阅读 · 2 评论 -
常见预编译指令总结
C语言预处理原创 2021-12-13 18:16:43 · 522 阅读 · 0 评论 -
C语言操作寄存器的方法总结
1、C语言位操作操作寄存器操作位有两种方法,一种是位字段,另一种是使用按位运算符。下表为几种位操作符及其含义:不改变其他位的值的状况下,对某几个位进行设值。在嵌入式编程中,常常需要对一些寄存器进行配置,有的情况下需要改变一个字节中的某一位或者几位,但是又不想改变其它位原有的值,这时就可以使用按位运算符进行操作。下面进行举例说明,假如有一个8位的TEST寄存器:当我们要设置第0位bit0的值为1时,可能会这样进行设置:TEST = 0x01;但是,这样设置是不够准确的,因为这时候已经同时操作到了原创 2021-11-23 17:35:25 · 18117 阅读 · 0 评论 -
C语言volatile的应用举例
volatile 本意为“易变的”,它的作用是,当程序以一种编译器不知道的方式更改变量时,防止编译器对其进行任何优化(需要注意的是编译器的优化等级)。用volatile定义的变量会在程序外被改变,每次都必须从内存中读取,而不能重复使用放在cache或寄存器中的备份。volatile变量的例子:1、中断的发生,1.char flag = 0;2.3.int main(void)4.{5. ...6. while(1)7. {8. if (flag)9.原创 2021-11-22 17:57:22 · 1019 阅读 · 0 评论 -
C语言const的应用举例
一、常规用法关键字const用来定义只读变量,被const定义的变量它的值是不允许改变的,即不允许给它重新赋值,即使是赋相同的值也不可以。所以说它定义的是只读变量,这也就意味着必须在定义的时候就给它赋初值。用const修饰变量的格式通常为1 const type name = value;代码示例;(第一种方式)1 const int Max;也可以写成下面这种(第二种方式)1 int const Max;通常情况下使用第一种方式(建议将被const修饰的变量的首字母大写),被 const原创 2021-11-22 17:24:13 · 540 阅读 · 0 评论 -
C语言 if-break if-contiune if-return区分
break continue return原创 2020-10-16 15:34:13 · 1027 阅读 · 0 评论 -
C语言typedef 和 #define 的区别
typedef 在表现上有时候类似于 #define,但它和宏替换之间存在一个关键性的区别。正确思考这个问题的方法就是把 typedef 看成一种彻底的“封装”类型,声明之后不能再往里面增加别的东西。1) 可以使用其他类型说明符对宏类型名进行扩展,但对 typedef 所定义的类型名却不能这样做。如下所示:#define INTERGE intunsigned INTERGE n; //没问题typedef int INTERGE;unsigned INTERGE n; //错误,不能在 I..原创 2021-01-13 11:04:07 · 128 阅读 · 0 评论 -
C语言内存泄漏剖析
大家都知道,在堆上分配的内存,如果不再使用了,就应该及时释放,以便后面其他地方可以重用。而在 C 语言中,内存管理器不会自动回收不再使用的内存。如果忘了释放不再使用的内存,这些内存就不能被重用了,这就造成了内存泄漏,内存泄露只可能出现在堆上。内存泄漏几乎是很难避免的,但是掌握了一定方法还是能很好的降低内存泄露的风险。也许对一般的应用软件来说,这个问题似乎不是那么突出与严重。一两处内存泄漏通常并不致于让程序崩溃,也不会带来逻辑上的错误,而且在进程退出时,系统会自动释放所有与该进程相关的内存(共享内存除外)原创 2021-11-13 13:11:37 · 439 阅读 · 0 评论 -
C语言结构体的深度剖析
1、(声明结构体类型仅仅是声明了一个类型,系统并不为之分配内存,就如同系统不会为类型 int 分配内存一样。只有当使用这个类型定义了变量时,系统才会为变量分配内存。所以在声明结构体类型的时候,不可以对里面的变量进行初始化。)typedef struct student{ int num;}STUDENT;typedef struct student STUDENT;typedef给struct student起了个新名字叫STUDENT。2、typedef struct tagNode原创 2021-11-12 09:40:50 · 1557 阅读 · 0 评论 -
C语言动态申请内存造成的内部碎片和外部碎片
C语言支持动态申请内存,就是我们常见的malloc 和 free函数。动态申请内存理论上会极大的节省内存空间。但在用的时候一定注意内存碎片,否则后果不堪设想。所以说动态申请内存的官方函数在没有足够的知识储备前慎用。内存碎片又分为内部碎片和外部碎片:内部碎片:由于申请的时候申请的不是4字节的倍数造成的,例如申请了17个字节,但是系统不会给你分配17个而可能是20个字节,这就造成了内部碎片的产生。解决办法:尽量申请4的倍数的字节,或者对于大内存的单片机来说,可以规定申请的单位是k,就可以避免这个问题原创 2021-11-11 11:17:29 · 1987 阅读 · 0 评论 -
关于单片机栈空间的总结
1、如果定义成全局数组,则此数组就会自动初始化为0但如果定义成局部数组,则必须要先初始化2、 局部变量一定要初始化局部变量初始化”是指在使用这个局部变量前,要对其进行初始化。这是因为局部变量是从内存堆中分配的,用完就还给内存堆,所以被分配的局部变量并不一定是0,而很可能是其他地方用过的一个值,因此在使用这个变量之前,要对它进行显示初始化。3、栈空间最大原则,所有子函数中局部变量、数组、函数参数占用的空间中取最大值作为栈空间的最大值。...原创 2021-07-22 15:41:44 · 500 阅读 · 0 评论 -
记录一个小细节导致的惨痛教训!!!
如上图所示:数组的下标为不确定数,这个容易忽略的小细节导致数据没有去对,后续的算法都无法实现,将数组下标设为固定数或无下标,问题解决。看来一定要注重基础呀。或者用动态数组的方式实现都是可以的。comp* h;comp* g;comp* pComp;i=1;do { i*=2;} while (i<N+M-1);L = i;h = (comp*)calloc(L,sizeof(comp));g = (comp*)calloc(L,sizeof(comp));pCom.原创 2021-06-08 18:18:04 · 106 阅读 · 0 评论 -
大端小端存储区别一看即懂
字节排序按分为大端和小端,概念如下大端(big endian):低地址存放高有效字节。数据的第一个字节先存。小端(little endian):低字节存放地有效字节1.大端和小端的方式及判断举个例子说明,我的机子是32位windows的系统,处理器是AMD的。对于一个int型数0x12345678,为方便说明,这里采用16进制表示。这个数在不同字节顺序存储的CPU中储存顺序如下:LSB的意思是:全称为Least Significant Bit,在二进制数中意为最低有效位,一般来说,MSB位原创 2021-04-24 09:57:19 · 2918 阅读 · 0 评论