本帖最后由 ketose 于 2016-11-24 21:08 编辑
用库函数,还是使用寄存器,这个话题经常看到在很多论坛都有讨论。喜欢用寄存器的说:库函数效率低,不能了解低层。喜欢用库函数的说:寄存器开发代码看起来晦涩,开发效率低,开发复杂。总之是公说公有理,婆说婆有理。
在我看来不能一概而论,首先任务事物的发展都要经历从低级到高级,从简单到复杂的这么一个过程。单片机软件开发也不例外。从最初的只能用汇编写,到现在可以使用C来写代码,再到可以使用C++来写代码,再发展到现在可以使用脚本(Python)来写.无不是多少软件硬件工程师努力的结果,其目的只有一个:就是希望简化单片机开发难度,提高单片机开发效率。
我们再来看单片机的发展,从最初的4位机,到8位机,到16位机,再到现在普遍使用的32位机,单片机的硬件也是超来超复杂,寄存器也从原来的十几个到二十几,三十机到现在的近百个。刚开始编程可以使用寄存器,我们能记住那么区区几个寄存器,可是越到后面寄存器越来越多,我们已经无法记住所有寄存器的使用方法。但是我们人类是聪明的动物,我们会总结过去的经验,把一些比较模式化的寄存器操作封装成一个一个的函数,而且起一个比较直观的名字。以后使用的时候,我们只需要调用一下以前总结的函数,不用一句一句的写寄存器了。库函数就这样诞生了。哇,人类又向前迈进了一步。。。
接下来我们再来看看软件的发展,现在比较流行的Arduino,为什么能火起来?ARM为会么要致力推广Mbed?为什么单片机也要跑操作系统?回答这个问题我们先得了解下Arduion和Mbed,使用过这两个系统的人都会为它们的简单而折服,我不需要有很深的单片机知识,我一样能让我的四轴飞行器飞上天,一样能让两轮平衡车站起来,我只需要有数学知识和一点点电路知道就够了。这就是Arduion和Mbed努力的目标。就是因为软件工程越来越复杂,一个人的能力是有限的,所以我们要分工合作,熟悉低层的人可以来写低层驱动。熟悉算法,但对低层不熟悉的人可以来写上层业务算法,术业有专攻这样岂不更好。库函数是对寄存器操作的封装,而Arduion和Mbed在库函数的基础上更进一步抽象,使得单片机也面向对象,更符合人们认识事物的逻辑。哦还忘了说一个最重要的使用Arduion和Mbed写出来的程序,移植性更好。虽然现在MSP430还只是发展到库函数,但是总有一天也会像Arduion和Mbed看齐,我希望看到那一天的到来。
总结在单片机硬件越来越复杂,性能越来越强的情况下,我们会优先选择开发更为简单点的方式,在能满足要求的前提下,我们应该优先选择Arduion和Mbed,然后是库函数,最后才是寄存器。当然使用Arduion和Mbed的同时我会穿插使用库函数,使用库函数的同时我也会穿插使用寄存器,也并不是那么绝对。既然人类已经进入了信息化工业时代,我们为什么非要回到石器时代呢? |