更多课程 选择中心

嵌入式培训
达内IT学院

400-996-5531

嵌入式C语言编程小知识总结

  • 发布:嵌入式培训
  • 来源:嵌入式教程
  • 时间:2020-09-10 15:40

1、数组指针

1>int (*p)[4]

表示*p有4个元素,每个元素为整型。也就是p所指的对象有4个整型元素的数组,既P是行指针。

2> 指针数组

Ø 一个数组,其元素均为指针类型数据,称为指针数组;即指针数组中的每一个元素都相当于一个指针变量。

Ø 一维指针数组的定义形式为:

类型名 *数组名[数组长度]

eg:int *p[4]:

作用:它用于指向若干个字符串,使字符串处理更加方便灵活。适用于一个二维字符串数组,其中每一行的字符数组的长度各不相同

eg:char * name[]={“Follow me”,”BASIC”,”GreatWall”};

2、 结构体

1> 可以用结构体变量做实参。但是用结构体变量作实参时,采取的是“值传递”的方式,将结构体变量所占的内存单元的内容全部顺序递给形参。形参也必须是同类型的结构体变量。

eg:pint(su);//注在此处su为结构体

注:这种传递方式在空间和时间上开销较大,如果结构体的规模较大时,开销是很可观的。

2> 用直向结构体变量(或数组)的指针作实参,将结构体变量(或数组)的地址传给形参

eg:print(&su);//注在此处su为结构体

3、 共用体

1> 共用体把几种不同数据类型的变量存放在同一块内存里。公用体中的变量共享同一块内存。

2> 定义公用体类型变量的一般形式为:

union 共用体名

{

成员列表;

}

    变量列表;

3>在共用体中同一块内存可以用来存放几种不同类型的数据,但在某一时刻只能在其中存放一个成员变量。共用体变量中起作用的成员是最后一次存入的数据。

eg: union data

{

int i;

char c;

double d;

};

union data a;

共用体变量a中的成员i,c,d三个变量在内存中从同一个地址开始存储。如进行如下赋值:

a.i = 100;

a.c = ‘A’;

那么此时共用体变量a中的成员i已经没有值了,因为存储该值的内存现在已经被用来存储成员c的值了。

4> 共用体变量的长度取决于其成员的最大长度:

说明:

结构体变量所占内存的长度是各个成员的总和,每个成员分别占有自己的存储空间。共用体变量所占内存的长度是其最长成员的长度。当然,编译器出于提高访问效率的目的,在编译分配存储空间时往往要进行对齐操作。

对齐操作以最大基本类型为准。即以最大基本类型为基本单元。若按实际算下的长度不是基本单元的整数倍,则其实际长度应该是基本单元的整数倍。

(在TurboC中不进行对齐,在Linux中进行对齐)

4、CPU字长与存储器位宽不一致处理

例如:使用共用体来解决这一冲突:

union send_temp{

uint16 words;

uint8 bytes[2];

}send_buff;

eg:send_buff.bytes[0]=a;//此处a 是8位

send_buff.bytes[1]=b;//此处 b 是8位;

此时就将8位字拼成了16位字存储了。

发送时send(send_buff.words)就可以每次发送一个16位的数据了。

5、C语言符号优先级:

1>复合赋值运算符号:

a+=3*5;

等价于a=a+(3*5);

6、关键字volatile的用法

volatile变量可能用于如下几种情况:

1>设备的硬件寄存器(如:状态寄存器)

2>一个中断服务子程序中会访问到的全局变量

3>多线程应用中被几个任务共享的变量。

7、关键字register的用法:

当对一个变量频繁被读写时,需要反复访问内存,从而花费大量的存取时间。为此,C语言提供了一种变量,即寄存器变量。这种变量存放在CPU的寄存器中,使用时,不需要访问内存,而直接从寄存器中读写,从而提高效率。寄存器变量的说明符是register。对于循环次数较多的循环控制变量及循环体内反复使用的变量均可定义为寄存器变量,而循环计数是应用寄存器变量的最好候选者。

(1) 只有局部自动变量和形参才可以定义为寄存器变量。因为寄存器变量属于动态存储方式,凡需要采用静态存储方式的量都不能定义为寄存器变量,包括:模块间全局变量、模块内全局变量、局部static变量;

(2) register是一个"建议"型关键字,意指程序建议该变量放在寄存器中,但最终该变量可能因为条件不满足并未成为寄存器变量,而是被放在了存储器中,但编译器中并不报错(在C++语言中有另一个"建议"型关键字:inline)。

8、宏定义

在C语言中,宏是产生内嵌代码的唯一方法。对于嵌入式系统而言,为了能达到性能要求,宏是一种很好的代替函数的方法。

1>宏定义“像”函数;

2>宏定义不是函数,因而需要括上所有“参数”;

3>宏定义可能产生副作用。因而不要给宏定义传入有副作用的"参数"。

最后,达内嵌入式培训机构提醒每一个it爱好者:如果你想要在短时间内快速入门,顺利掌握一门技术,建议还是认真学习视频。多练习,多动手。

版权声明:转载文章来自公开网络,版权归作者本人所有,推送文章除非无法确认,我们都会注明作者和来源。如果出处有误或侵犯到原作者权益,请与我们联系删除或授权事宜。

预约申请免费试听课

填写下面表单即可预约申请免费试听!怕钱不够?可就业挣钱后再付学费! 怕学不会?助教全程陪读,随时解惑!担心就业?一地学习,可全国推荐就业!

上一篇:有哪些工具可以让嵌入式开发事半功倍?
下一篇:嵌入式编程中你必须知道的小知识

裸编程怎么做?裸编程具体做法

嵌入式编程中你必须知道的小知识

嵌入式C语言编程小知识总结

有哪些工具可以让嵌入式开发事半功倍?

Copyright © 2023 Tedu.cn All Rights Reserved 京ICP备08000853号-56 京公网安备 11010802029508号 达内时代科技集团有限公司 版权所有

选择城市和中心
黑龙江省

吉林省

河北省

湖南省

贵州省

云南省

广西省

海南省