初识FreeRTOS系统的移植

官方教程

1.下载 FreeRTOS 源文件

下载连接   托管平台下载链接         建议 下载LTS版本(长期支持版)

解压后得到以下文件:

1.在自己的工程里创建一个freertos文件夹里面在创建src        inc        port这三个文件夹。

2.将.\FreeRTOSv10.2.1\FreeRTOS\Source下的.c文件复制到src文件夹。

3.将.\FreeRTOSv10.2.1\FreeRTOS\Source\portable\MemMang下的heap.c文件复制到port文件夹。

4.将.\FreeRTOSv10.2.1\FreeRTOS\Source\portable\RVDS\ARM_CM3下的文件复制到port文件夹。

5.将.\FreeRTOSv10.2.1\FreeRTOS\Source\include下的所有.h文件复制到inc文件夹。

6.将.\FreeRTOSv10.2.1\FreeRTOS\Demo\CORTEX_STM32F103_Keil下的FreeRTOSConfig.h复制到inc文件夹。

2.打开keil5添加工程

1. keil5里创建类似的目录结构

将复制的文件添加到工程里面。(跟创建工程一样)

      

  

注意: port只添加heap_4.c,src里stream_buffer.c不添加,inc里都是.文件可以不添加,只包含路径就行。

  2.包含.h文件路径

 3.完成

        此时不需要任何修改,编译也不会报错。

4.裁剪操作系统

        也就是将需要的功能打开,不需要的功能关闭,通过配置FreeRTOSConfig.h来完成(目录1.6移植的那个文件)官方修改教程

        可以参考以下配置内容,复制到 FreeRTOSConfig.h文件的endif之前就可以。

#define configUSE_TIME_SLICING 1 //使能时间片调度(默认式使能的)
#define configUSE_PORT_OPTIMISED_TASK_SELECTION 1 //硬件计算前导零指令,如果所使用的, MCU 没有这些硬件指令的话此宏应该设置为 0
#define configUSE_TICKLESS_IDLE 0 //置 1:使能低功耗 tickless 模式;置 0:保持系统节拍(tick)中断一直运行
#define configUSE_QUEUE_SETS 1 //启用队列
#define configUSE_TASK_NOTIFICATIONS 1 //开启任务通知功能,默认开启
#define configUSE_MUTEXES 1 //使用互斥信号量
#define configUSE_RECURSIVE_MUTEXES 1 //使用递归互斥信号量
#define configUSE_COUNTING_SEMAPHORES 1 //为 1 时使用计数信号量
#define configQUEUE_REGISTRY_SIZE 10 //设置可以注册的信号量和消息队列个数
#define configUSE_APPLICATION_TASK_TAG 0
#define configSUPPORT_DYNAMIC_ALLOCATION 1 //支持动态内存申请
#define configUSE_MALLOC_FAILED_HOOK 0 //使用内存申请失败钩子函数
#define configCHECK_FOR_STACK_OVERFLOW 0// 大于 0 时启用堆栈溢出检测功能,如果使用此功能用户必须提供一个栈溢出钩子函数如果使用的话此值可以为 1 或者 2,因为有两种栈溢出检测方法
#define configGENERATE_RUN_TIME_STATS 0 //启用运行时间统计功能
#define configUSE_STATS_FORMATTING_FUNCTIONS 1
#define configUSE_TIMERS 1 //启用软件定时器
#define configTIMER_TASK_PRIORITY (configMAX_PRIORITIES-1) //软件定时器优先级
#define configTIMER_QUEUE_LENGTH 10 //软件定时器队列长度
#define configTIMER_TASK_STACK_DEPTH (configMINIMAL_STACK_SIZE*2) //软件定时器任务堆栈大小
 
//可选函数配置选项
#define INCLUDE_xTaskGetSchedulerState 1
#define INCLUDE_eTaskGetState 1
#define INCLUDE_xTimerPendFunctionCall 1
 
//中断服务函数 也可以修改起始文件
#define vPortSVCHandler SVC_Handler
#define xPortPendSVHandler PendSV_Handler
#define xPortSysTickHandler SysTick_Handler

此时编译会报三个错:

 将以上三个函数在stm32f10x_it.c里的定义注释掉。

        思考:官方为什么要使用这三个中断函数,在哪里定义了?

        答:在port.c里定义了这三个函数,任务的挂起,任务的上下文切换,系统的时间基准需要依赖于这三个函数。

        此时编译就不会报错了。由于我将钩子函数都关闭了,不需要再添加任何代码就移植完成了。

        但在实际开发中,需要使用很多钩子函数,就需要将钩子函数打开,并写钩子函数的定义。编译才能通过。

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值