预处理
在一句话之前有一个#键,则这就叫做预处理。
include 包含 引号里面是文件名,注意不是C++语言,所以没有尾部的分号。
define的用法
#define 用来替换代码 替换的内容前面再出现#变成加双引号 替换的内容中间出现##则变成前后字符串组合成长字符串
仿真连接:https://wokwi.com/projects/337884605578216019
预处理条件判断的经典三种用法 #if #ifndef #elif #endif
1.防止出错用 防止EXTRA_H被多次读取 2..define+型号 判读是否是这个板子型号
作用:防止报错,根据不同的开发板执行不同的命令 3.输出debug占空间 方法:用一个ifdebug进行判断
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.中断易挥发性变量
记忆点: (1)volatile易挥发性 non——volatile 不易挥发性
volatile断电不会存在
non——volatile断电文件仍然存在,如硬盘
(2)volatile变量必须从内存中读取
(3)volatile int定义变量 不会出错
random() 随机数
Random(300)=Random(0,300)