0%

模块化编程

模块

模块化,有蓝牙和WiFi、电机、传感器、显示屏等模块,这些模块都是由官方提供的api或者sdk,可以高效的开发,当初我第一次玩esp32开发板的时候,看到esp32+摄像头二合一的模块,这个代码没想到官方库都有提供,直接使用arduion就可以创建实例,可以快速实现拍照和上传,这就是模块化的好处了。搞嵌入式,最常说就是模块化编程了,就是高内聚,低耦合,通过内核来分配资源。

函数指针

可以用纯c写一个结构体,里面全都是函数指针,这样就可以实现api,方便其他程序调用,而且也可以通过外部来进行修改指向,这个是一个非常好用的技巧了。

对了,这里分享一个,我开发遇到的有意思的东西,我用c写了一个函数指针,去指向一个类实例里面的函数,发现是不能指向,提示要static的类方法才能被指向,这个是为什么呢?

非静态成员函数依赖于具体的类实例,它们有一个隐含的this指针指向类的实例。因此,它们在底层的函数签名上是不同的,无法直接用普通的函数指针去指向它们。静态成员函数与类实例无关,它们不依赖于任何this指针,因此它们在行为上与普通的全局函数相似。所以,可以用普通的函数指针指向静态成员函数。

git子模块

一定要知道有一个主模块,然后再添加git submodule add ,这样就可以在主工程中添加子模块,这样的开发其实非常有利于修改和开发的,不过对于一个模块的要求还是很高的。尤其是为了给客户使用,很多厂商linux内核和芯片编译都要连接外网,然后git拉下来仓库进行编译,这个过程就可以用这个子模块,然后子模块中只有静态库文件,这样就非常保密了,而且规范了开发流程。还有一点就是这个子模块问题就是版本更新的问题,有些外国人不讲武德,动不动就删分支,所以make就会失败,这个时候就得手动版本回溯,或者自己手动先下载好老版本的分支哦

总结

模块,高内聚低耦合,一个代码的风格和框架是可以看出来一个人的经验和水平的,不过很多人都是凭感觉来写的,感兴趣的可以看一下前面的博客,有关于内核和耦合的,也可以自行搜索。模块的制作确实有点麻烦,不过制作好之后就非常简单了。

-------------下次的来访是什么时候呢[doge]-------------