嵌入式C语言学习阶段性总结

学习有一段时间的嵌入式C语言阶段补习,感觉收货颇多。

心路历程:

之所以选择学习嵌入式,一方面原因是因为工作在外地,之前工作是销售,比较心累而且对于长期来说,干技术还是比较吃香的,不会过时;另外是因为之前工作是比较吃资源人脉的,工作在外想回家乡发展,对于长期发展的话,还是学一门技术比较稳定一些,加上之前毕业干过一年硬件研发,有一些略微的基础,而且对于整个行业了解,嵌入式前景还是很不错的,所以决心入门。

学习内容方面:

学习嵌入式C语言以来,从学习计算机的构成:输入输出设备,CPU处理器,存储器,程序,到逐个学习分别的一些功能和作用特性,了解到计算机运行的逻辑。特别是程序的设计步骤是:VIM(编辑)-gcc(编译)-/g.a.out(运行调试),进而分布式的学习C语言。
从非数值数据&数值数据开始了解学习,非数值数据就是字符,图片,声音等,存储在计算机内是以ascii码表的格式对应。特别要主要的日常常用的有特点的是‘a’字符对应的值是97,‘A’对应的值是65,‘\0’对应的值是0,字符‘0’对应的值是48.对于日常的进制转换使用是有用到的。数值数据中二进制,八进制,16进制对应的计算方式可以按照8421的方式,分段计算,特别是8进制是可以用三个二进制来转换得到。
基本数据类型中关键字一共有32个,包含数据类型,例如char short int long float double;控制语句if else for do while switch case default break continue goto,存储类型 auto static extern,const:只读,signed&unsigned,sizeof,typedef volatile。 对应关键信息下面具体展开叙述;另外日常代码程序中,关于标识符,是我们程序员自己定义的,涉及方面有变量名,函数名,类型名等等,具体有命名规范要求,最好见名知意。
关于基本数据类型,学习关于他们在内存空间中所占空间字节大小要了解,以便合理分配空间。另外相应输出方式,例如int类型的是按照%d,double 是以lf形势输出。具体要求格式控制串和输出表要一一对应。
另外关于标识常量(宏),特别要注意:#define 宏名 表达式,宏名为了和普通标量区分开,所以务必使用大写,宏后没有分号;在宏函数中,宏既有宏的特点,又有函数的特点,表达式为:#define 函数名(形参)
函数体,特别注意的是,宏只是一个单纯的替换,不会考虑优先级的问题,所以使用宏函数时要注意有需要运算的话,注意要给整个表达式加上括号。
第三天,我们学习了变量,存储类型,数据类型转换(强制转换和隐式转换)以及运算符。在变量中,定义是内存中开辟空间。定义在函数体外的变量叫全局变量,定义在函数体内的变量叫局部变量。对于存储类型中,auto是修饰局部变量,修饰的变量存储在栈区,extern修饰的是全局变量,修饰的变量存储在静态区,可以由多个.C构成,但是只能由一个main函数,此时会告诉编译器,该变量已经在其他文件中定义过了;static既可以修饰全局变量也可以修饰局部变量,修饰的变量存储在静态区,修饰局部变量的时候,如果局部变量没有初始化,其值默认为0.如果初始化了,有且只能初始化一次,结束临近的大括号函数体后,其定义的函数不会被释放,延长局部变量的生命周期,修饰全局变量的时候,显示其的作用域,从定义开始到程序结束,只能在本文件中使用;register修饰局部变量存储在寄存器中。对于数据类型转换分为人为强行转换和系统默认转换,在次特别要注意的是系统默认转换中,在不进行运算时,横向图表是float→double,long short→int;进行运算时是int→unsigned→long→double,这个在计算中多有应用,注意优先性。
关于运算符计算方面,有一个口诀是单算移关与,异或逻条赋。这个涵盖了所有计算的优先级。在位运算中,& ,|,^,中,运算过程中要注意使用截断法则。左移右移中,左移:
无符号数:高位丢弃,低位补0
有符号数:符号位不变,高位丢弃,低位补零
右移:无符号数:低位丢弃,高位补0:
有符号数:符号位不变,低位丢弃,高位补(0正,1负)。
再输入输出函数中,
函数:有独立功能的模块
标准的输入输出函数:scanf、printf(对输入以及输出的变量的类型没有限制)
输入:将键盘输入数据拷贝到内存中;(格式化符要和输出表一一对应)
输出:将内存中的数据打印至终端;Scanf(“格式控制串”,地址表)。
另外学习了三大结构,对于后面编程方向是十分普遍及广泛使用的,注意相关的运算逻辑以及相关语句使用方法。
另外学习到数组中,一组数据类型相同的元素组和在一起,一定是地址连续的相同类型的数据元素,一维数组和二维数组均是一样,不过有区分的是,二维数组的元素是数组。
字符串的输入输出中注意使用%s标识字符串,put(数组名)是将内容打印到终端上并自动换行,数组的数据类型是去掉变量名就是其数据类型,在字符串的输入函数中,gets(数组名),末尾会自动换行,另外注意的是gets不会进行越界检查,如果输入的超出了范围,会操作未申请的内存空间,造成段错误。
在字符串的处理函数中,有关字符串的长度计算(strlen),拷贝函数(strcpy),链接函数(strcat)比较函数(strcat),使用以上函数时,注意要引入头文件 #include <string.h>,另外要会不适用此函数,使用三大结构语句来求得相应的长度链接,拷贝,比较等。注意其使用的函数逻辑,另外在strlen中,与之前我们学到的sizeof的区别是,strlen是求字符的实际长度,不包含‘\0’,同时也是函数,sizeof是求申请到的内存空间的大小,是一个运算符,两个有所区别注意。
在二维数组中,元素为一维数组的数组,地址连续,且元素的类型个数都必须相同。在初始化中,注意全部初始化中,二维数组的行号是可以省略的,但是列数不能省略。同时进行访问时,数组名也是数组的首元素的地址,这个务必注意。
在自定义函数中,存储类型 数据类型 函数名(形参列表)中,形参列表是由程序员自己去顶,若没有返回值,需要以void开头;调用函数中,函数名(实际参数列表),注意要将实参拷贝给形参,数据类型及个数要一一对应,形参是局部变量,在函数调用时开辟空间,调用结束就释放空间。自定义函数中,如果函数没在main之前,就要声明,将函数头部直接复制粘贴至main函数之前,然后加上分号
声明的作用:帮助编译器做语法检查。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值