库函数和寄存器的区别

库函数和寄存器的区别,第1张

单片机编程时,都会碰到寄存器or库函数编程的选择问题,“寄存器”需要对芯片手册有足够的了解,程序代码量较少、执行效率较高;“库函数”则无需对芯片有较深认识,只需了解对应“库函数”的“含义”及“使用方法”,就可以对单片机进行编程 *** 作;

不乏网络上的大神,可以兼顾“寄存器”和“库函数”,达到“信手拈来”的地步;对初学者而言,可能会力有不逮;笔者在“初学51单片机”后,感到“51”实在性能有限,但不得不说,能够把“51单片机”玩转的人简直是“神人”,私下一对比,本人即放弃了这条“成神之路”;

之后在正想学习下ARM系列单片机时,由于机缘巧合,接触到“STM32系列单片机”时,已经有“库函数”出来了,因此直接跳过了“AVR”、“MSP430”直接跨到了“STM32系列单片机”;

在学习“51单片机”时,其为“8bit单片机”,且“寄存器数目很少”,将“对应的头文件”(h文件)看完,耗时也不会超过“1小时”;而对“stm32”而言,其为“32bit单片机”,即使是“单个外设”所涉及到的“寄存器数目”就已经很吓人;本人当时选择了“库函数”,曾经写的第一段代码为:

/

函数名称 : void GPIO_Configuration(void)

函数功能 : GPIO配置函数,启动PA、PB所有时钟,及复用时钟;

输 入: 无

输 出: 无

返 回: 无

注意事项 : 无

完成进度 : 已完成,2012-09-16

/

void GPIO_Configuration(void)

{

GPIO_InitTypeDef GPIO_InitStructure;

RCC_APB2PeriphClockCmd( RCC_APB2Periph_GPIOA | RCC_APB2Periph_GPIOB | RCC_APB2Periph_AFIO, ENABLE );

GPIO_InitStructureGPIO_Pin = GPIO_Pin_0 | GPIO_Pin_1 |GPIO_Pin_2 |GPIO_Pin_3 |GPIO_Pin_12 ;

GPIO_InitStructureGPIO_Mode = GPIO_Mode_Out_PP; // 推挽输出

GPIO_InitStructureGPIO_Speed = GPIO_Speed_50MHz; // 最高输出速率50MHz

GPIO_Init(GPIOA, &GPIO_InitStructure); // 选择A端口

}

简单配置后,就可以通过“GPIO_SetBits()”或“GPIO_ResetBits()”函数实现“高低电平的控制”;如上代码所示,代码中不涉及具体的“寄存器”,只使用了“库函数”;但“库函数”的底层“仍旧为寄存器”,只是“大神”将“复杂的寄存器”进行了封装,演变成了“库函数”;

但需注意:“库函数”可极大提高代码的复用性,但其与“底层寄存器”仍有“千丝万缕的关联”;因此,不能只为方便,彻底舍弃“寄存器方式”;需根据具体情况,适时选用“合适的编程方式”进行“代码编写”;譬如对常规“GPIO *** 作”主要有3种:“置高”、“置低”、“取反”,对“STM32F103”而言,写法举例如下:

#definePC1_H GPIO_SetBits(GPIOC, GPIO_Pin_1) // PC1 高电平

#definePC1_L GPIO_ResetBits(GPIOC, GPIO_Pin_1) // PC1低电平

#define GPIO_ReversedGPIO_WriteBit(GPIOB, GPIO_Pin_5,(BitAction)(1 - (GPIO_ReadOutputDataBit(GPIOB, GPIO_Pin_5))))

注意:“取反”借助库函数“GPIO_WriteBit()”配合“GPIO_ReadOutputDataBit()读取函数”、“(BitAction)枚举强制转换”3者共同实现;同时,对“取反”而言,也可使用“自主编写取反函数,使用if判断实现”,但推荐使用“宏定义方式”实现,其能有效提高代码的“可读性”、“可维护性”;

最后,需明确无论是“寄存器”或是“库函数”,其本质仍是“编程工具”,“编程”的核心是“数据结构+算法”,即“编程思路”;因此,切忌舍本逐末,变成“为编程而编程”;

学习编程首先从C语言开始。虽然,对于一个初学者来说,用一些控件堆砌成一个小软件会有一些成就感,但是,基础才是最重要的。C语言对于数据类型的描叙,远比VB更全面、明白,而这些正是编程中的根本。

学习编程的相关书籍推荐

1、《c primer plus》

《C Primer Plus》是C语言的经典教材。本书以丰富多样的程序为例,讲解C语言的知识要点和注意事项。每章末尾设计了大量复习题和编程练习,帮助读者巩固所学知识和提高实际编程能力。附录给出了各章复习题的参考答案和丰富的参考资料。适合希望系统学习C语言的读者,也适用于精通其他编程语言并希望进一步掌握和巩固C编程技术的程序员。

2、《The C Programming Language》

c语言方面的经典教材,而这本与之配套的习题解答将帮助您更加深入地理解c语言并掌握良好的c语言编程技能。有关练习题都是用k ampr原著中当时已经介绍过的语言结构来解答的,对每道练习题的答案要点都给予了清晰的解释,实用性强。适合于大专院校师生作为计算机专业或非计算机专业c语言教学的辅助教材,也可以作为从事计算机相关软硬件开发的技术人员的参考书。

3、《C Traps and Pitfalls》

这本书是对C程序员具有珍贵价值的经典著作。写作本书的出发点不是要批判C语言,而是要帮助C程序员绕过编程过程中的陷阱和障碍。全书分为8章,分别从词法分析、语法语义、连接、库函数、预处理器、可移植性缺陷等几个方面分析了C编程中可能遇到的问题。最后,作者用一章的篇幅给出了若干具有实用价值的建议。

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/langs/12184381.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-05-21
下一篇2023-05-21

发表评论

登录后才能评论

评论列表(0条)

    保存