STM32F1移植FreeRTOS,目录解析,编程规范(附源码)

本文详细介绍了FreeRTOS的官方文件目录结构,包括头文件、内存管理、数据类型、变量和函数命名规范,以及移植过程中的关键步骤,如配置文件和中断服务函数的设置。还提供了STM32F103移植示例和源码链接。
摘要由CSDN通过智能技术生成

目录

一、文件、目录结构

1、FreeRTOS官方文件目录结构

2、头文件

3、移植指南

二、数据类型

三、变量名前缀

四、函数名

五、宏命名

六、源码链接


一、文件、目录结构

1、FreeRTOS官方文件目录结构

以STM32F103移植FreeRTOS v9.0.0为例,官方源码文件目录结构为,FreeRTOS文件夹和FreeRTOS-Plus文件夹,其中FreeRTOS-Plus为FreeRTOS生态的东西,这里用不到,主要讲FreeRTOS文件夹。

  • Demo

    • 各内核及开发环境的工程文件...

    • CORTEX_STM32F103_Keil //我们用这个

    • ......

  • License

    • license.txt

  • Source(核心文件夹)

    • include (需要包含的文件)

    • portable (接口文件、对应开发工具选择移植)

      • MemMang(内存管理相关)(重要)(下面有四个内存管理等级)

        • 1、heap_1.c (最简单,不允许释放内存。)

        • 2、heap_2.c (允许释放内存,但不会合并相邻的空闲块)

        • 3、heap_3.c (简单包装了标准 malloc() 和 free(),以保证线程安全)

        • 4、heap_4.c (合并相邻的空闲块以避免碎片化。 包含绝对地址放置选项)

        • 5、heap_4.c (如同 heap_4,能够跨越多个不相邻内存区域的堆)

      • RVDS(接口文件)

        • port.c

        • portmacro.h

    • croutine.c (协程相关)(不怎么用)

    • event_groups.c (事件标志组相关)

    • list.c (列表)

    • queue.c (队列和队列项)

    • tasks.c (任务相关)

    • timers.c (软件定时器相关)

2、头文件

头文件说明
FreeRTOS.hAPI函数头文件,要先调用这个头文件再调用其他,本质根据配置是否定义其他函数
FreeRTOSConfig.hFreeRTOS配置文件
其他:list.h\queue.h...各功能的支持头文件

3、移植指南

  • 移植首先需要接口文件port.c/portmacro.h和内存管理文件:分别在FreeRTOS->Source->portable->RVDS->ARM_CM3->port.c中和FreeRTOS->Source->portable->MemMang->heap_4.c。

  • 然后移植功能相关核心代码:FreeRTOS->Source->(include文件夹&croutine.c&list.c&queue.c......)

  • 最后需要一个配置文件,"FreeRTOSConfig.h",可以自己创建,不过也可以在FreeRTOS官方Demo中复制一份。(Demo->CORTEX_STM32F103_Keil)

  • 编写三个中断服务函数的宏,FreeRTOS已经实现好了分别是

    • #define xPortPendSVHandler   PendSV_Handler(要注释掉it.c中的函数)

    • #define vPortSVCHandler     SVC_Handler (要注释掉it.c中的函数)

    • #define xPortSysTickHandler   SysTick_Handler(也可以在it.c中调用xPortSys...())

二、数据类型

FreeRTOS的类型定义在portmacro.h中:

  • TickType_t : FreeRTOSConfig.h中定义configUSE_16_BIT_TICKS时,TickType_t就是uint16_t,否则TickType_t就是uint32_t,

  • BaseType_t : 32位架构中,它就是uint32_t,BaseType_t通常用作简单的返回值的类型,还有逻辑值,比如 pdTRUE/pdFALSE

三、变量名前缀

  • 通常,一个变量的命名分为[类型前缀]+[含义]

前缀含义
cchar
sshort , uint16_t
llong , uint32_t
xBaseType_t,结构体,句柄类型
uunsigned
p指针
ucunsigned char , uint8_t
pcchar 指针

四、函数名

  • 函数的命名规则为:[返回值类型]+[在哪个文件]+[含义]

例:

函数名说明
vTaskDelay返回值类型:void,在Tasks.c中,功能延时
xQueueReceive返回值类型:BaseType_t,在queue.c中,功能删除
......

五、宏命名

  • 宏的名字是大写,可以添加小写前缀,表示宏在那个文件中定义。

宏前缀说明
port在portable.h/portmacro.h
task在task.h中
pd在projdefs.h中
config在FreeRTOSconfig.h中定义
err在projdefs.h中
  • 逻辑值的宏

pdTURE1
pdFALSE0
pdPASS1
pdFALL0

六、源码链接

1、FreeRTOSv9.0.0源码

链接:https://pan.baidu.com/s/1jzJH48YGuPM_fRaGNLobYQ?pwd=ucex 
提取码:ucex

2、STM32F103VET6移植Keil工程

链接:https://pan.baidu.com/s/1sJeodwzl0jCTIwJajhxQNw?pwd=1234 
提取码:1234

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小米和小米粥

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值