Reader

优雅地编写寄存器读写驱动,然后惊艳所有人

| I BCL. | 博客

在博主刚入门单片机时,经常看到其他人写出类似这样的驱动代码。

1
2
3
4
5
6
7
8
9
10
11
12
13
// ... 其他内容
i2c_write_cmd(0xAE);
i2c_write_cmd(0x00);
i2c_write_cmd(0x10);
i2c_write_cmd(0x40);
i2c_write_cmd(0xDA);
i2c_write_cmd(0x1D);
i2c_write_cmd(0xF1);
i2c_write_cmd(0x8D);
i2c_write_cmd(0x14);
i2c_write_cmd(0xA4);
i2c_write_cmd(0xA6);
// ... 其他内容

作为小白,看到一大堆的 16 进制数字,自然是一脸懵比,就算看了半天也只能从调用的函数名字勉强猜出这可能是在操作寄存器,但是具体是什么寄存器,写入的值是什么,就不得而知了。

用这种一把梭方式写出的驱动代码,不仅可读性极差,而且一旦需要修改,事情就会变得非常麻烦:由于不清楚每句代码都是在操作哪个寄存器,因此开发者又需要回到 Datasheet 中去查找寄存器的地址,然后再去查看寄存器的功能,最后才能确定要写入的值,这样的开发效率可想而知,如果时间一长,开发者便会对这个项目产生厌恶情绪,最终导致项目被搁置,而屎山项目也就此诞生。

但不幸的是,这种一把梭的方式在很多开源项目中都能看到,因此这也让有强迫症的博主非常不爽。对此,博主决定写一篇文章,以自己的 AnyShake Explorer 项目开发途中为 ADC 编写驱动的经历为例,来分享如何才能写出能惊艳到其他人的驱动代码。