库源码对于入门者来说很生涩,层层嵌套,像迷宫一样,各种.c和.h文件很多,命名也很相似,网上也很少很详细的解析,我对u8g2这个库的一部分源码进行分析,希望有助于各位阅读,欢迎指点。
一、第一步
我的硬件是ESP32S3,用arduino框架,SSD1306是4线的SPI,MCU用硬件SPI通讯。
研究这种库我的习惯是先不要去看背后的.c和.h等文件,找一个最简单的.ino示例上手,示例会告诉我们初始化配置的先后顺序,沿着这个顺序才不会让人找不到路子。
u8g2库分为full buffer(整个画面一起更新)、page buffer(部分画面更新)、u8x8(针对文字字符的显示)三大类操作入口,针对不同显示内容,调用不同的操作入口。各个大类下都有类似hello world.ino这种示例,我阅读过后,选full buffer这个大类下的hello world.ino来解读,应该算是里面最简单的一个示例,代码就几行。这个示例就是在OLED屏幕上显示Helloworld字符。
在.ino示例里面我们只需要将红框的一行代码反注释。这句十分重要!是全局的第一层,选择屏幕硬件和通讯硬件的种类。
这句里面蓝色的u8g2看样子只是个实例,我们ctrl+鼠标左键点击红色U8G2_SSD1306_128x64,就看到这个类的定义。
二、类的继承
U8G2_SSD1306_128X64_NONAME_F_4W_HW_SPI在U8g2lib.h里面声明了(下图1),是一个子类,继承了U8G2这个大类,主要为了u8x8t这种结构体类型能通用。
花括号后第一段U8G2_SSD1306_128X64_NONAME_F_4W_HW_SPI,名称跟类名称一模一样,但是