打印
[AT32F407]

FreeRTOS移植步骤

[复制链接]
1134|1
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
本帖最后由 小北爱编程 于 2022-4-27 15:33 编辑

#申请原创#
FreeRTOS移植步骤
1、源码获取
    去官网下载FreeRTOS最新的版本,官网地址:www.freertos.org
2、准备基础工程
    准备一个基础工程,用于FreeRTOS移植。
3、向工程中添加相应文件文件
    在基础工程中新建一个名为 FreeRTOS 的文件夹, 如图 1 所示:
1 新建 FreeRTOS 文件夹
    FreeRTOSv10.3.1\FreeRTOS\Source中的文件添加到该文件夹中,如图2所示:
2 添加 FreeRTOS 源码
    我们只需要留下portable 文件夹下的keil MemMang RVDS这三个文件夹, 其他的都可以删除掉(此处针对的为KEIL移植)。
4、向工程分组中添加相应的文件
    打开基础工程,新建分组 FreeRTOS_CORE FreeRTOS_PORTABLE,然后向这两个分组中添加文件,如图 3 所示:
3 添加文件
    分组 FreeRTOS_CORE 中的文件在新建的FreeRTOS文件下就能看到,添加过程不再细说。
    FreeRTOS_PORTABLE 分组中的 port.c heap_4.c的来源则是本操作系统系统的移植关键。port.c 是RVDS 文件夹下的文件,根据所移植的CPU的内核选择相对应的port.c文件,RVDS文件夹内容如图4所示:
4 RVDS文件夹内容
    可以看到不同的内核对应不同的文件,选择自己所需要的内核进行添加port.c文件。
    heap_4.c MemMang 文件夹中的,前面说了 MemMang 是跟内存管理相关的,里面有 5 c 文件: heap_1.c heap_2.c heap_3.c heap_4.c heap_5.c 5 c 文件是五种不同的内存管理方法,此处选择heap_4.c文件。
5、添加相应的头文件路径
    添加完 FreeRTOS 源码中的 C 文件以后还要添加 FreeRTOS 源码的头文件路径,具体过程此处不再细说。
6、添加FreeRTOSConfig.h文件
   此时编译工程会显示FreeRTOSConfig.h找不到,需要自己手动添加该文件,此文件可以在FreeRTOS文件源码中的Demo中寻找,查看其官网的移植例程,在里面获取FreeRTOSConfig.h文件,将其复制到自己的工程中,具体存放路径看自己个人习惯。
7、设置系统节拍
    将 at32f403a_407_int.c 中的 PendSV_Handler()、SVC_Handler() Systick_Handler()这三个函数屏蔽掉。
   FreeRTOSConfig.h中的#define xPortSysTickHandler         SysTickHandler宏定义屏蔽掉,如图5所示:
5
    系统节拍定时器我在此处使用的为定时器2,重写定时器2中断函数,代码如下:
void TMR2_GLOBAL_IRQHandler(void)
{
    if(tmr_flag_get(TMR2, TMR_OVF_FLAG) != RESET)
    {
        if(xTaskGetSchedulerState()!=taskSCHEDULER_NOT_STARTED)//系统已经运行
        {
            xPortSysTickHandler();
        }
        tmr_flag_clear(TMR2, TMR_OVF_FLAG);
    }
}   
此时系统节拍中断函数已设置完成,此时还需要进行定时器的初始化,初始化节拍时间则根据FreeRTOSConfig.h文件中的宏定义获得,
#define configTICK_RATE_HZ        (1000) //时钟节拍频率,这里设置为1000,周期就是1ms。将定时器2中断周期初始化为1ms,此时操作系统的移植基本完成,编译根据错误信息进行对应的修改,直至无错误则移植完成。
8、可能的编译错误如下:
    可能会显示一些以Hook 结尾的函数未定义,这些函数有个共同的名称: 钩子函数,这是因为在 FreeRTOSConfig.h中开启了这些钩子函数,但是却没有定义这些钩子函数而导致的,我们在 FreeRTOSConfig.h 中关闭这些钩子函数就行了,关闭的方法很简单, 将相应的宏定义改为 0 configUSE_IDLE_HOOK configUSE_TICK_HOOK 、configUSE_MALLOC_FAILED_HOOK 和configCHECK_FOR_STACK_OVERFLOW 定义为 0。
9、FreeRTOSConfig.h文件对FreeRTOS的配置
    系统各配置项信息请查看FreeRTOSConfig.h文件。

使用特权

评论回复
沙发
wsnsyy| | 2022-4-29 15:06 | 只看该作者
堆的大小和FPU也要注意。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

1

主题

5

帖子

0

粉丝