GoupOS嵌入式操作系统移植

GoupOS嵌入式操作系统移植版本: V1.1

  1. 首先找到os文件夹,然后拷贝os文件夹到自己的工程目录下,文件目录下有这些文件
    文件目录.png
    可以阅读当前文件下的README.txt文件,查看每个文件目录的作用;

  2. 在MDK中,C语言需要包含的头文件有:

    ..\os\Device\inc
    ..\os\GoupOSBasics\inc
    ..\os\GoupOSkernel\Cortex-Mx\GoupOSexternfile
    ..\os\GoupOSkernel\Cortex-Mx\inc
    ..\os\GoupOSkernel\Cortex-Mx
    ..\os\SystemComponents\inc
    ..\os\SystemMemManage\inc

在MDK中,汇编语言需要包含的头文件有:

..\os\GoupOSkernel\Cortex-Mx
  1. 在MDK中,包含这些目录下的源文件:
    .. \os\Device\src
    ..\os\GoupOSBasics\src
    ..\os\GoupOSkernel\Cortex-Mx\src
    ..\os\SystemComponents\src
    ..\os\SystemMemManage\src

暂时屏蔽这两个源文:os_stdlib.c、os_object.c;
说明:Cortex-Mx,根据不同内核选择不同的内核文件,这样就完成了GoupOS的移植,下面是系统参数的修改。

  1. 大部分文件夹下有README.txt文档,请阅读首先,请搜索总个工程中源文件,保证:SysTick_Handler函数只在tcpu.c文件中使用;tcpu.c文件存放位置在:..\os\GoupOSkernel\Cortex-Mx\src目录下;

  2. 修改GoupOS的系统配置文件中相关参数:GoupOSconfig.h;

    修改系统运行参数,配置滴答
    #define CPU_CLOCK_HZ (180000000) 系统时钟
    #define OS_1S_TICKS (1000) 系统每秒钟滴答次数(该值可以默认)
    #define OS_TIME_BASE (CPU_CLOCK_HZ/OS_1S_TICKS) 系统时基
    #define OS_SYSTICK_MS (1) 系统最小时间单位
    #define TICKS_PER_SEC (1000/OS_SYSTICK_MS) 滴答次数

系统优先级是可以支持配置的,考虑系统资源,优先级配置8-1024;修改:TINYOS_PRO_COUNT 宏的值;

芯片是否支持FPU可以通过配置:OS_ARM_FPU_ENABLE宏是否使能支持FPU功能,该宏支持两个选项

#define OS_ARM_FPU_ENABLE OS_ENABLE 支持FPU功能,开启FPU
#define OS_ARM_FPU_ENABLE OS_DISABLE 不支持FPU功能,关闭FPU

系统启动时候,输出调试信息,可以通过配置:OS_STARTUPINFO 宏,设置系统启动时候是否打印调试信息,启动调试信息包含系统说明,启动线程说明,设置为1时候,启动了调试信息,设置0关闭了调试信息。

系统模块的裁剪
#define GOUPOS_ENABLE_SEM (1) 控制是否裁剪信号量功能模块
#define GOUPOS_ENABLE_MAILMSG (1) 控制是否裁剪邮箱功能模块
#define GOUPOS_ENABLE_MEMBLOCK (1) 控制是否裁剪内存功能模块
#define GOUPOS_ENABLE_EVENTFLAGGROUP (1) 控制是否裁剪事件标志组功能模块
#define GOUPOS_ENABLE_MUTEX (1) 控制是否裁剪互斥锁功能模块
#define GOUPOS_ENABLE_TIMER (1) 控制是否裁剪定时器功能模块
#define GOUPOS_ENABLE_CPUUSAGE_STAT (1) 控制是否裁剪CPU使用率功能模块
#define GOUPOS_ENABLE_HOOKS (1) 控制是否裁剪钩子函数功能模块

关于系统模块裁剪,该部分功能正在完善,可能裁剪某些特殊模块会出现编译不过问题,正在完善,但是只要编译通过,能正常仿真运行,那么裁剪基本没有问题,

  1. 关于文件引用,由于系统需要使用滴答,所以系统会引用库文件去支持tcpu.c,GoupOSexternfile.h头文件中引用外部文件,例如GoupOSexternfile.h中包含 #include “stm32f4xx.h”

  2. 用户包含系统文件,只需要包含#include “GoupOSinclude.h”,就可以调用系统所有API函数接口。

  3. 需要添加一个app.h app.c文件该文件中主要添加一个函数:

    1
    2
    3
    4
    5
    /*用户任务初始化程序*/
    void AppTaskInit(void)
    {

    }

    该文件主要包含在os_tTask.c文件中,如果需要修改文件名,可以更改,同时需要在os_tTask.c中,将包含的头文件也修改;但是任务初始化函数不能修改。如上图,

  4. 配置工程中,需要去除相关函数后再移植操作系统

    void PendSV_Handler(void)
    void SysTick_Handler(void)
  5. 如果工程中需要打印函数,需要先初始化串口,然后配置osdev_out(usart_putc); //初始化打印函数底层
    然后调用 :GoupOS_StartupRun();函数