今天,我们就来分析一下上次生成的cubeide点灯工程的源码,看看跟我们拿来“逆向”的开发板例程源码有什么异同。
1. 工程视图下源码文件夹
上图中,binaries和includes文件夹我们不用去理它们,硬盘工程目录下并没有这两个文件夹,是在编译后产生的。另外3个文件夹是工程目录里实际上有的,其中debug文件夹是在debug工程配置下编译生成的,如果选择release工程配置并编译,则会生成一个release文件夹。
下面主要讲一下core和drivers文件夹以及工程根目录下的几个文件。
其中core文件夹是用户代码的存放地,包括源文件和头文件。当然,你想重新建个文件夹放自己的代码也是没问题的。core文件夹全打开后见下图。头文件和源文件是分开存放的,这跟硬盘上工程目录是一致的。
keil mdk就不一样了,不会根据硬盘上工程目录下的文件位置去自动生成工程目录,需要手动去添加,哪怕你后期往工程目录里添加文件,也照样要在keil里添加才出现在工程里。eclipse就智能多了,自动识别硬盘上工程目录里的文件,自动添加。
上图中inc目录里前两个头文件就不说了,stm32f7xx_hal_conf.h的作用是要不要包含各种外设的头文件,如果你手动添加了一个外设,就算把hal库里的外设驱动加进来了,也要在这个头文件里打开这个外设功能。
当然,也可以直接在用户代码里包含新添加的外设头文件,但是不推荐这样做。另外要注册自己的中断回调函数,也在这个头文件里开启相应的开关,这个回调函数的事情以后也可以说一说。
stm32f7xx_it.h里放的都是中断服务函数的申明,包括异常和中断。
源文件里stm32f7xx_hal_msp.c里放的是与mcu相关的初始化代码,msp也即mcu specific package,一般外设的msp代码都放在外设对应的源文件中,stm32f7xx_hal_msp.c基本上没什么东西。在cubemx生成代码时也可以选择把外设的msp代码都放在stm32f7xx_hal_msp.c中。
stm32f7xx_it.c里放的都是中断服务函数,建议用户中断都放在这里,然后在相应的中断函数里调用自己写的中断服务函数或是hal库提供的中断服务函数。
syscalls.c里是系统调用的一些函数,可以改写。例如想用printf函数通过串口发送消息,则可以把串口发送代码添加进_write()函数里。
sysmem.c里有一个用来分配系统堆空间的函数。我们设置工程的时候只需要确定堆的大小即可,默认堆大小是512字节,如果在用户代码中不用malloc分配内存就不用改,完全够用。
系统内存在运行时,内存空间是按下图这样分配的。其中newlib heap那一段就是堆空间。未使用的ram空间在bbs段与堆之间。
system_stm32f7xx.c里包含系统初始化,时钟初始化函数。其中系统初始化函数是系统启动后,进入main函数之前执行的。
startup文件夹下只有一个mcu对应的启动文件,以后可以具体分析一下这个启动文件,看一看系统启动后要执行哪些操作,然后才进入main函数。
drivers文件夹展开后如下图。
基本上没什么好说的,一个是arm提供的cmsis标准软件接口,另一个是必要的hal库函数。
2. 工程根目录下的文件分析
上图中,第一个ioc文件不必多说,cubemx生成的文件,后续可以改,重新生成代码。第二个launch文件是我们上次配置工程运行选项时生成的,要下载代码或调试代码都得有这个文件。如果用的是release工程配置,则会生成一个release.launch。
后边两个文件是链接文件,gcc里需要链接文件告诉编译器,各段要分别链接到什么地址上。其中flash.ld是我们常用的,生成的代码要下载到flash中运行。ram.ld会把代码链接进ram,调试的时候可以用,断电后内容就消失了。
更改链接文件的方法如下:
好了,今天就讲这么多,基本上cubeide工程里所有源文件的作用都讲到了,具体怎么实现的还需要自己去看源代码。接下来有时间讲讲启动代码。
中国移动联合中兴通讯等集团发布5G+工业互联网安全白皮书
NEC推出IMAPCAR2用于汽车辅助驾驶系统
iPhone电池门赔款到账 人均赔偿92.17美元(约人民币约660元)
国货崛起!素诺智能可视冲牙器C3 pro众筹火爆引用户追捧
何谓“小”基站?
STM32Cube CubeIDE工程里的程序结构
海思HI3519开发板介绍 Hi3519 V101+IMX274 4k高清输入
便携嵌入式系统电源设计方案
区块链技术已经从理论研究走向实际应用
温度循环试验箱使用注意事项
芯和半导体即将亮相电子元器件与技术大会
基于VRS51L3074单片机实现协议栈uIP的socket通信设计
摩根士丹利的分析师表示,苹果将成为医疗健康领域领导者
轨道交通行业电能质量分析及治理方案
华为全新推出BoostKit2.0充分发挥鲲鹏有效算力
一次性把手机充电到100%合不合适
SAR目标散射拓扑特性表征与识别应用
锂电池隔膜各项性能综述、详解各测试项目的原理、标准及方法
耐高温绝缘高导热0.6w/m.k聚酰亚胺PI薄膜
人形机器人是否会影响到人们的生活