当前位置: 首页 > news >正文

从BSP到DFP和RTOS---专业的嵌入式开发工具Keil备忘

0、新的三个小板不同的芯片 + 一个下载器。

----自下而上依次是:GD32F303RCT6开发板。ST-LINK-v2下载器。STM32103C8T6小板。CH32F103C8T6小板。

----三个小板均为ARM的Cortext-M系列内核的MCU。均没有USB2UART/USB2TTL芯片和电路。

----使用专业的开发工具(之一)Keil。使用专业的下载器(之一)ST-Link-v2。ST-Link-V2本身提供的针脚是10pin,既可以支持JTAG也可以支持SWD。

1、ST-Link-v2和开发板JTAG/SWD信号的连接及驱动。

----ST-Link-v2下载器,是4-pin的SWD接口。STM32和CH32的小板,均为4-pin的SWD接口。按照信号名对应连接即可。

----GD32的小板,是20-pin的JTAG/SWD信号针脚,需要按照上图右边SWD的4个信号名进行对应连接。

----ST-Link-v2作为一个USB Device Class,其驱动在Keil安装以后的软件包目录中就有,可以不用单独找,尤其不要到野的地方下载。从这里也可以看出Keil对ST-Link-v2的良好支持。

----近似地在Keil软件目录(下图中是D:\Keil_v5\ARM)还有其它一些常见的下载器目录,包括。

----JLink,位于SEGGER目录下。这个Segger不仅提供最"高贵"的JLink下载器,还是IAR软件的厂商。IAR和Keil软件几乎可以说是商业嵌入式开发平台的TOP2

----ULink,Nulink等。

2、Keil的使用从查看ST-Link-v2上挂载的设备开始。

----使用Keil的【Options for Target】配置对话框中,选择Use ST-Link Debugger,并使用Settings按钮进入到次级的对话框中,在次级对话框中Port中可以(建议!)先选JTAG然后再选SW,这样可以看到右上角通过SWD接口协议所发现的设备。

----在打开【Options for Target】配置对话框之前,需要使用Keil新建一个项目或者打开一个项目。如果没有打开项目,那么这个【Options for Target】的菜单项以及对应的工具按钮,均为灰色无效状态。

----三个开发板,需要使用现有的开发包示例中的Keil工程,作为模板,再行修改。

----GD32的官方例程:https://gitcode.com/open-source-toolkit/57a25 下的。

----CH32的官方例程:https://www.wch.cn/downloads/CH32F103EVT_ZIP.html 下的。

----STM32的官方例程:通过某东某宝卖开发小板的店里的讲解看到后照抄即可。此外在安装STM32的必要的Pack以后这些Pack里面也有STM32的例程,在如下目录下:

D:\Keil_v5\Packs\Keil\STM32F1xx_DFP\2.4.1\Boards\Keil\MCBSTM32E\Blinky。

----三颗不同厂商的芯片,需要在Keil下安装各厂商所提供的开发包,这就需要使用到Keil的Pack Installer了!这个Pack Installer和Arduino的Board Management类似,也和Linux的apt/yu类似,或者Python的pip类似,或者NodeJS/Electron的npm类似,都是包管理器!

----这个Pack Installer所安装的包以.pack为文件后缀,包含如下几种代表性的包分类:

----DFP(Device Family Pack, 设备家族包, 芯片家族包)

----BSP(Board Support Package, 板级支持包)。

----RTOS(Real-time OS包)。

----这不是一个严格的分类,而是在嵌入式开发中需要理解的重要概念。TBD。
 

3、STM32的项目:

----来自B站江科大的STM教程。

----要点1:有一个startup_stm32f10x_md.s的汇编代码,是整个嵌入式系统软件运行的总入口。

----要点2:main.c的代码是寄存器风格。

 4、CH32的项目:

----基于CH32厂商官网的例程进行的修改。

----要点1:有一个startup_ch32f10x.s的汇编代码,是整个嵌入式系统软件运行的总入口。

----要点2:main.c里的代码是某种高级语言风格。

5、GD32的项目:

----基于GD32厂商例程进行的修改。

----要点1:有一个startup_gd32f30x_hd.s的汇编代码,是整个嵌入式系统软件运行的总入口。

----要点2:main.c里的代码是某种高级语言风格。

----可以看出上面三个示例代码风格,用户代码各不相同,但是startXXX.s的套路却高度一致。

6、Pack Install所安装的DFP(Device Family Pack)BSP(Board Support Pack)

----如图所示,基本相近的目录结构,Board、Device、Flash、SVD等几个目录。

----以GigaDevice为例打开看一下Device目录!

$ ll GigaDevice/GD32F30x_DFP/2.2.1/Device/
total 0
drwxr-xr-x 1 Chipcamp 197609 0 Oct 27 12:42 Firmware/
drwxr-xr-x 1 Chipcamp 197609 0 Oct 27 12:42 Include/
drwxr-xr-x 1 Chipcamp 197609 0 Oct 27 12:42 Source/
drwxr-xr-x 1 Chipcamp 197609 0 Oct 27 12:42 Template/
drwxr-xr-x 1 Chipcamp 197609 0 Oct 27 12:42 Utilities/

$ ll GigaDevice/GD32F30x_DFP/2.2.1/Device/Include/
total 32
-r--r--r-- 1 Chipcamp 197609 27432 Oct 27 12:42 gd32f30x.h
-r--r--r-- 1 Chipcamp 197609  2428 Oct 27 12:42 system_gd32f30x.h

