[LiteOS移植]目标芯片STM32F1 分析与思考

举报
樊心昊 发表于 2020/07/28 11:43:20 2020/07/28
【摘要】 本篇讲述如何分析官方或者其他友商提供的工程文件,在此基础上写出自己的工程文件,这是一种分析的方法,只有掌握了这样的方法,你才能快速学习一个新的东西,会自己独立思考问题,不是所有项目都有很好的技术支持,大部分都是靠自己,甚至说明文档都很少,只能阅读别人的代码,从而知道其思想和内部原理。 由上至下整体分析拿到一份工程文件的第一件事不是直接去阅读其源码,如果直接去阅读源码可能会一头雾水,应该先分析...

本篇讲述如何分析官方或者其他友商提供的工程文件,在此基础上写出自己的工程文件,这是一种分析的方法,只有掌握了这样的方法,你才能快速学习一个新的东西,会自己独立思考问题,不是所有项目都有很好的技术支持,大部分都是靠自己,甚至说明文档都很少,只能阅读别人的代码,从而知道其思想和内部原理。

 

由上至下整体分析

拿到一份工程文件的第一件事不是直接去阅读其源码,如果直接去阅读源码可能会一头雾水,应该先分析其结构,在心中有个大的方向,再去阅读源码并更正心中的想法,这样才能做到最高效,在阅读的过程中还可以把觉得不好的地方记录下来,在自己后面开发得工程中加以改善。

我们这里以SDK/targets/STM32L431_BEAR工程文件为例,带领大家阅读和分析。

image.png

Demos:存放操作系统之上,用户逻辑代码。

GCC:存放Makefile文件、链接脚本、编译过程中间文件。

Hardware:存放平台特有硬件驱动代码(例如显示屏和各类拓展板)。

Inc:存放头文件。

OS_CONFIG:存放操作系统的配置文件。

Src:存放单片机的外设初始化文件及main.c文件。

uart_at:存放at使用的串口初始化和驱动代码文件。

.config:Kconfig生成的配置文件

.config_old:没使用到,可以忽略。

Iot_config.h:Kconfig生成的配置头文件(主要通过宏定义来使能一些组件)。

Kconfig:Kconfig读取该文件显示图形化配置选项。

 

       根据以上分析,我们首先要将通过STM32CubeMX生成的工程调整结构,尽量和上面相同,因为工程的编译是依赖Makefile来进行,Makefile可以使用官方案例工程中提供的Makefile在GCC目录中,其原理是根据目录来指定需要被编译的文件,所以我们将自己的工程结构调整的尽可能与上面相同,便于适配Makefile,减少工作量。

 

image.png

Demo目录中有多个目录,每一个目录对应一个用户例程,我们可以如法炮制,根据自己的项目需求在Demo目录中新建一个xxxx(需求名称)的目录,并在目录中新建一个xxxx.c源文件,修改user_demo.mk,在其中添加上我们这个工程目录中源文件的信息,后面才能选择编译。

image.png

GCC目录中存放多个链接脚本和Makefile文件,我们使用到的是Makefile、project.mk、os.ld这三个文件,重点修改project.mk和os.ld让其适配我们的工程目录和MCU型号。

image.png

Hardware目录中存放板载外设的驱动,例如板子上特有的LCD显示屏、各种拓展板卡上的传感器,例如温度、湿度、光照传感器的驱动代码,我们可以移除没有用到的驱动代码,添加上自己开发板特有的传感器驱动,供用户代码调用。

image.png

Inc目录存放单片机上各类外设的驱动代码的头文件,我们可以移除没有使用到的文件,添加上用到的单片机外设的驱动头文件,直接从STM32CubeMX生成的Makefile工程中的Inc目录中复制过来即可。

image.png

OS_CONFIG目录中的文件用于控制LiteOS和调试信息的输出,我们可以根据需求,进行一些修改,例如通过target_config.h文件设置最大支持的信号量个数,是否采用硬件接管机制等等,一般不用设置,保持默认即可。

image.png

Src目录中存放单片机上各类外设的驱动代码以及main函数的入口文件main.c,该文件直接使用即可,可以从STM32CubeMX生成的Makefile工程中的Src目录中复制一些用到的单片机外设驱动文件到该目录中,移除一些没有用到的文件。

image.png

uart_at目录中存放发送AT指令控制外部支持AT指令的模块的串口驱动代码,包括串口初始化、实现一个数据结构,用于保存接收到的数据,供用户代码读取等。

image.png

其余文件均不用修改,.config和iot_config.h文件由Kconfig根据SDK配置自动生成。

下一节开始调整工程结构。



【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。