打印

使用库文件开发自己的产品,稳定性和移植性是最差的。

[复制链接]
4458|58
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
tzgok|  楼主 | 2021-2-22 21:44 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
使用库文件开发自己的产品,稳定性和移植性是最差的。。作为硬件工程师,应该了解自己用的单片机的寄存器操作,自己设计配置函数,这样产品出现任何BUG都可以快速跟踪和定位。。更重要的是,使用库文件,对于产品的快速移植非常不利。。因为很多时候,同样的功能函数你要在51,PIC,ARM等平台同时使用(不同价格的产品配置需要)。。。一般而言,工作时间越短的人越喜欢库文件,,工作时长了,很多人基于:时序控制和“自主控制”的需要,所以对库文件是排斥的。//
//
比如,简单的IO输入输出配置(例如:并行接口需要频繁切换IO的输入和输出的场合,SRAM/以太网/FPGA通讯等等)
//
//使用库文件:
GPIO_Initure.Pin=GPIO_PIN_All;                        
GPIO_Initure.Mode=GPIO_MODE_INPUT;                        
GPIO_Initure.Pull=GPIO_PULLUP;
GPIO_Initure.Speed=GPIO_SPEED_FREQ_VERY_HIGH;      
HAL_GPIO_Init(GPIOE,&GPIO_Initure);   //调用了几十条指令。               
//
寄存器操作只需要4条指令。
GPIOE->MODER   = 0x00000000;
GPIOE->OTYPER  = 0x00000000;   
GPIOE->OSPEEDR = 0xFFFFFFFF;  
GPIOE->PUPDR   = 0x55555555;



使用特权

评论回复
评论
misra 2021-2-26 09:40 回复TA
这个还是要看应用场景。比如效率要求特别高 那么有些库可能就不行 再比如 安全性有要求,要拿到一些认证 还有就是团队的开发经历 有没有对相关库特别熟悉的 有没有必要重新造轮子 现在这个时代 百花齐放 应用场景极其碎片化的时代 大家都在造各种软件轮子 硬件厂商也在造硬件轮子 总之 都为了赚钱 哈哈 总结 用什么不重要 能赚钱才是最重要的 

相关帖子

沙发
广东梁百万| | 2021-2-23 07:31 | 只看该作者
有道理,学习了

使用特权

评论回复
板凳
ayb_ice| | 2021-2-23 08:24 | 只看该作者
本帖最后由 ayb_ice 于 2021-2-23 08:25 编辑

模块越来越复杂了,全都自己搞不现实,
对速度要求极高的地方能够替代库就可以了

使用特权

评论回复
地板
tzgok|  楼主 | 2021-2-23 09:05 | 只看该作者
ayb_ice 发表于 2021-2-23 08:24
模块越来越复杂了,全都自己搞不现实,
对速度要求极高的地方能够替代库就可以了
...

比如,简单的IO输入输出配置(例如:并行接口需要频繁切换IO的输入和输出的场合,)
//
//使用库文件:
GPIO_Initure.Pin=GPIO_PIN_All;                       
GPIO_Initure.Mode=GPIO_MODE_INPUT;                         
GPIO_Initure.Pull=GPIO_PULLUP;
GPIO_Initure.Speed=GPIO_SPEED_FREQ_VERY_HIGH;      
HAL_GPIO_Init(GPIOE,&GPIO_Initure);   //调用了几十条指令。               
//
寄存器操作只需要4条指令。
GPIOE->MODER   = 0x00000000;
GPIOE->OTYPER  = 0x00000000;   
GPIOE->OSPEEDR = 0xFFFFFFFF;  
GPIOE->PUPDR   = 0x55555555;

使用特权

评论回复
5
ayb_ice| | 2021-2-23 09:06 | 只看该作者
tzgok 发表于 2021-2-23 09:05
比如,简单的IO输入输出配置(例如:并行接口需要频繁切换IO的输入和输出的场合,)
//
//使用库文件:

这是最简单的外设,你用DMA试试

使用特权

评论回复
6
tzgok|  楼主 | 2021-2-23 09:11 | 只看该作者
ayb_ice 发表于 2021-2-23 09:06
这是最简单的外设,你用DMA试试

道理是一样的,DMA的库函数为了“傻瓜式”,用了大量代码取实现“简单”,效率是绝对不如自己写的。。因为自己写的会过滤很多无关的操作。

使用特权

评论回复
7
ayb_ice| | 2021-2-23 09:14 | 只看该作者
tzgok 发表于 2021-2-23 09:11
道理是一样的,DMA的库函数为了“傻瓜式”,用了大量代码取实现“简单”,效率是绝对不如自己写的。。因 ...

