【目的】移植国产的开源TobudOS
【硬件】灵动 Mini-F5333开发板
【TobudOS简介】
TobudOS是开放原子开源基金会孵化的,面向物联网领域开发的实时操作系统,具有低功耗,低资源占用,模块化,安全可靠等特点,可有效提升物联网终端产品开发效率,助力物联网终端设备及业务快速接入云上服务和应用。
最小内核:RAM 0.6KB,ROM 1.8KB
【移植步骤】
1、下载源码:https://atomgit.com/OpenAtomFoundation/TobudOS
2、复制一份我前面制定的Mini-F5333工程模版:https://mbb.eet-china.com/forum/topic/138813_1_1.html
3、在文件夹新建一个用于存放TobudOS的文件夹。
160931ullkqk5aftx3a3k1
4、将源码下的arch、kernel文件复制到TOBUDOS文件夹下面。
160931hsg7zn40rkp6ugp0
5、新建一个TOS_CONFIG文件夹用于存放TobudOS的配置文件。并到源的board下面的工程 中复制一个到文件夹内。
160931bff5vuufsfh3dzf3
6、在工程中新建三个分组,分别为arch、kernel、tos-config分组。
160931qi7lyyia474lzayj
7、将OS\arch\arm\arm-v8m\cortex-m33\gcc 下面的.c以及.s添进arch分组,将\arch\arm\arm-v8m\common下面的.c也全部添回进分组。
160931nzwy5wwa1v1slygz
8、将\kernel\core下面全部的.c文件添加进kernel项目分组中。
9、将tos_config.h也添回config分组之中。
10、添加头文件目录到工程中,如下图:
160931tm3csouyztx3hqm7
11、修改tos_config.h内容如下:
#ifndef _TOS_CONFIG_H_

  • #define _TOS_CONFIG_H_

  • #include "platform.h"

  • #define SystemCoreClock 180000

  • #define TOS_CFG_TASK_PRIO_MAX 10u

  • #define TOS_CFG_ROUND_ROBIN_EN 1u

  • #define TOS_CFG_OBJECT_VERIFY_EN 1u

  • #define TOS_CFG_OBJ_DYNAMIC_CREATE_EN 1u

  • #define TOS_CFG_TASK_DYNAMIC_CREATE_EN 1u

  • #define TOS_CFG_EVENT_EN 1u

  • #define TOS_CFG_MMBLK_EN 1u

  • #define TOS_CFG_MMHEAP_EN 1u

  • #define TOS_CFG_MMHEAP_DEFAULT_POOL_SIZE 0x4000

  • #define TOS_CFG_MUTEX_EN 1u

  • #define TOS_CFG_TIMER_EN 1u

  • #define TOS_CFG_SEM_EN 1u

  • #define TOS_CFG_IDLE_TASK_STK_SIZE 128u

  • #define TOS_CFG_CPU_TICK_PER_SECOND 1000u

  • //#define TOS_CFG_CPU_CLOCK (SystemCoreClock)

  • #define TOS_CFG_TIMER_AS_PROC 1u

  • #define TOS_CFG_MAIL_QUEUE_EN 1u

  • #endif
  • 复制代码

    12、修改mm32f5330_it.c,在头部引用tos_k.h头文件,注释掉PendSV_Handler函数,以免重名报错。
    13、添加心跑包函数:
    void SysTick_Handler(void)

  • {

  • // if (0 != PLATFORM_DelayTick)

  • // {

  • // PLATFORM_DelayTick--;

  • // }

  • if(tos_knl_is_running())

  • {

  • tos_knl_irq_enter();

  • tos_tick_handler();

  • tos_knl_irq_leave();

  • }
  • 复制代码

    12、在主函数中添回tos_k.h的头文件的引用,并添加两个任务,
    /* Files include */

  • #include "platform.h"

  • #include "main.h"

  • #include "tos_k.h"

  • k_task_t task, led_task;

  • k_stack_t task_stack[1024], task_stack_led[1024];

  • void test_task(void *Parameter)

  • {

  • while(1)

  • {

  • printf("hello tobuandOS\r\n");

  • tos_task_delay(1000);

  • }

  • }

  • void led_task_entry(void *Parameter)

  • {

  • while(1)

  • {

  • printf("hello tobuandOS thread2\r\n");

  • tos_task_delay(1000);

  • PLATFORM_LED_Toggle(LED1);

  • }

  • }

  • int main(void)

  • {

  • k_err_t err;

  • PLATFORM_Init();

  • tos_knl_init();

  • err = tos_task_create(&task, "task1",test_task,NULL, 2, task_stack,1024,20);

  • err = tos_task_create(&led_task, "task_led",led_task_entry,NULL, 2, task_stack_led,1024,20);

  • tos_knl_start();

  • while (1)

  • {

  • // PLATFORM_DelayMS(500);

  • }

  • }
  • 复制代码

    【实验效果】
    两个任务可以交替运行,LED灯也按期闪烁:
    160932w166g7kse64x74io