FreeRTOS学习之路,以STM32F103C8T6为实验MCU(1-1:移植)

学习之路主要为FreeRTOS操作系统在STM32F103(STM32F103C8T6)上的运用,采用的是标准库编程的方式,使用的IDE为KEIL5。

注意!!!本学习之路可以通过购买STM32最小系统板以及部分配件的方式进行学习,也可以通过Proteus仿真的方式进行学习。

后续文章会同时发表在个人博客(jason1016.club)、CSDN;

视频会发布在bilibili(UID:399951374)

一、为什么FreeRTOS是移植的

相信大家通过序章我本人对单片机与实时操作系统的关系的描述,应该已经大致对二者的联系有了些许概念,但是有概念和实操起来肯定是有很大的出入的。所以在具体讲freertos的移植步骤之前,我先和大家先浅谈一下下FreeRTOS为什么要移植以及为什么要叫做移植。(当初学FreeRTOS的时候网上那些教程第一步就是教你移植,但是却没有说清楚移植是为了什么,搞得跟强吻一样hhhh,所以我这里先给大家铺垫一下,当然,不涉及FreeRTOS内核原理的,前面这几章都是偏向入门的大家可以放心食用)

首先就是为什么要移植的问题:之前说过操作系统就是一个人的做人方式和行为准者嘛,那对于个人而言要培养一个好的行为准者就得上学去不断学习这里为人处世的道理嘛,对于单片机而言也一样要拥有一个全新的行为方式最简单最快捷的方案同样也是去“学习”嘛。

其次就是什么是移植的问题了:书接上文,而当我们想要我们自己的单片机拥有FreeRTOS的行为方式最好的方式就是“把FreeRTOS的教学资料给他,他自己就学会了嘛”,那我们具体要做的就是去网上下载FreeRTOS的“资料”直接塞给他(当然还是要按规范部署的),他就可以直接学会FreeRTOS了,是不是很简单?但是这个就是单片机的移植。那如果我们不想移植FreeRTOS想移植linux呢,一样的道理也是去下载linux的移植资源再去部署,当然linux的移植要复杂的多。

当然看到这里肯定有同学要问了,操作系统只能移植吗?当然不是,就像我们学习一下,难道我们要练就一套好的做人方式和行为准则只能去上学或者看书学习别人的资料吗?我们也可以通过自身的自勉,父母的教导,家庭的氛围养成一套自身的行为准则。同样的这也就是说单片机的操作系统也并非都需要移植,单片机的操作系统也可以由"他的父母"也就是我们一级开发者给他编写好一个操作系统嘛。当然自己写一个好的这是非常难的一件事,所以我们大多采用移植的方式快速降低成本和难度。

这类操作为什么要称为移植而不是安装呢?本来我是认为这两个之前是没什么差距的,但是通过直接去看二者之间的定义区别就能看出差距,安装是赋予单片机新的可执行的任务,而移植是赋予单片机新的处理任务的方式。简单来说,安装的话就是我们手机下载一个APP,只是创造了一个新的任务,但是移植的话就相当于给手机移植了一个Android系统嘛。一个外在一个内在,还有有很大的出入的。

二、FreeRTOS的移植

下载

下载FreeRTOS例程包(注意下载时下载v9.0版本就好了,这个并不是版本越高越好的,v9.0以上拓展了插件会影响初学者体验)

下载链接:https://zenlayer.dl.sourceforge.net/project/freertos/FreeRTOS/V9.0.0/FreeRTOSv9.0.0.zip

资源链接:FreeRTOS Real Time Kernel (RTOS) - Browse /FreeRTOS/V9.0.0 at SourceForge.net

官网链接:FreeRTOS - Market leading RTOS (Real Time Operating System) for embedded systems with Internet of Things extensions

1、标准库移植方案

相信大家手头都有自己的单片机裸机例程了吧,毕竟个人感觉每个人的代码和文件习惯不一样,也导致每个人的单片机文件格式千差万别,当然适合自己的就是最好的因此我就不给大家提供裸机例程模板了,以免大家要反过来兼容我的代码习惯搞得大家都不好。

移植准备

1、准备上述下载的FreeRTOS例程包

2、准备供FreeRTOS移植的stm32裸机模板

移植过程

第一重移植:

在裸机模板的根目录创建一个FreeRTOS文件夹

把FreeRTOS例程包根目录\Source目录下的文件全部复制放到刚刚裸机模板创建的FreeRTOS文件夹内

