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;



广东梁百万 发表于 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;

ayb_ice 发表于 2021-2-23 09:06

tzgok 发表于 2021-2-23 09:05
比如,简单的IO输入输出配置(例如:并行接口需要频繁切换IO的输入和输出的场合,)
//
//使用库文件:


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

tzgok 发表于 2021-2-23 09:11

ayb_ice 发表于 2021-2-23 09:06
这是最简单的外设,你用DMA试试

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

ayb_ice 发表于 2021-2-23 09:14

tzgok 发表于 2021-2-23 09:11
道理是一样的,DMA的库函数为了“傻瓜式”,用了大量代码取实现“简单”,效率是绝对不如自己写的。。因 ...

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

前功尽弃 发表于 2021-2-23 09:26

楼主我还是比较支持你的观点

redcar 发表于 2021-2-23 09:46

8位机用寄存器操作,32位的真心不好搞,特别是上OS的,还有FFT,DMA之类的

tom_xu 发表于 2021-2-23 10:00

用野火的原话说,开发STM32还用寄存器操作的方式写代码,不如回老家种红薯。

henangongda123 发表于 2021-2-23 10:06

8位机用寄存器操作要好点,32位的没玩过,不过32位还用寄存器去直接操作,确实有点不现实

tzgok 发表于 2021-2-23 10:13

tom_xu 发表于 2021-2-23 10:00
用野火的原话说,开发STM32还用寄存器操作的方式写代码,不如回老家种红薯。 ...

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

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

henangongda123 发表于 2021-2-23 11:04

tzgok 发表于 2021-2-23 10:16
寄存器主要是做驱动部分,代码占比不大,但是对效率影响巨大。。。而且8位和32位的驱动能有多大区别?90% ...

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

hzpyl 发表于 2021-2-23 11:13

有利有弊。

用库,能省开发时间。

座机呀 发表于 2021-2-23 11:59

好比是扁担挑粪和马车拉粪,没处理好都臭

不闲不要钱 发表于 2021-2-23 12:30

楼主是不是不用os啊

雪山飞狐D 发表于 2021-2-23 13:02

    有P用,提升那点所谓效率,但是程序乱七八糟不标准,这里放一个寄存器操作,那里来自定义宏,不利于团队开发 ,要性能直接换芯片好了

tzgok 发表于 2021-2-23 13:10

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

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

雪山飞狐D 发表于 2021-2-23 13:29

tzgok 发表于 2021-2-23 13:10
“程序乱七八糟不标准”,,,这明显是人问题。。。人不行,不管用库和还是用自己的驱动,代码都是东一坨 ...

    再论IO,ST32 这种级别的属于消费微控制器,IO翻转差10指令有何大区别?你产品需要多快的响应速度?一般民用产品根本用不到10指令的时间差响应,除非是电机控制之类的需要低延迟的IO,那么ST有专门电机控制系列,用那种就行
      
页: [1] 2 3
查看完整版本: 使用库文件开发自己的产品,稳定性和移植性是最差的。