$ ll GigaDevice/GD32F30x_DFP/2.2.1/Device/Source/
total 32
drwxr-xr-x 1 Chipcamp 197609     0 Oct 27 12:42 ARM/
-r--r--r-- 1 Chipcamp 197609 31206 Oct 27 12:42 system_gd32f30x.c

$ ll GigaDevice/GD32F30x_DFP/2.2.1/Device/Source/ARM/
total 64
-r--r--r-- 1 Chipcamp 197609 21345 Oct 27 12:42 startup_gd32f30x_cl.s
-r--r--r-- 1 Chipcamp 197609 19527 Oct 27 12:42 startup_gd32f30x_hd.s
-r--r--r-- 1 Chipcamp 197609 19729 Oct 27 12:42 startup_gd32f30x_xd.s

$ ll GigaDevice/GD32F30x_DFP/2.2.1/Device/Firmware/Peripherals/
total 8
drwxr-xr-x 1 xjrco 197609 0 Oct 27 12:42 inc/
drwxr-xr-x 1 xjrco 197609 0 Oct 27 12:42 src/

----可以看出整个嵌入式系统软件运行的总入口start_xxx.s文件。

----基本的头文件gd32f30x.h以及system_gd32f30x.h,以及相应的配套的.c文件。

----外设的inc和src目录,同样也是配套的.h包含文件和.c文件。

----这些文件构成了【嵌入式编程】的所有的基础!换句话说,嵌入式编程可以&必须【通透】地看到所有源代码,从系统软件运行的总入口start_xxx.s文件,到系统可供使用的最底层库函数(包含了硬件资源如内存地址分配,以及外设的内存地址,以及相关的寄存器资源),再到用户(芯片视的软件开发者)的程序。所谓裸机开发大抵就是这个意思了,而嵌入式开发大概就是裸机开发的最好机会,像x86等通用PC/Server上的软件开发,基本上把底层硬件相关的和上层软件开发的区分开来了,能接触最底层硬件交互代码的机会极少。

----所谓嵌入式操作系统,就是基于这些底层库函数(包含了DFP和BSP所提供的硬件资源如内存地址分配,以及外设的内存地址,以及相关的寄存器资源)构建多线程的支持,并将其中的一个线程(比如说线程0)作为系统资源管理的入口----这个资源管理的入口包括CPU资源,内存资源,外存和文件系统,CPU资源又包括线程本身的管理和调度(被thread0所协调和调度),这些是作为嵌入式实时操作系统的运行态行为特征,而嵌入式实时操作系统还会为用户(开发者)的应用开发提供相应的API,不再只是底层DFP和DSP所提供的非常原始的API。

----关于嵌入式系统软件运行的总入口start_xxx.s文件,非常有意思的问题,TBD。

----关于嵌入式系统的DFP以及BSP的概念和实践内涵,非常有意思的问题,TBD。

----关于嵌入式实时操作系统(RTOS)的概念和实践内涵,非常有意思的问题,TBD。

----关于嵌入式开发的其它更多的专业厂商工具及对比(IAR and more),TBD。

<<<<<<<<本文完>>>>>>>>

摘要:本文介绍了三款基于ARM Cortex-M内核的MCU开发板(GD32、STM32、CH32)的开发环境搭建过程。重点讲解了ST-Link-v2下载器的连接方法、Keil开发工具的配置使用以及Pack Installer包管理器的应用。通过分析三个不同厂商芯片的项目结构,揭示了嵌入式开发中设备家族包(DFP)和板级支持包(BSP)的核心作用。文章最后还探讨了嵌入式实时操作系统(RTOS)的构建原理,指出从启动文件(startup.s)到硬件抽象层的完整开发链条是嵌入式编程的重要特征。

http://www.dtcms.com/a/550619.html

相关文章:

  • 【SpringBoot从初学者到专家的成长25】认识SpringBoot中的Spring Expression Language (SpEL)
  • IntelliJ IDEA配置Tomcat教程
  • 北京做网站建设的公司排名网页qq登陆保护在哪里
  • 广东省网站集约化建设做外贸如何建立网站
  • Rust 中的 if let 与 while let 语法糖:简化模式匹配的优雅工具
  • 基于GBR原理的叠腮技术生物学基础
  • 网站备案找哪个部门制作一个网站能多少钱
  • 汕头站扩建进展成都开发小程序的公司
  • 保健品 东莞网站建设欧米茄表官方官网
  • 郑州网站建设彳汉狮网络在线制图网
  • Rust Vec 的内存布局与扩容策略:从底层实现到性能优化
  • Hive 分区表变更字段长度不生效
  • 成都企业网站怎么做广东网络推广项目
  • 沈阳网站建设公司怎么样服装店的营销方法
  • 网站建设网络科技公司加盟水区建设局网站
  • 【企业SRE/DevOps向的精通Linux课程培训课程】第 18 天:Web 服务器(Apache、Nginx、反向代理)
  • 电商网站免费设计有关网站建设新闻资讯
  • 常用链地址 区块链常用浏览器地址
  • 手机网站推荐哪些提升关键词优化排名软件
  • 东莞网站建设 烤活鱼三门峡网站建设推广
  • csapp实验一:datalab
  • 两个不同git仓库,如何合并1个git仓库的提交到另1个仓库?
  • 南通网站建设top公司邮箱怎么申请的
  • 网站建设 数据上传 查询歌曲网站源码
  • Kubernetes 常见问题全解析
  • 网站建设合同有哪些杭州小程序开发
  • C++ 单调队列
  • 湖南省建设工程造价管理总站微网站是官网的手机站
  • 上证50期权的到期日期是什么时候?
  • 网站开发看谁的教程成都企业模板网站开发