OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 15847|回复: 22

寄存器还是函数库选择?

[复制链接]

1

主题

1

帖子

0

精华

新手入门

积分
25
金钱
25
注册时间
2013-2-24
在线时间
0 小时
发表于 2013-2-25 23:28:14 | 显示全部楼层 |阅读模式

最近纠结与使用寄存器还是函数库
主要有这几点考虑: 
函数库:
1.现在网上、书上很多例程都是用函数库(貌似只有原子哥用寄存器),函数库便于自学新的模块
2.而且函数库是st出的,真正的速度也不会太差吧?
3.如果往以后考虑,如果以后有新的单片机,而且寄存器越来越多,怎么办?
寄存器:
1.操作方便,学习寄存器有助于理解原理(这一点十分重要),而且继承51等的操作方法,容易接受         
2.确实感觉在lcd上的速度要快一点
3.但是,现在网上关于寄存器的例程太少了。主要是官方没有配置一个标准,所以这一点寄存器学习有点难,如果一遇到问题都不知道怎么办

所以,请各位大神分析一下,到底是寄存器还是函数库,或者说是怎么学习stm32吧?
(又会不会是学习时用寄存器多,做工程时用函数库多?又有没有函数库、寄存器混合编程的呢?)

正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165516
金钱
165516
注册时间
2010-12-1
在线时间
2116 小时
发表于 2013-2-26 00:14:49 | 显示全部楼层
学单片机,说白了底层的东西,只是占很少一部分.
单片机再怎么复杂,底层寄存器总是有限的,相比起来,应用程序的代码,远远多于这些底层操作的.
因此学习单片机,如果仅仅说是你库函数学会了,或者寄存器学会了,那还只是入门而已,真正让你伤脑筋的,很多时候是应用程序.

至于底层这部分,STM32的库函数无非就是ST把寄存器给封起来,让你好理解一些.归根到底,也都是要去操作寄存器的.
学库函数的人,我就不信他一点都不用看STM32参考手册的寄存器描述,完全能靠ST提供的库函数写出称心如意的代码.另外,老一辈工程师们,学51.学avr,学arm,哪里有库函数用?还不都是慢慢熬过来了?要都以为没库函数就不好,就不学,就不用,就回家种田.恐怕今天大部分搞技术的都是脸朝黄土背朝天了...

所以,我认为,库函数和寄存器,就好比两个人爬山,一个是别人一开始就把你送到半山腰了,另一个则是从山底下爬起.但终归,你还是要下山的.
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 2 反对 0

使用道具 举报

4

主题

133

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
408
金钱
408
注册时间
2016-1-27
在线时间
63 小时
发表于 2016-9-21 08:19:59 | 显示全部楼层
用寄存器挺好,我就是没用过库,全部用寄存器操作的。
Mob:150 0032 0863
QQ:276204039
回复 支持 1 反对 0

使用道具 举报

109

主题

1606

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2222
金钱
2222
注册时间
2011-12-15
在线时间
37 小时
发表于 2013-2-26 09:17:33 | 显示全部楼层
原子哥经典啊!
专业制作STM32 物联网通信模块板,模块交流群:369840039。
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165516
金钱
165516
注册时间
2010-12-1
在线时间
2116 小时
发表于 2013-2-26 09:51:13 | 显示全部楼层
上面我只是从大方面说一下库函数和寄存器。
至于到底你学习是用库函数,还是用寄存器,这个我觉得就是适合自己的就好。偏软的人,就可以直接用库函数,偏硬的人,想做做底层的,当然最好就是用寄存器了。
不过,不论你做哪类,了解部分底层,都是必须的。
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

23

主题

124

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
244
金钱
244
注册时间
2011-12-29
在线时间
1 小时
发表于 2013-2-26 09:54:52 | 显示全部楼层
确实经典,借鉴了
回复 支持 反对

使用道具 举报

13

主题

202

帖子

0

精华

高级会员

Rank: 4

积分
527
金钱
527
注册时间
2012-10-27
在线时间
65 小时
发表于 2013-2-26 21:07:43 | 显示全部楼层
回复【4楼】正点原子:
---------------------------------
貌似寄存器编译快啊
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165516
金钱
165516
注册时间
2010-12-1
在线时间
2116 小时
发表于 2013-2-26 21:08:59 | 显示全部楼层
回复【6楼】arm51avr:
---------------------------------
快很多,呵呵。
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

