STM32单片机编程用库函数好还是寄存器好?

cathy的头像

我学单片机已经四年了,用的一直是标准库函数。

库函数和寄存操作到底哪个好,这个不好说,只能说根据个人情况和应用场合吧。比如说我,虽然说我一直用的是标准库函数,但是我也不只是用标准库,偶尔在需要的时候会用寄存器操作,因为寄存器操作的效率更高。

库函数和寄存器操作的区别可能和 C 语言与汇编语言的区别差不多吧,都是跟效率有关,但有时候效率并不是唯一指标。

我们都知道 C 语言的效率要比汇编低,但是现在绝大多数嵌入式开发人员用的还是 C 语言!为什么,因为它简单易学,容易跨平台,移植性好,这是很大的优势,而汇编就不同了,它针对的是某一款内核进行开发,比如51汇编语言、ARM汇编语言,一旦内核变了,如果你的代码采用纯汇编写的代码,那几乎所有的代码都不适用了。但是使用 C 语言编写代码就不同,你在 51 单片机写的代码也能在 STM32 单片机中使用,你要做的工作就是把涉及到底层硬件的代码稍微修改一下就可以了,这种工作量很少,你的代码写得足够好的话,是很容易的,这称之为移植。那为什么 C 语言可以做到跨平台呢?我们知道单片机最终还是要通过汇编语言执行的,所有的C 语言其实都会通过编译器进行转化的,也就是说你写的 C 语言程序会经过一种称为编译器的东西转为对应的汇编语言,比如说你的 C 语言程序要运行在 51 单片机上,你就要用对应的编译器编译,如果要运行在 STM32 上,你也要用另一个对应的编译器才行,这就是 C 语言能跨平台的秘密!跨平台的工作是交给了编译器,而不是说 C 语言真的能直接在各种单片机上运行!

但是真正的单片机程序并不是只有 C语言的,在进入 C 的世界之前,其实是有一段代码的,这称之为启动代码,但是这段代码很少!

库函数和寄存器的区别也是如此,库函数类似于 C 语言,而寄存器就类似于汇编。

使用库函数的好处就是你不用深入每一个寄存器操作的细节,而是把工作重心放在功能实现上。所有的寄存器细节都由封装好的函数去实现,你要做的就是合理的调用它。但也正因为细节进行了封装,所以在编写库函数的时候会考虑更多,这就会导致库函数的代码比较臃肿,效率比较低下,但是它的好处就是方便移植、修改,就是说即使库函数代码真出现了问题,你也只是找对应的函数进行修改就可以了,其他的函数基本可以不用动。

正因为库函数和寄存器操作各有优势,所以真正的高手一般都会结合这两种写法,比如在一般代码中使用库函数编写,遇到关键代码采用寄存器操作,比如说中断函数这种关键部分,一般都会使用寄存器的方式。

“”

“”

本文转载自:鱼鹰谈单片机(作者:鱼鹰Osprey)
免责声明:本文为转载文章,转载此文目的在于传递更多信息,版权归原作者所有。本文所用视频、图片、文字如涉及作品版权问题,请联系小编进行处理(联系邮箱:cathy@eetrend.com)。