完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
前期准备
首先需要准备移植的相关华大MCU外设固件库以及FreeRTOS
1. 为了方便移植,直接利用华大官方固件库的GPIO输出的MDK例程工程进行移植,找到华大固件库的GPIO例程MDK工程,贴图如下 2. 打开华大例程的MDK工程,贴图是代码目录结构: common目录是系统启动汇编代码、中断服务函数代码、以及系统初始化相关代码 source是用户代码目录,存放例程的main.c driver是华大官方提供的外设库函数目录 3. 打开FreeRTOS的内核源码,贴图如下: 图中Demo目录是FreeRTOS官方提供的一些处理器移植例子,当然是没有HC32F003,否则我们也就不用干了;License目录是一些官方license文件;Source则是内核源码,因此需要该部分,copy该部分到华大固件库的目录下,同时为了更好理解目录含义,把目录重命名为FreeRTOS_Source: 4、在MDK工程中,新建group FreeRTOS并添加相关内核源码,贴图如下: 添加平台无关内核源码部分: 添加平台强相关的部分: 这个port.c文件非常重要,是内核任务调度相关的实现部分,有很多采用汇编语言实现的,因此不同的硬件CPU架构之间差异较大。而HC32F003是ARM-CM0+的内核,ARM-CM0与CM0+汇编没有差异,因此我们选择ARM-CM0即可 添加内存管理的实现代码: Heap1-Heap4有一定的差异,这里不展开,采用Heap4.c作为内存堆栈管理 最后添加相应的头文件包含目录: 开始编译,解决编译错误 提示找不到FreeRTOSConfig.h,此文件是内核配置,该文件通过定义不同的宏对内核进行裁剪。为了图方便,采用了FreeRTOS的官方的STM32F103 DEMO工程的配置文件,将其copy至华大例程目录下 再次编译成功。 这里提前说一句,此处的编译成功并不代表移植成功了。打开port.c 这里定义的三个函数是内核定义三个中断函数,分别用来进行任务切换和操作系统内核的定时心跳使用,而HC32F003的汇编启动文件中断向量并非这三个函数,因此我们需要将启动文件的中断服务函数改为FreeRTOS定义的这三个函数 改为FreeRTOS内核定义的中断服务函数 再次编译通过! 编写定时任务,测试移植 任务比较简单,start_task用于创建task1_task, 而task1_task是定时任务,闪烁LED。 主函数初始化完成后,开始创建任务以及任务调度。 开始编译,报错,内存不足 发现freeRTOSConfig文件的heap大小配置太大,进行修改,并同时修改CPU时钟频率 修改后: 上板测试 LED灯每1s闪烁一次,移植成功。 |
|
|
|
只有小组成员才能发言,加入小组>>
调试STM32H750的FMC总线读写PSRAM遇到的问题求解?
1758 浏览 1 评论
X-NUCLEO-IHM08M1板文档中输出电流为15Arms,15Arms是怎么得出来的呢?
1613 浏览 1 评论
1055 浏览 2 评论
STM32F030F4 HSI时钟温度测试过不去是怎么回事?
721 浏览 2 评论
ST25R3916能否对ISO15693的标签芯片进行分区域写密码?
1670 浏览 2 评论
1932浏览 9评论
STM32仿真器是选择ST-LINK还是选择J-LINK?各有什么优势啊?
722浏览 4评论
STM32F0_TIM2输出pwm2后OLED变暗或者系统重启是怎么回事?
564浏览 3评论
590浏览 3评论
stm32cubemx生成mdk-arm v4项目文件无法打开是什么原因导致的?
548浏览 3评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-20 09:00 , Processed in 2.801115 second(s), Total 48, Slave 42 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号