36

主题

1105

帖子

5

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
2200
金钱
2200
注册时间
2012-2-8
在线时间
35 小时
发表于 2013-3-8 19:27:48 | 显示全部楼层
如果是老手, 接触过各种, 用库函数用寄存器都很正常.
如果是新手, 只会用库函数绝对学不好.

其实写到最后都是到库函数去了. 只不过库函数可能是自己写的, 也可能是厂家提供的. 封装是软件里的基本概念了.
https://github.com/roxma
回复 支持 反对

使用道具 举报

36

主题

1105

帖子

5

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
2200
金钱
2200
注册时间
2012-2-8
在线时间
35 小时
发表于 2013-3-8 19:51:31 | 显示全部楼层
回复【6楼】arm51avr:
---------------------------------
差不多吧. 官方的库函数不是自己维护的, 一般不需要修改里面的代码, 所以可以生成 .lib 的文件来加快编译速度.
https://github.com/roxma
回复 支持 反对

使用道具 举报

3

主题

23

帖子

0

精华

初级会员

Rank: 2

积分
55
金钱
55
注册时间
2012-11-24
在线时间
0 小时
发表于 2013-3-9 21:04:52 | 显示全部楼层
接触STM32(以初级51的水平,可有难度了)已经有一段时间了,一直用寄存器操作(例程)。今晚看了一个库函数操作的视频,瞬间觉得以前的功夫都白搭了,三言两语就被库函数给代替了。之前还在犹豫是不是得改用库函数,就看到原子哥的回帖,会使用库函数,但是得自己下山。。谢谢
回复 支持 反对

使用道具 举报

17

主题

81

帖子

0

精华

初级会员

Rank: 2

积分
169
金钱
169
注册时间
2013-12-16
在线时间
6 小时
发表于 2014-9-18 14:50:51 | 显示全部楼层
回复【2楼】正点原子:
---------------------------------
原子哥,你最后一句总结的太深刻了!
回复 支持 反对

使用道具 举报

5

主题

48

帖子

0

精华

初级会员

Rank: 2

积分
76
金钱
76
注册时间
2016-9-13
在线时间
5 小时
发表于 2016-9-20 21:45:29 | 显示全部楼层
原子哥神回复。。。。。。。不过,在我的理解上来说,寄存器操作,是基础中的基础,但是,不是最终的目标。

这,和当初从 汇编,到 C 一样的道理, 工业控制,真正要超级精准,肯定汇编上,因为,汇编可以精确到指令周期(单指令,双指令,等等),你没写上去的指令,肯定不会给你去运行,一切可控,一切尽在掌握中的感觉,很好。
回复 支持 反对

使用道具 举报

5

主题

48

帖子

0

精华

初级会员

Rank: 2

积分
76
金钱
76
注册时间
2016-9-13
在线时间
5 小时
发表于 2016-9-20 21:49:58 | 显示全部楼层
接上:
      但是,在芯片运行和运算速度飞速发展的时代,思路上我觉得要跟上,我认为,学 ARM 不是要研究其寄存器,而是要研究其应用,才是最终目标。以前3.58M的晶振,用在51单片机,觉得汇编好控制速度,
     现在,用 STC 的单片机,上22.1184M 的晶振,似乎没怎么去关注这个东西,好比,你现在使用 高层软件去编写软件,你会一直去考虑 执行一条指令需要消耗多少时间么?我觉得不会。
     因此,我觉得,学这个STM32,我会选择库函数,不会去直接用寄存器,但是,寄存器可以比作你 向上的垫脚石,基础,没有这个,你不能说你会 STM32,至少,你只是知道皮毛,知其然不知其所以然。
回复 支持 反对

使用道具 举报

5

主题

48

帖子

0

精华

初级会员

Rank: 2

积分
76
金钱
76
注册时间
2016-9-13
在线时间
5 小时
发表于 2016-9-20 21:54:15 | 显示全部楼层
接上:
      因为原来有编写汇编代码,然后到 C 语言,然后再到 STM32,所以,我庆幸,对于寄存器,我应该会比新手理解更快。。。。
     以上是我的个人理解(我买开发板,今天才开始安装软件和学习范例呢,嘻嘻,刚配个电脑专门学习这个)。
     因此我的总结是:不过分的追求寄存器,自己看的懂,能理解明白,就好,重点还是在程序的构建和应用上。程序多加上一条 NOP,不会跑不动,也不会有明显变慢的。。。
   
