使用库文件开发自己的产品,稳定性和移植性是最差的。
使用库文件开发自己的产品,稳定性和移植性是最差的。。作为硬件工程师,应该了解自己用的单片机的寄存器操作,自己设计配置函数,这样产品出现任何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;
有道理,学习了 本帖最后由 ayb_ice 于 2021-2-23 08:25 编辑
模块越来越复杂了,全都自己搞不现实,
对速度要求极高的地方能够替代库就可以了
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; tzgok 发表于 2021-2-23 09:05
比如,简单的IO输入输出配置(例如:并行接口需要频繁切换IO的输入和输出的场合,)
//
//使用库文件:
这是最简单的外设,你用DMA试试 ayb_ice 发表于 2021-2-23 09:06
这是最简单的外设,你用DMA试试
道理是一样的,DMA的库函数为了“傻瓜式”,用了大量代码取实现“简单”,效率是绝对不如自己写的。。因为自己写的会过滤很多无关的操作。 tzgok 发表于 2021-2-23 09:11
道理是一样的,DMA的库函数为了“傻瓜式”,用了大量代码取实现“简单”,效率是绝对不如自己写的。。因 ...
有得就有失,正常,能运行的过来时,效率几乎没有意义,所以关键时能优化,满足要求才是关键 楼主我还是比较支持你的观点 8位机用寄存器操作,32位的真心不好搞,特别是上OS的,还有FFT,DMA之类的 用野火的原话说,开发STM32还用寄存器操作的方式写代码,不如回老家种红薯。 8位机用寄存器操作要好点,32位的没玩过,不过32位还用寄存器去直接操作,确实有点不现实 tom_xu 发表于 2021-2-23 10:00
用野火的原话说,开发STM32还用寄存器操作的方式写代码,不如回老家种红薯。 ...
做开发板的那帮人恨不得所有例子程序都用官方的库文件,这样他们的售后服务就大大减少了,如果例子代码都要他们自己写,他们确实可以回去种番薯了,因为他们忙得过来吗?。。。。所谓用寄存器写,主要是驱动自己用寄存器写,这个代码占比量不大,但是可维护性就大的多。。。比如SD卡的操作,很多新人直接套用库文件,读写速度不但慢,而且对SD卡协议机理一窍不通。 henangongda123 发表于 2021-2-23 10:06
8位机用寄存器操作要好点,32位的没玩过,不过32位还用寄存器去直接操作,确实有点不现实 ...
寄存器主要是做驱动部分,代码占比不大,但是对效率影响巨大。。。而且8位和32位的驱动能有多大区别?90%的人无非就是:IO配置,串口配置,定时器配置,IIC/SPI配置,PWM配置,AD配置。。稍微功能多点就是:以太网,SDIO,FMC,DMA tzgok 发表于 2021-2-23 10:16
寄存器主要是做驱动部分,代码占比不大,但是对效率影响巨大。。。而且8位和32位的驱动能有多大区别?90% ...
反正我一直不喜欢用库,只用过8位机 有利有弊。
用库,能省开发时间。 好比是扁担挑粪和马车拉粪,没处理好都臭 楼主是不是不用os啊 有P用,提升那点所谓效率,但是程序乱七八糟不标准,这里放一个寄存器操作,那里来自定义宏,不利于团队开发 ,要性能直接换芯片好了 雪山飞狐D 发表于 2021-2-23 13:02
有P用,提升那点所谓效率,但是程序乱七八糟不标准,这里放一个寄存器操作,那里来自定义宏,不利于团 ...
“程序乱七八糟不标准”,,,这明显是人问题。。。人不行,不管用库和还是用自己的驱动,代码都是东一坨西一坨。 tzgok 发表于 2021-2-23 13:10
“程序乱七八糟不标准”,,,这明显是人问题。。。人不行,不管用库和还是用自己的驱动,代码都是东一坨 ...
再论IO,ST32 这种级别的属于消费微控制器,IO翻转差10指令有何大区别?你产品需要多快的响应速度?一般民用产品根本用不到10指令的时间差响应,除非是电机控制之类的需要低延迟的IO,那么ST有专门电机控制系列,用那种就行