移植的文件:

移植后的文件:

删除部分文件:

删除除Keil、MemMang、RVDS以外的所有文件以及文件夹

删除后的文件结果

第二重移植:

找到FreeRTOS例程包:FreeRTOSv9.0.0\FreeRTOS\Demo\CORTEX_STM32F103_Keil 文件夹复制 FreeRTOSConfig.h 文件

将此文件移动到裸机模板:stm32裸机模板(Jason)\FreeRTOS\include 文件夹中

移植的文件:

移植后的文件:

移植后Keil的配置

将上述的include包和portable\RVDS\ARM_CM3导入到初始构建目录

如下图将对应文件放入keil并分类

测试

输入下面测试代码到主函数,build,若成功则移植完成

#include "stm32f10x.h"                  // Device header
#include "FreeRTOS.h"
#include "task.h"


#define START_TASK_PRIO            1
#define START_STK_SIZE            128
TaskHandle_t StartTask_Handler;
void start_task(void *pvParameters);

#define LED0_TASK_PRIO            2
#define LED0_STK_SIZE                50
TaskHandle_t LED0Task_Handler;
void led0_task(void *pvParameters);    

int main(void)
{
    NVIC_PriorityGroupConfig(NVIC_PriorityGroup_4);
    xTaskCreate((TaskFunction_t        )start_task,
                            (const char*            )"start_task",
                            (uint16_t                    )START_STK_SIZE,
                            (void*                        )NULL,
                            (UBaseType_t            )START_TASK_PRIO,
                            (TaskHandle_t*        )&StartTask_Handler);

    vTaskStartScheduler();
}


void start_task(void *pvParameters)
{
    taskENTER_CRITICAL();
    
    xTaskCreate((TaskFunction_t        )led0_task,
                            (const char*            )"led0_task",
                            (uint16_t                    )LED0_STK_SIZE,
                            (void*                        )NULL,
                            (UBaseType_t            )LED0Task_Handler,
                            (TaskHandle_t*        )&LED0Task_Handler);
    
    vTaskDelete(StartTask_Handler);
    taskEXIT_CRITICAL();

}

void led0_task(void *pvParameters)
{
    while(1)
    {        
    }
}

本文为作者独立编写,本BLOG上所有的原创文章未经本人许可,不得用于商业用途及传统媒体。网络媒体转载请注明出处,否则属于侵权行为。 

  • 16
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 8
    评论
FreeRTOS移植STM32F103C8T6微控制器上需要一些步骤。下面是大致的移植指南: 1. 了解STM32F103C8T的硬件资源和特性:包括内核、外设、时钟等。这将帮助你适配FreeRTOS到特定的硬件平台上。 2. 准备开发环境:安装适当的集成开发环境(IDE)和编译器,例如Keil MDK、IAR Embedded Workbench等。确保你能够成功编译和烧录STM32F103C8T6芯片。 3. 下载和配置FreeRTOS:从FreeRTOS官方网站下载最新的FreeRTOS源代码,并解压到你的项目目录中。在源代码中,你可以找到针对不同处理器架构的移植文件夹,如ARM Cortex-M3。 4. 配置FreeRTOS:根据STM32F103C8T6的硬件特性,修改FreeRTOS配置文件(FreeRTOSConfig.h)以适配你的系统。这包括调整任务堆栈大小、优先级和其他配置参数。 5. 创建启动文件:根据你的编译器和开发环境,创建适当的启动文件(startup.s或startup_stm32f10x_md.s)并配置启动向量表、堆栈设置等。 6. 编写硬件相关的启动代码:根据STM32F103C8T6的特性,编写硬件初始化和启动代码,例如初始化系统时钟、外设等。 7. 编写FreeRTOS任务:根据你的应用需求,编写FreeRTOS任务代码,并使用FreeRTOS提供的API创建和管理任务。你可以利用STM32F103C8T6的外设和中断来实现任务间的通信和同步。 8. 编译和烧录:使用你的编译器编译项目,并将生成的可执行文件烧录到STM32F103C8T6芯片上。 以上是一个大致的移植流程。具体的步骤可能因开发环境和需求而有所不同。在进行移植之前,建议先阅读FreeRTOS的官方文档,了解更多关于移植和配置的详细信息。
评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

JASON丶LI

作者码力不足了,卑微的求个打赏

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

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

打赏作者

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

抵扣说明:

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

余额充值