历史上的今天
今天是:2025年08月05日(星期二)
2019年08月05日 | 基于STM32从零写操作系统系列---使用官方固件库
2019-08-05 来源:eefocus
目的内容
使用官方固件库的好处就是方便,看着说明文档就可以使用。但是,从编译后的.bin文件大小看,一样的点亮LED灯,使用固件库产生的.bin文件大小差不多有6K,而上一章的串口+LED程序编译后的.bin文件就只有2K多。对于stm32F103zet6而言,flash大小512K,如果想要在这么点空间装个”有点意思”的操作系统,就需要尽量减少.bin文件的大小了。在实现的功能相同的情况下,用最少的指令数量显然更合理。在使用固件库时,编译的一些文件中,有部分函数功能是没有用到的,但他们也被链接到.bin文件中了。所以最终生成的.bin文件就比较大了。
还有一个问题就是,固件库用起来方便,但是想要完全掌握你的程序的来龙去脉,你还要必须认真去看固件库的源代码,花时间去了解固件库的结构和一些使用规范。所以,在以后的编写操作系统的过程中,固件库只是作为我的参考,而不会完全使用固件库。这样就可以以固件库为范例,去学习别人的一些编程思路,学习别人的一些良好的编程规范,学习C语言的一些高级用法。
分析
1.先来看看本次实验的项目文件结构

2.创建如上的目录结构后,就是从“STM32最新固件库v3.5”复制相关的头文件和.c文件。boot.s是自己编写汇编启动代码,test_led.c是自己编写的测试代码,其他的.h和.c文件都是复制固件库的。boot.s文件和上一章中的boot.s文件一样。
3.编写test_led.c

4.Makefile有所变动,主要是修改后子目录的Makefile更具有通用性,添加了如下一条代码。
![]()
这条代码用于查找当前目录下的.s和.c文件,然后文件名不变加上扩展名.o。
小结
这次使用固件库,只是为了了解一下固件库是如何实现的。为以后继续编写自己的操作系统添加一个源代码参考。
由于码云的限制,代码分享在百度网盘,链接如下,文件名:chapter8.zip
STM32最新固件库v3.5也可以在下面的网盘下载:
链接:https://pan.baidu.com/s/1DlzYMo8oZsnF9ammJuuZoQ
提取码:dc5h
史海拾趣
|
defun( gfe_HelloWorld ()prog( () mark = axlDBTransactionStart() axlControlRaise(\'options) HelloWorld_form_file = \"./HelloWorld.form\" _c ...… 查看全部问答> |
|
新兴的无线技术标准 随着人们对无线技术在过程工业中的应用兴趣持续增长,各种可用技术的数量也随之增加――要求为这些应用中的现场网络提供特定标准的愿望也增加了。 为过程工业而开发的无线标准目前有三个,分别是:WirelessHART(无线HART)、 ...… 查看全部问答> |
|
请问DC综合的乘法器是什么类型的?有必要再用verilog专门写一个乘法器吗? 大家好: 请问DC对于“*”综合出来的乘法器是什么类型的?有必要再用verilog专门写一个乘法器吗?现在我的工作时钟为20m左右,数据位数为32位的,需要乘法器在一个时 ...… 查看全部问答> |
|
在上一个文档中我给大家介绍了TI图形驱动库的结构,分为三层:显示驱动层,图形基元层,小工具层。其中显示驱动层是需要我们程序员自己补充的。现在我们来具体谈谈如果来补充和书写底层驱动函数。从ti的文档中我们可以看出,我们需要补充的就是tDis ...… 查看全部问答> |
|
各位兄弟大家好! 本人是学习单片机的新人,不仅是PIC,51单片机以前也没有接触过。 由于工作需要,从现在起需要学习PIC单片机,想听取各位兄弟的意见。 我的问题是汇编语言和C语言各自有什么特点,对于我这样的新手来 ...… 查看全部问答> |
|
STM32F103的USART1接收数据不一致,请香版主和各位兄弟帮忙 我使用英倍特的MCBSTM32开发板,用其USART1进行收发一串数据。 我现在的问题: 串口配置:波特率1200,1个起始位,8位数字,1个EVEN校验,一个停止位 STM32配置:波特率1200,1个起始位,9位数字,1个EVEN校验,一个停止位 串口发送数据: ...… 查看全部问答> |
|
#include <stdio.h> main() { int *Memory; Memory=(int *)malloc(100*sizeof(int)); .......... } 在编译是通过的。但连接是出现以下问题 Error[e16]: Segment DATA16_Z (size: 0x7d0 align: 0x1) is too long for segment definition ...… 查看全部问答> |




