UCOSIII系统移植_STM32F103

由于时间线问题,此次先记录下最近在STM32F103上移植UCOSIII的过程。

  在移植前需要UCOSIII的源码,由于官网需要使用Goole邮箱注册,暂时没上外网,所以没有从官网获取,直接去网上找到的UCOSIII(3.02)源码。

UCOSIII的源码文件如下
2uu0nH.png

文件夹 存放文件描述
EvalBoards UCOSIII官网给的评估板的工程文件
uC-CPU 与CPU相关文件
uC-LIB Micrium 公司提供的官方库,诸如字符串操作、内存操作等接口,可用可不用。
uCOS-III UCOSIII与硬件的接口文件(Ports文件夹中),UCOSIII的源代码

移植思路如下:

  • 在UCOSIII中的源代码文件为操作系统的核心文件,属于软件层的底层接口,是不需要修改的。
  • 在UCOSIII中我们的任务切换依赖于CPU的Pendsv异常中断,所以在启动任务中我们还需要修改Pendsv的中断处理函数。
  • 同理,操作系统的延时处理是在滴答定时器的中断函数中完成的,所以也要将滴答定时器的中断处理函数改为UCSOIII为我们编写的处理函数
  • 除此之外我们还要把评估板的相关文件修改一下除时钟配置相关之外的外设代码来适配我们的板子。
  • 最后就是修改UCOS的配置文件来裁剪我们的UCOS。

因此,移植步骤如下:

  1. 修改M3内核的启动文件,将Pendsv的中断处理函数改为UCOSIII为我们写好的中断处理函数。
  2. 将评估板的相关代码中的与我们板子不兼容的外设配置代码删除。
  3. 修改UCOS配置宏,裁剪UCOS功能。
  4. 开始编写任务函数。

至此记录下本次的移植过程:

  1. 首先创建待移植的工程文件,其文件结构如下:
graph TD

style 工程文件夹 fill:   #5F9EA0,stroke:#333,stroke-width:4px,color: #DC143C

    subgraph 工程文件夹
        User(User)
        UCOSIII(UCOSIII)
        OutPut(OutPut)
        Libraies(Libraies)
        App(App)
    end

    User(User)-->存放用户文件
    UCOSIII(UCOSIII)-->存放UCOSIII的移植文件
    OutPut(OutPut)-->存放编译后的输出文件
    Libraies(Libraies)-->存放库文件
    App(App)-->存放驱动与业务逻辑文件

  在此顺便连工程模板文件的创建步骤也记录一下,方便日后查阅

  1. 打开Keil5,并创建好上述工程文件夹
    20vB5Q.png
  • 选择之前创建好的工程文件夹

  • 在工程文件夹中建立好上述的文件夹(UCOSIII在不使用时,UCOSIII文件夹可以不要)

20zWh4.png

  • 选定芯片型号
    20xSGd.png
  1. 设置工程

    20xYi4.png
    (还要记得查看更改芯片的时钟频率,避免仿真时频率不对)

    20zO4e.png

    2BSiE8.png

    2BSZgs.png

    2BSQET.png

    添加的宏如下:USE_STDPERIPH_DRIVER,STM32F10X_HD

    2BSfVf.png

    2Bp9z9.png

  2. 移植库函数文件
    官方库函数文件如下
    2B9atO.png

其中我们要移植的有

graph TB

subgraph 内核文件
    core_cm3.c
    core_cm3.h
end

subgraph 启动文件
    startup_stm32f10x_hd.s
end

subgraph 片上外设接入层系统文件
    system_stm32f10x.c
    system_stm32f10x.h
end

subgraph 外设驱动文件
    inc中的文件
    src中的文件
end

subgraph 库函数头文件
    stm32f10x.h
end

Libraries-->CMSIS-->CM3-->CoreSupport
                          CoreSupport-->core_cm3.c
                          CoreSupport-->core_cm3.h
                    CM3-->DeviceSupport-->ST-->STM32F10X-->stm32f10x.h
                                               STM32F10X-->system_stm32f10x.c
                                               STM32F10X-->system_stm32f10x.h
                                               STM32F10X-->startup-->arm-->startup_stm32f10x_hd.s

Libraries-->STM32F10x_StdPeriph_Driver-->inc中的文件
            STM32F10x_StdPeriph_Driver-->src中的文件
graph LR

subgraph 配置文件
    stm32f10x_conf.h
end

subgraph 中断向量设置文件
    stm32f10x_it.c
    stm32f10x_it.h
end

project-->STM32F10x_StdPeriph_Template-->stm32f10x_conf.h
            STM32F10x_StdPeriph_Template-->stm32f10x_it.c
            STM32F10x_StdPeriph_Template-->stm32f10x_it.h

移植存放路径如下
2BEpKe.png

将上述文件加入管理组后就创建完一个基础的工程模板了
2BVAeJ.png


那么接着回归正题, 开始移植UCOSIII源码

  • 在工程文件夹中的UCOSIII文件夹中创建以下几个目录

2DQJ39.png

同样的在管理组中创建一下几个文件管理组

2DB9u8.png

  • 接下来就是按照之前的思路来移植配置UCOSIII

    1. 修改启动文件中的中断服务函数为OS为我们编写的中断处理函数(Pendsv与Systick中断)

      2DB4aQ.png

      2DBqMV.png

    2. 修改UCOSIII源码中的板载外设文件(bsp.h、bsp.c)

      删除里面的所有外设配置函数,只留下初始化和时钟配置函数

    3. 按需修改UCOS的配置文件

      os_cfg.h 配置UCOSIII中的内核对象与功能

      cpu_cfg.h 配置CPU相关的宏定义(对CPU不熟悉的话可以先忽略)

      os_cfg_app.h 配置系统任务的一些设置(如优先级大小、堆栈大小、空闲与统计任务开启等)


到此操作系统就 移植完成了。

发表评论

您的电子邮箱地址不会被公开。 必填项已用*标注