Movatterモバイル変換


[0]ホーム

URL:


更多课程选择中心logo

嵌入式培训
达内IT学院

400-996-5531

    嵌入式培训

    IT培训

    了解达内

    联系达内

    400-996-5531

    热门课程:
    无止境再出发
    开课中心
    嵌入式培训 > 嵌入式教程 

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


    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语言编程小知识总结

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

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

    嵌入式开发就是指在嵌入式操作系统下进行开发,一般常用的系统有μcos,vxworks,linux,android等。当然,对于嵌入式或单片机工程师的利器就是C语言、C++或汇编语言。那么有哪些好工具可以让工作事半功倍呢?

    右侧图片佟大为

    开班时间

    相关栏目

    • 达内
    • 达内高手
    • 达内课堂

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

    选择城市和中心
    北京

    黑龙江省

    吉林省

    辽宁省

    内蒙古

    天津

    河北省

    山西省

    陕西省

    山东省

    河南省

    江苏省

    安徽省

    上海

    湖北省

    四川省

    重庆

    湖南省

    江西省

    浙江省

    贵州省

    福建省

    云南省

    广西省

    广东省

    海南省

    台湾


    [8]ページ先頭

    ©2009-2025 Movatter.jp