OpenEdv-开源电子网

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

啥是固件?啥是固件库? 什么样的单片机配有固件

[复制链接]

25

主题

161

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
269
金钱
269
注册时间
2017-7-17
在线时间
149 小时
发表于 2017-8-26 18:45:50 | 显示全部楼层 |阅读模式
本帖最后由 王建峰 于 2017-8-26 19:14 编辑

   最近学习单片机,教程里说要更新固件,不然下载的程序会出现问题。不知道固件是啥玩意,好奇上网查了些资料,有如下理解。
   1.固件为硬件服务,与驱动一同完成软硬件的交互。
   2.固件提供了一种规范,目的使软件已这种规范操作硬件,方便调试。
   3..因为固件要兼容不同的操作系统,所以设计上并不是十分完美


  我是这样想的,如果是通过上位机控制某一硬件。上位机可以是任意操作系统,这样就有固件存在就比较好理解。但是在单片机(比如我用的STM32F407)控制的开发板,为什么会有固件?
51单片机怎么没有固件、固件库更新之类的问题?  什么样的单片机(或者说 可编程器件)配有固件。  返过来,固件到底什么东西?我怎么才能了解它?
  还有,固件库又是怎么一回事?跟固件有什么关系?


想了好久,网上资料也查看了些,还是没想明白。。。。谁能帮我梳理下,,先在此多谢了!!
不忘初心,方得始终!
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

9

主题

162

帖子

0

精华

高级会员

Rank: 4

积分
933
金钱
933
注册时间
2017-3-23
在线时间
255 小时
发表于 2017-8-29 17:00:47 | 显示全部楼层

回帖奖励 +50 金钱

固件把它理解成一个程序就行,比如某某驱动程序,那就是所有的单片机都有固件,也就是程序。换了一个名字而已。
回复 支持 反对

使用道具 举报

0

主题

125

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
221
金钱
221
注册时间
2017-5-26
在线时间
76 小时
发表于 2017-8-29 17:38:06 来自手机 | 显示全部楼层
顶,,,
回复 支持 反对

使用道具 举报

25

主题

161

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
269
金钱
269
注册时间
2017-7-17
在线时间
149 小时
 楼主| 发表于 2017-8-30 08:56:59 来自手机 | 显示全部楼层
未知1908 发表于 2017-8-29 17:00
固件把它理解成一个程序就行,比如某某驱动程序,那就是所有的单片机都有固件,也就是程序。换了一个名字而 ...

STM32固件库操作是库函数操作,那固件库是库函数,也是一堆代码。。这样理解没毛病吧!
回复 支持 反对

使用道具 举报

1

主题

101

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
254
金钱
254
注册时间
2017-5-10
在线时间
55 小时
发表于 2017-8-30 13:34:43 来自手机 | 显示全部楼层
一般就是指系统或者BootLoader之类的……一些库函数也这么叫。51没有是因为它实在太简单驱动就一个头文件……
回复 支持 反对

使用道具 举报

25

主题

161

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
269
金钱
269
注册时间
2017-7-17
在线时间
149 小时
 楼主| 发表于 2017-8-31 21:54:00 来自手机 | 显示全部楼层
cromarti 发表于 2017-8-30 13:34
一般就是指系统或者BootLoader之类的……一些库函数也这么叫。51没有是因为它实在太简单驱动就一个头文件… ...

好像明白了,两者都是代码,固件和固件库都是对硬件的一系列操作是吗?
回复 支持 反对

使用道具 举报

0

主题

28

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
319
金钱
319
注册时间
2017-6-19
在线时间
64 小时
发表于 2017-9-1 10:11:51 | 显示全部楼层
51单片机是8位单片机,太简单了直接操作寄存器就行。stm32是32位单片机,寄存器数量和复杂程度不是一个数量级。所以ST官方把对寄存器的操作封装成一个个函数。使用的时候调用相应的函数就行,这就是固件库。
回复 支持 反对

使用道具 举报

33

主题

984

帖子

1

精华

论坛元老

Rank: 8Rank: 8

积分
8017
金钱
8017
注册时间
2014-8-13
在线时间
1594 小时
发表于 2017-9-1 10:32:58 | 显示全部楼层
是MDK的固件库吧?  在IDE里下载的,IDE根据固件列出可编译目标(比如你不下载STM32F103ZET6的固件库,那么你在IDE里建立项目时,目标MCU不能选择STM32F103ZET6),编译器根据IDE的目标MUC和固件库生成对应的机器码(或许这里编译器不依赖固件库?  多半还是要依赖的,因为同样的代码,针对不同的目标MCU,其生成的目标代码也是不同的,比如某个MCU的中断向量是放在地址0X400000000的,而另外一些MCU的中断是放在0x0000000020的等等)。


当然,也有可能是上面的人说的Lib
回复 支持 反对

使用道具 举报

25

主题

161

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
269
金钱
269
注册时间
2017-7-17
在线时间
149 小时
 楼主| 发表于 2017-9-5 17:50:43 | 显示全部楼层
多谢各位好心人的帮忙解答!抱歉回答的比较晚,还请见谅。对于固件,有一下总结:固件本质上是一层代码,标注了一些特殊寄存器的位置状态信息;固件库是在寄存器的基础上进行的一系列的操作。在集成开发环境(IDE)中,有单片机型号的选择(就是楼上一位老兄说的MDK固件库吧),这样是通过软件实现,然后编译下载。还有一种,是通过直接向目标硬件写入(或更新)固件,例如DAP。
回复 支持 反对

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-5-18 07:55

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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