三个主要项目比较完成。
可以说,回调方案处于劣势,而且非常劣势。
现在我们考虑另一个原因,也正是这个原因,让我最终仍然倾向函数回调 的方案。
当然,显然我们要做出更多的改进,来减少这些劣势。
并且考虑某些场合,混合使用 同名方案,毕竟这确实是很不错的方法。
我们一开始考虑的都是很简单的情形
什么乱七八糟大白菜的gpio
在这种情况下,gpio的寄存器设置,有就有,没有就没有,最多我看不到LED闪烁,确实不算什么大不得的事情。
然而,如果我们现在在做一个稍微复杂一点的东西呢
比如说一个模拟i2c,我们知道不管如何,我们至少需要定义两个io,一个是SDA 一个是SCK。
而且要写高写低,还要改变IO方向.......
在这种情况,假设你在进入读数据的状态下,你的改变IO为读的方向居然没有定义,忘了或者传递失败....或者诸如此类....以至于你实际上根本没有改变IO方向,结果你就在那里等待接收。
假如你做了超时机制,那么还好,你没有死在里头。
假如你没有,完了,你直接死在这个地方,就像stm8s的硬件i2c一样,本身读写错误,但是没有超时退出机制,于是你就完蛋了,当系统复杂起来的时候,你连怎么死都不知道。
但是如果它是一个函数指针呢?
我们可以加一句判断是否为NULL,如果是NULL,我们可以直接知道返回错误,因为这个函数必然不可能正常运行。
当然,这就带来了另一个时间开销。
我的天,那么多函数指针,你都要查一次NULL?
要命。
而大多数情况下,你的函数其实都是非NULL,也就说你的程序大多数时间在做没必要的判断,这将是一个不小的问题。
这个时候我忽然想到,但是不对啊,因为,同名函数的情形下,uSer或者Apper必须有一个实现者啊,不然会编译不通过
的确如此,但是如果我们在写一个函数时,我们习惯性用空函数先代表还没实现的功能,从而可以使我们从上往下设计接口呢?
应该说,这个危险仍然有,而且不大不小。
你会想到靠人去查——但这种工作,靠人工去查绝对没有本来就有自动检查机制来的可靠。
这个原因,算是一个相当重要的原因。
所以,我们必须重新思考 两者的选择。
为了避免让过多的考虑影响我们前进的步伐,我暂时仍然采用 回调机制 来继续走下去。
我所要做的只是,想办法,简化回调机制带来的麻烦操作。
我在 定时中断 的基础上 加入gpio,然后重新考虑如何实现。
因为单纯考虑牵着时,问题很少,而集成的东西越来越多以后,问题会越来越复杂,所以,需要考虑新方法。 |