回复 支持 反对

使用道具 举报

12

主题

84

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
232
金钱
232
注册时间
2014-8-6
在线时间
8 小时
发表于 2016-9-21 11:09:12 | 显示全部楼层
我的理解是,到底是用寄存器还是库函数,要根据具体应用来决定。比如我刚开发了一个1微秒完成一次AD转换,并同时完成一次实时控制的程序。开始阶段我用库函数来写的,库函数的执行时间太慢,后来精简为用寄存器实现。
回复 支持 反对

使用道具 举报

0

主题

4

帖子

0

精华

初级会员

Rank: 2

积分
53
金钱
53
注册时间
2016-10-27
在线时间
10 小时
发表于 2016-12-13 08:39:07 | 显示全部楼层
同纠结中,感觉寄存器比较麻烦,库函数简单,但是还得去手册中查寄存器。。
回复 支持 反对

使用道具 举报

0

主题

43

帖子

0

精华

高级会员

Rank: 4

积分
685
金钱
685
注册时间
2018-4-17
在线时间
104 小时
发表于 2018-5-18 13:21:44 | 显示全部楼层
新手都会遇到这个问题。。。
回复 支持 反对

使用道具 举报

2

主题

5

帖子

0

精华

新手上路

积分
28
金钱
28
注册时间
2017-11-22
在线时间
8 小时
发表于 2018-5-18 16:25:30 | 显示全部楼层
我毫不犹豫的从库函数开始学,先搞出东西来,底层的东西用到了自然就会去搞明白的。
回复 支持 反对

使用道具 举报

20

主题

450

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
4889
金钱
4889
注册时间
2017-7-6
在线时间
719 小时
发表于 2018-5-18 16:35:51 | 显示全部楼层
我觉得都差不多  用库自然会知道操作了那个寄存器
我是小白,很白很白的小白!!!
回复 支持 反对

使用道具 举报

31

主题

1954

帖子

3

精华

论坛元老

Rank: 8Rank: 8

积分
4508
金钱
4508
注册时间
2018-5-11
在线时间
944 小时
发表于 2018-5-18 22:42:45 | 显示全部楼层
本帖最后由 warship 于 2018-5-18 23:44 编辑

不要被那些技术派忽悠了,
对于新手来说,
必须毫不犹豫地从库函数开始学起,
如果有人说要从寄存器学起的,
我可以奉劝他干脆直接用汇编,
用户手册上有指令集的, 学会使用指令集更能了解硬件,
编译器毕竟效率也不是100%.

其实学习用库函数编程的时候,
通过查看函数原型(F12是利器!!!)
也会慢慢知道寄存器是怎么回事
用寄存器操作也不是什么高大上的事儿,
无非是ST用结构体封装了一些相关的寄存器,
用有意义的符号通过枚举封装了寄存器的可能的取值,
不可否认,直接用寄存器更有效率得多,
很明显的例子是, 我可能只需要改变某寄存器的一个BIT,
但用库函数就可能要声明一个相关的结构实体,
然后赋值给某一成员, 然后通过这个结构实体由库函数去完成初始化工作,
但一开始就用寄存器, 往往会被搞晕的(大量的寄存器,大量的位定义,已经不是8位机的时代了!!!).
对于那些早已习惯于操作寄存器的MCU老手,
直接从寄存器开始学习倒是不错的建议.


我的开源链接 https://github.com/ShuifaHe/STM32.git  请关注,点赞支持哦。
回复 支持 反对

使用道具 举报

11

主题

115

帖子

0

精华

高级会员

Rank: 4

积分
742
金钱
742
注册时间
2016-1-20
在线时间
189 小时
发表于 2018-5-19 09:04:08 | 显示全部楼层
如果你怕寄存器参考示例少不方便学习,你可以打开库函数的工程,随便一个库函数一步一步往下找就能找到这个库函数怎么操作寄存器的了,把那部分拷出来就行
回复 支持 反对

使用道具 举报

1

主题

100

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
279
金钱
279
注册时间
2019-8-29
在线时间
31 小时
发表于 2020-4-6 11:27:44 | 显示全部楼层
正在选择学习
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-5-24 19:12

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表