欢迎光临散文网 会员登陆 & 注册

STM32F103学习笔记 day17

2023-02-28 11:26 作者:崔崔TV  | 我要投稿

要复习一下C语言基础知识

1、stdint.h

是从C99中引进的一个标准C库的文件

地址:D:\MDK5.34\ARM\ARMCC\include

里面定义了一些数据类型,主要的作用就是后续编写程序的时候不需要再挨个去确定数据类型了。数据类型的表达方式变得非常固定。

C99是什么啊?

C99 (以前称为C9X )是ISO / IEC 9899:1999的非正式名称,在1999年推出,被ANSI于2000年3月采用。它是C编程语言标准的过去版本。 它扩展了以前的版本( C90 ),增加了语言和标准库的新功能,并帮助实现更好地利用可用的计算机硬件,如IEEE 754-1985浮点运算和编译器技术,最主要的增强在数值处理上。 2011年发布的C编程语言标准的C11版本取代了C99。

打开我自己的,发现长这个样子,可能以后编程序的时候需要对照着打开看一下,能省不少事。


2、位操作

按位取反是个单目运算符,出现在要取反的对象的左侧

左移,如果有的位“移出去了”,则丢掉,空缺的位用0代替

右移,如果有的位“移出去了”,则判断是有符号数还是无符号数,无符号数直接补零,如果是有符号数:看符号位是0还是1,0是正数,空缺位补0,1是负数,空缺位补1。


如何给寄存器的某个位赋值:位操作,比如这个:

注意,最低位是位0,不是位1

方法1:按位与或者按位或(但是这个的可读性比较差,而且比较麻烦)

方法2:

1左移6位,变到位6,然后前面有个取反,就相当于和那个0xFFFFFFBF一个效果了

这个句子大概就是这样:

temp=temp&{~(1<<6)}


3、宏定义

可以提高效率,可读性,易改性,核心是替换

宏定义的名字,要大写。本质就是用这个宏定义的名字,来替换“常数、表达式、格式串”


举个例子:

建议用do{...}while(0)来构造宏定义,这样不会受到大括号、分号、运算符优先级等的影响,总是会按你期望的方式调用运行。

我他妈都不知道啥是构造语句

这就是构造语句,还是很好理解的,注意,用这个结构的时候一定要用大括号



4、条件编译

让编译器只对满足条件的代码进行编译,不满足条件的不参与编译

ifdef跟宏名,ifndef也是

大概格式:

如果没定义ledh,就执行下面的语句,如果定义了,就不执行

这个的主要作用是,可以省略不少头文件被引用的时间,加快程序运行速度,减少编译时间

if后面跟一个宏的意思就是:如果宏是个变量,检测其值,若为1,执行后续代码,若为0,不执行。


5、extern声明

放在函数/变量前面,表示这个函数/变量再其他文件定义,以便文件引用。


6、类型别名(typedef)

为现有数据类型创建一个新的名字,或称为类型别名,用来简化变量的定义

这是形式和例子


7、结构体

又若干数据类型集合组成的一种自定义数据类型,也叫聚合类型

在ST的里面,主要的应用格式长这样:


8、指针

指针就是内存的地址,指针变量是保存了指针的变量,是个变量。这是两个东西

*+指针变量名   是取变量的值

&+指针变量名 是取变量的地址

第一种常见问题:

并没有给他分配内存,就是少了一步uint_8 buf[5]={1,3,5,7,9};这种东西


第二种常见问题:

越界使用

只有五个地址,你去用第六个,就是越界了


今天就学到这里!



STM32F103学习笔记 day17的评论 (共 条)

分享到微博请遵守国家法律