有得就有失,正常,能运行的过来时,效率几乎没有意义,所以关键时能优化,满足要求才是关键

使用特权

评论回复
8
前功尽弃| | 2021-2-23 09:26 | 只看该作者
楼主我还是比较支持你的观点

使用特权

评论回复
9
redcar| | 2021-2-23 09:46 | 只看该作者
8位机用寄存器操作,32位的真心不好搞,特别是上OS的,还有FFT,DMA之类的

使用特权

评论回复
评论
z_no1 2021-2-23 21:22 回复TA
@tzgok :os是更简单,不是更复杂好吧.就是C和汇编得区别 . 
tzgok 2021-2-23 10:24 回复TA
中国很多人用ARM的无非是替代8051,做点简单的控制器,别说OS了,估计大部分人连AD都用不到。。。 
10
tom_xu| | 2021-2-23 10:00 | 只看该作者
用野火的原话说,开发STM32还用寄存器操作的方式写代码,不如回老家种红薯。

使用特权

评论回复
11
henangongda123| | 2021-2-23 10:06 | 只看该作者
8位机用寄存器操作要好点,32位的没玩过,不过32位还用寄存器去直接操作,确实有点不现实

使用特权

评论回复
12
tzgok|  楼主 | 2021-2-23 10:13 | 只看该作者
tom_xu 发表于 2021-2-23 10:00
用野火的原话说,开发STM32还用寄存器操作的方式写代码,不如回老家种红薯。 ...

做开发板的那帮人恨不得所有例子程序都用官方的库文件,这样他们的售后服务就大大减少了,如果例子代码都要他们自己写,他们确实可以回去种番薯了,因为他们忙得过来吗?。。。。所谓用寄存器写,主要是驱动自己用寄存器写,这个代码占比量不大,但是可维护性就大的多。。。比如SD卡的操作,很多新人直接套用库文件,读写速度不但慢,而且对SD卡协议机理一窍不通。

使用特权

评论回复
13
tzgok|  楼主 | 2021-2-23 10:16 | 只看该作者
henangongda123 发表于 2021-2-23 10:06
8位机用寄存器操作要好点,32位的没玩过,不过32位还用寄存器去直接操作,确实有点不现实 ...

寄存器主要是做驱动部分,代码占比不大,但是对效率影响巨大。。。而且8位和32位的驱动能有多大区别?90%的人无非就是:IO配置,串口配置,定时器配置,IIC/SPI配置,PWM配置,AD配置。。稍微功能多点就是:以太网,SDIO,FMC,DMA

使用特权

评论回复
14
henangongda123| | 2021-2-23 11:04 | 只看该作者
tzgok 发表于 2021-2-23 10:16
寄存器主要是做驱动部分,代码占比不大,但是对效率影响巨大。。。而且8位和32位的驱动能有多大区别?90% ...

反正我一直不喜欢用库,只用过8位机

使用特权

评论回复
15
hzpyl| | 2021-2-23 11:13 | 只看该作者
有利有弊。

用库,能省开发时间。

使用特权

评论回复
16
座机呀| | 2021-2-23 11:59 | 只看该作者
好比是扁担挑粪和马车拉粪,没处理好都臭

使用特权

评论回复
17
不闲不要钱| | 2021-2-23 12:30 | 只看该作者
楼主是不是不用os啊

使用特权

评论回复
18
雪山飞狐D| | 2021-2-23 13:02 | 只看该作者
    有P用,提升那点所谓效率,但是程序乱七八糟不标准,这里放一个寄存器操作,那里来自定义宏,不利于团队开发 ,要性能直接换芯片好了

使用特权

评论回复
19
tzgok|  楼主 | 2021-2-23 13:10 | 只看该作者
雪山飞狐D 发表于 2021-2-23 13:02
有P用,提升那点所谓效率,但是程序乱七八糟不标准,这里放一个寄存器操作,那里来自定义宏,不利于团 ...

“程序乱七八糟不标准”,,,这明显是人问题。。。人不行,不管用库和还是用自己的驱动,代码都是东一坨西一坨。

使用特权

评论回复
20
雪山飞狐D| | 2021-2-23 13:29 | 只看该作者
tzgok 发表于 2021-2-23 13:10
“程序乱七八糟不标准”,,,这明显是人问题。。。人不行,不管用库和还是用自己的驱动,代码都是东一坨 ...

    再论IO,ST32 这种级别的属于消费微控制器,IO翻转差10指令有何大区别?你产品需要多快的响应速度?一般民用产品根本用不到10指令的时间差响应,除非是电机控制之类的需要低延迟的IO,那么ST有专门电机控制系列,用那种就行
      

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

63

主题

231

帖子

2

粉丝