# HC32F072 + FreeRTOS 详细教程 #
## 记录并分享移植过程 ##
*背景原因:STM32太贵了,而且CubeMx太强了,移植难度0。
做一个小众单片机的移植,后续其它单片机移植也可参考类似过程。*
**环境说明:**
开发IDE:MDK-ARM Plus ver 5.34
MCU:[国产华大单片机 HC32F072](https://www.hdsc.com.cn/Category83-1448 "官方资料") ,主频 48Mhz ,Core M0+内核 ,RAM 16KB ,ROM 128KB
RTOS:FreeRTOS V10.4.3
***移植分为以下几个步骤***
**一、准备**
**二、FreeRTOS源码**
**三、添加工程**
**四、裁剪**
**五、使用**
## 一、准备 ##
1. 首先准备一个HC32F072的最小系统,可以参考官方点灯Demo。为了发挥最大性能,将主频修改至最大48Mhz。此处不做详细教程,也可参考已修改好的branch-[noOS](https://github.com/zhou-daxia/HC32F072-FreeRTOS/tree/noOS "github")
2. 下载FreeRTOS源代码,官网:[https://www.freertos.org/a00104.html](https://www.freertos.org/a00104.html)
3. 选择稳定版本下载:FreeRTOS LTS Release 202012.01 并解压
## 二、FreeRTOS源码 ##
1. 先在最小系统的source目录下新建一个FreeRTOS目录用来存放RTOS源码! ![avatar](/Doc/1.png)
2. 拷贝FreeRTOS源码解压后的路径下\FreeRTOS-LTS\FreeRTOS\FreeRTOS-Kernel 的所有内容到本地的source/FreeRTOS目录下。 ![avatar](/Doc/2.png)
3. 在source/FreeRTOS目录下再新建一个一个source目录,将source/FreeRTOS目录下的所有.c文件剪切到source/FreeRTOS/source目录下。![avatar](/Doc/3.png) ![avatar](/Doc/4.png)
*现在FreeRTOS源码被我们分成了三个目录,分别是①include目录;②portable目录;③source目录
这里 **分析一下** FreeRTOS源码结构,①和③包含的是FreeRTOS核心功能源文件及头文件 .c和.h,这两部分的文件试用于各种编译器和处理器,是通用的,**基本不需要修改**,②为**需要移植修改**的目录,这与编译器和所使用的CPU有关,属于RTOS硬件接口层。*
*再分析一下②portable目录* ![avatar](/Doc/5.jpg)
*keil就是我们就是我们使用的编译器,其实keil里面的内容跟RVDS里面的内容一样,所以我们只需要分析RVDS文件夹里面的内容即可。*
*RVDS里面包含了各种处理器相关的文件夹,与CPU内核相关。FreeRTOS是一个软件,单片机是一个硬件,FreeRTOS要想运行在一个单片机上面,它们就必须关联在一起。*
*MemMang文件夹下存放的是跟内存管理相关的源文件,一般情况我们都选用heap4方式。*
## 三、添加工程 ##
1. 打开keil
2. Manage -> project Items -> Groups 添加三个工程目录,分别为FreeRTOS/src ;FreeRTOS/port ;FreeRTOS/config 点击OK。![avatar](/Doc/6.png)
3. 在 Project栏中 选中FreeRTOS/src,右击->Add Existing File to Group ... .添加source\FreeRTO\source目录下的所有.c文件
4. 在 Project栏中 选中FreeRTOS/port,右击->Add Existing File to Group ... .添加source\FreeRTOS\portable\RVDS\**ARM_CM0** 目录下的所有.c文件。这里因为MCU是core M0内核,其它MCU选中对应内核目录
5. 在 Project栏中 选中FreeRTOS/port,右击->Add Existing File to Group ... .添加source\FreeRTOS\portable\MemMang 目录下的heap_4.c文件 ![avatar](/Doc/7.png)
6. 添加头文件路径 在options -> c/c++ -> include paths -> ...
.\source\FreeRTOS\include
.\source\FreeRTOS\portable\MemMang
.\source\FreeRTOS\portable\RVDS\ARM_CM0
![avatar](/Doc/8.png)
## 四、裁剪 ##
FreeRTOS的裁剪主要依靠FreeRTOSConfig.h中的宏定义去完成,需要什么功能就打开对应的宏就可以了。
现在我们需要一个FreeRTOSConfig.h文件。但在源码FreeRTOS-Kernel目录下没有提供config文件。
有两个途径获得
1. 再去FreeRTOS官网下载常规版本的源码,在demo目录下找到对应内核目录下的demo(可能是其它MCU,不要紧)拷贝一个FreeRTOSConfig.h文件到本地source\FreeRTOS\include目录内
2. 我提供里一个带注释版本的FreeRTOSConfig.h文件,复制到本地source\FreeRTOS\include目录
内容如下:
```c
#ifndef FREERTOS_CONFIG_H
#define FREERTOS_CONFIG_H
#define configUSE_PREEMPTION 1//抢占式调度器开关
#define configUSE_IDLE_HOOK 0//空闲任务钩子函数
#define configUSE_TICK_HOOK 0//时间片钩子函数
#define configCPU_CLOCK_HZ ( SystemCoreClock )//CPU主频
#define configTICK_RATE_HZ ( ( TickType_t ) 1000 )//RTOS节拍频率 即1秒的中断次数
#define configMAX_PRIORITIES ( 5 )//可使用的最大优先级
#define configMINIMAL_STACK_SIZE ( ( unsigned short ) 60 )//定义空闲任务使用的堆栈大小
#define configTOTAL_HEAP_SIZE ( ( size_t ) ( 8*1024 ) )//RTOS内核总计可用的有效的RAM大小
#define configMAX_TASK_NAME_LEN ( 12 )//任务名最大长度
#define configUSE_TRACE_FACILITY 0//是否启动可视化跟踪调试
#define configUSE_16_BIT_TICKS 0//系统节拍计数器的变量类型 0为32位 1为16为
#define configIDLE_SHOULD_YIELD 1//空闲任务放弃CPU使用权给其他同优先级的用户任务
#define configUSE_MUTEXES 1//是否使用互斥信号量
#define configQUEUE_REGISTRY_SIZE 8//设置可以注册的信号量和消息队列个数
#define configCHECK_FOR_STACK_OVERFLOW 0//堆栈溢出检查 大于0有效
#define configUSE_RECURSIVE_MUTEXES 1//是否使用递归互斥信号量
#define configUSE_MALLOC_FAILED_HOOK 0//内存申请失败钩子函数
#define configUSE_APPLICATION_TASK_TAG 0//为任务分配标签
#define configUSE_COUNTING_SEMAPHORES 1//是否使用计数信号量
#define configGENERATE_RUN_TIME_STATS 0//是否启用运行时间统计功能
/* Co-routine definitions. */
#define configUSE_CO_ROUTINES 0//启用协程,启用协程以后必须添加文件croutine.c
#define configMAX_CO_ROUTINE_PRIORITIES ( 2 )//协程的有效优先级数目
/* Software timer definitions. */
#define configUSE_TIMERS 0//是否启用软件定时器
#define configTIMER_TASK_PRIORITY ( 2 )//软件定时器优先级
#define configTIMER_QUEUE_LENGTH ( 5 )//软件定时器队列长度
#define configTIMER_TASK_STACK_DEPTH ( 80 )//软件定时器任务堆栈大小
/* Set the following definitions to 1 to include the API function, or zero
to exclude the API function. *///是否启用RTOS API函数
#define INCLUDE_vTaskPrioritySet 1
#define INCLUDE_uxTaskPriorityGet 1
#define INCLUDE_vTaskDelete 1
#define INCLUDE_vTaskCleanUpResources 1
#define INCLUDE_vTaskSuspend 1
#define INCLUDE_vTaskDelayUntil 1
#define INCLUDE_vTaskDelay 1
/* Normal assert() semantics without relying on the provision of an assert.h
header file. */
#define configASSERT( x ) if( ( x ) == 0 ) { taskDISABLE_INTERRUPTS(); for( ;; ); }
/* Definitions that map the FreeRTOS port interrupt handlers to their CMSIS
standard names - or at least those used in the unmodified vector table. */
#define vPortSVCHandler SVC_Handler
#define xPortPendSVHandler PendSV_Handler
#define xPortSysTickHandler SysTick_Handler
#endif /* FREERTOS_CONFIG_H */
```
3. 为了方便修改 在 Project栏中 选中FreeRTOS/config,右击->Add Existing File to Group ... .添加source\FreeRTO\include目录下的FreeRTOSConfig.h
4. 为了将应用层代码和系统层关联在一起,需要引用一下对方的头文件
在main.c中�
没有合适的资源?快使用搜索试试~ 我知道了~
华大单片机移植FreeRTOS V10.4.3.zip
共161个文件
h:70个
c:57个
png:13个
需积分: 5 0 下载量 37 浏览量
2024-04-02
17:07:10
上传
评论
收藏 1.96MB ZIP 举报
温馨提示
华大单片机移植FreeRTOS V10.4.3
资源推荐
资源详情
资源评论
收起资源包目录
华大单片机移植FreeRTOS V10.4.3.zip (161个子文件)
makeclean.bat 372B
cmd.bat 88B
tasks.c 215KB
queue.c 118KB
stream_buffer.c 51KB
adt.c 50KB
timers.c 50KB
bt.c 48KB
timer3.c 43KB
port.c 39KB
port.c 31KB
event_groups.c 30KB
port.c 30KB
port.c 29KB
sysctrl.c 25KB
dmac.c 23KB
port.c 21KB
flash.c 21KB
heap_5.c 21KB
gpio.c 20KB
can.c 19KB
pca.c 19KB
heap_4.c 18KB
port.c 18KB
crc.c 16KB
interrupts_hc32f072.c 16KB
croutine.c 15KB
adc.c 15KB
lpuart.c 14KB
dac.c 13KB
uart.c 13KB
heap_2.c 12KB
i2s.c 12KB
spi.c 11KB
vc.c 11KB
port.c 10KB
list.c 9KB
trim.c 8KB
i2c.c 8KB
opa.c 8KB
ddl.c 7KB
aes.c 7KB
trng.c 7KB
reset.c 7KB
system_hc32f072.c 7KB
lvd.c 6KB
wdt.c 6KB
hdiv.c 6KB
ram.c 6KB
bgr.c 5KB
heap_1.c 5KB
lpm.c 5KB
debug.c 5KB
heap_3.c 3KB
dev_clk.c 3KB
main.c 1KB
app_Task.c 1KB
dev_gpio.c 997B
app_Led.c 910B
.gitignore 318B
HC32F072.h 340KB
task.h 133KB
queue.h 64KB
timers.h 61KB
semphr.h 47KB
FreeRTOS.h 45KB
adt.h 38KB
stream_buffer.h 38KB
message_buffer.h 37KB
timer3.h 35KB
bt.h 35KB
event_groups.h 31KB
croutine.h 27KB
sysctrl.h 23KB
can.h 22KB
adc.h 22KB
gpio.h 20KB
list.h 19KB
portmacro.h 18KB
dmac.h 17KB
mpu_prototypes.h 17KB
vc.h 15KB
atomic.h 13KB
lpuart.h 11KB
mpu_wrappers.h 11KB
i2s.h 11KB
uart.h 10KB
pca.h 10KB
portmacro.h 9KB
portmacro.h 9KB
portmacro.h 9KB
dac.h 9KB
portable.h 9KB
lvd.h 9KB
spi.h 9KB
stack_macros.h 8KB
board_evbhc32lf07x.h 8KB
interrupts_hc32f072.h 7KB
deprecated_definitions.h 7KB
ddl.h 7KB
共 161 条
- 1
- 2
资源评论
生瓜蛋子
- 粉丝: 3798
- 资源: 4401
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功