预处理

在一句话之前有一个#键,则这就叫做预处理。 image.png

include 包含 引号里面是文件名,注意不是C++语言,所以没有尾部的分号。

define的用法

#define 用来替换代码 替换的内容前面再出现#变成加双引号 替换的内容中间出现##则变成前后字符串组合成长字符串

仿真连接:https://wokwi.com/projects/337884605578216019

预处理条件判断的经典三种用法 #if #ifndef #elif #endif

1.防止出错用 image.png 防止EXTRA_H被多次读取 2..define+型号 判读是否是这个板子型号 image.png

作用:防止报错,根据不同的开发板执行不同的命令 3.输出debug占空间 方法:用一个ifdebug进行判断 image.png

signd & unsignd、U & L formatters

Signed vs Unsigned

默认情况下,变量的可正可负(Signed)。通过Unsigned修饰符,将变量强制为只能表示正数。这样子,在相同的内存空间下,正数的表示范围翻倍。 注意: (1) Signed代表负号,Unsigned代表没有负号 (2) 如果变量不可能为负,申明为unsigned (3) Unsigned 正数范围翻倍 (4) #define后面只跟一个参数定义为空

若数据范围溢出,则从原来的最大数值变为0,以后再继续加一。 如仿真所示 仿真:https://wokwi.com/projects/337889444446077523

U & L formatters

U代表正数,L代表Long,UL代表正数Long

仿真:https://wokwi.com/projects/337889773226033747

挥发性变量 volatile、random 随机数

1.挥发性变量 volatile

主要是用再多线程中对共同的变量进行访问时,该变量需要定义为挥发性变量。

在ARDUINO中多线程的情况只有一个,就是中断。所以,在中断中对全区变量的修改,需要将该变量定义为挥发性变量。

定义为挥发性变量后,会有两个作用。 (1).让GCC编译器不要耍小聪明,所以的易挥发性变量必须在内存中分配; (2).易挥发性变量的每次读写必须从内存中获取,不得使用CACHE或者寄存器内的数值。

2.中断易挥发性变量

image.png

记忆点: (1)volatile易挥发性 non——volatile 不易挥发性

volatile断电不会存在

non——volatile断电文件仍然存在,如硬盘

(2)volatile变量必须从内存中读取

(3)volatile int定义变量 不会出错

image.png

random() 随机数

image.png

Random(300)=Random(0,300)