串口调试是个非常有用的调试技巧,可以在程序中是有Serial.print()输出关键信息,Serial还能与别的设备进行串口通信。Serial是类HardwareSerial的一个对象,用这个对象可以操作串口0。对于有些单片机不止一个串口的,可以用Serial1操作串口1,Serial2操作串口2,Serial3操作串口3。
从源文件中可以看到几个类的继承关系,HardwareSerial继承类Stream,Stream继承类Print。
按照继承顺序,先讲Print类。
Print类是个非常有用的类。
由名字能看出来,这个类的作用是打印数据。通过不同的东西打印的过程都是一样的,只是最底层实现不一样。
最底层的实现就是打印一个字符。
如果用不同硬件,那么打印一个字符的方式将会不一样。如果用串口的话,那么这一个字符的数据将会按位发送出去,如果要在LCD液晶屏上打印一个字符的话,那又会不一样。除此之外,其他部分都一样了。比如要打印一个字符串的话,可以逐个打印每一个字符,如果要打印数字123的话,那么就需要打印三个字符。这些内容不管是在串口上还是在LCD上还是在其他硬件上都是一样的。
因此,可以写一个类,给出共同部分的实现,而最底层实现写成虚函数。同时还包含了一些反应运行时状态(是否传送错误)的变量与方法。这个类就是Print类。
Print类
write
Print类给出了两个虚函数,分别用来发送一个字符和一个字符串
virtual size_t write(uint8_t) = 0;
virtual size_t write(const uint8_t *buffer, size_t size);
write(uint8_t c)这个函数是要在子类中实现的,当调用这个函数时,打印c对应的那个字符。比如
unsigned char ch = 'B';
write('A');
write(ch);
</