ucos开发第一步,就是移植,移植做不好,下面的研究内容也就没啥意义了,这篇文章分享一下ucos-Ⅲ移植到stm32f103zet6过程。

[TOC]

一、前言

ucos内核学习结束,就可以开始做UCOS源码的移植,移植第一步,即理清代码的作用,第二步则是在知道各部分源码的作用之后,把ucos各部分代码移植到stm32的kile工程里面,移植完成之后修改工程启动文件与UCOS源码关联,在编译无报错即为成功

二、UCOS-Ⅲ源码介绍

EvalBoards

  1. uCos-Ⅲ
    这里的代码文件主要由用户来配置,移植文件存放于一个APP文件夹中,用于存放任务以及配置信息
    在这里插入图片描述
  2. BSP
    BSP文件夹下存放的文件是与底层连接的接口文件,源码中自带的是板子LED的接口,移植到KEIL单独设置一个BSP文件夹放置
    在这里插入图片描述

    uC-CPU

    注:uC-CPU是和CPU紧密相连的内容,涉及一些关键的配置
  3. M3(或M4根据型号来)文件夹外的3个文件
  • cpu_core.c
    文件包含适用于所有CPU架构的代码,即通用代码,一般与移植不是很密切
  • cpu_core.h
    对其c文件的补充说明
  • cpu_def.h
    包含与CPU相关的一些宏定义
    在这里插入图片描述
  1. M3(或M4根据型号来)内文件
  • 三个文件夹对应不同软件:RealView对应Keil软件
  • cpu.h
    针对不同CPU,让ucos-Ⅲ与cpu架构和编译器字宽无关
  • cpu_a.asm、cpu_c.c
    放与cpu底层相关的函数,不同的是,一个由c编写一个由汇编编写
    在这里插入图片描述

    uC-LIB

    ucos提供的c语言标准库,使用起来更方便,直接调用,全部复制到一个uC-LIB文件夹下
    在这里插入图片描述

    uCos-Ⅲ(重点)

  1. PORT 下 M3(或M4等等)
     三个文件夹移植在不同的编译器里面
         RealView为MDK的移植代码
    在这里插入图片描述
  2. Source文件夹
  • os.h
    包含ucos-Ⅲ主要头文件,定义了一些与系统相关的宏定义、常量,声明了一些全局变量、函数原型等
  • os_cfg_app.c
    根据其头文件来配置具体内容(变量和数组)
  • os_core.c
    内核数据结构管理,uCOS-Ⅲ的核心,任务切换等
  • os_dpg.c
    uCosⅢ内核调试相关代码
  • os_flag.c
    事件块管理、事件标志组管理等功能相关代码
  • os_int.c
    涵盖内核的初始化相关代码
  • os_mem.c
    系统内存管理相关代码
  • os_msg.c
    消息处理相关代码
  • os_mutex.c
    互斥量相关代码
  • os_pend_multi.c
    在多个消息队列、信号量等待的相关代码
  • os_prio.c
    内部调用文件,关于任务就绪相关的代码
  • os_q.c
    消息队列相关代码
  • os_sem.c
    信号量相关代码
  • os_task.c
    任务管理的相关代码
  • os_tick.c
    处理处于延迟、阻塞状态任务的相关代码
  • os_time.c
    时间管理相关代码,配置阻塞延迟等
  • os_tmr.c
    软件定时器相关的代码
  • os_var.c
    uCOS-Ⅲ定义的全局变量
  • os_type.h
    uCOS-Ⅲ数据类型声明相关的代码
    在这里插入图片描述

三、源码移植到STM32中

  1. kile工程文件夹分配
  2. 寻找一个STM32库函数模板作为基础(这里使用的是野火的模板)
  3. 创建APP、BSP、uC/CPU、uC/LIB、uC/Scoure、uC/Port文件夹
    在这里插入图片描述
  4. 将上面的文件按分类加入文件夹下
    APP下加入APP分类的文件,作为用户主要编写的文件
    在这里插入图片描述
    BSP作为板级支持包,提供板载资源的接口
    在这里插入图片描述
    port文件夹下对应放入文件如下
    在这里插入图片描述
    Source下放入uCos系统资源的配置包
    在这里插入图片描述
    Lib下放入需要使用到的lib库
    在这里插入图片描述
  5. 加入头文件路径
  6. 修改汇编源码,编译通过
  • ucos文件加入之后,需要修改stm32库函数文件的启动文件,改变pendsv的主体函数入口,进入到上下文切换内,同时改变定时器中断入口,具体修改如下,md、hd文件修改方式一样
    在这里插入图片描述
    在这里插入图片描述