【目的】移植国产的开源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内容如下:
  1. #ifndef _TOS_CONFIG_H_

  2. #define _TOS_CONFIG_H_

  3. #include "platform.h"

  4. #define SystemCoreClock 180000

  5. #define TOS_CFG_TASK_PRIO_MAX 10u

  6. #define TOS_CFG_ROUND_ROBIN_EN 1u

  7. #define TOS_CFG_OBJECT_VERIFY_EN 1u

  8. #define TOS_CFG_OBJ_DYNAMIC_CREATE_EN 1u

  9. #define TOS_CFG_TASK_DYNAMIC_CREATE_EN 1u

  10. #define TOS_CFG_EVENT_EN 1u

  11. #define TOS_CFG_MMBLK_EN 1u

  12. #define TOS_CFG_MMHEAP_EN 1u

  13. #define TOS_CFG_MMHEAP_DEFAULT_POOL_SIZE 0x4000

  14. #define TOS_CFG_MUTEX_EN 1u

  15. #define TOS_CFG_TIMER_EN 1u

  16. #define TOS_CFG_SEM_EN 1u

  17. #define TOS_CFG_IDLE_TASK_STK_SIZE 128u

  18. #define TOS_CFG_CPU_TICK_PER_SECOND 1000u

  19. //#define TOS_CFG_CPU_CLOCK (SystemCoreClock)

  20. #define TOS_CFG_TIMER_AS_PROC 1u

  21. #define TOS_CFG_MAIL_QUEUE_EN 1u

  22. #endif

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

  2. {

  3. // if (0 != PLATFORM_DelayTick)

  4. // {

  5. // PLATFORM_DelayTick--;

  6. // }

  7. if(tos_knl_is_running())

  8. {

  9. tos_knl_irq_enter();

  10. tos_tick_handler();

  11. tos_knl_irq_leave();

  12. }

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

  2. #include "platform.h"

  3. #include "main.h"

  4. #include "tos_k.h"

  5. k_task_t task, led_task;

  6. k_stack_t task_stack[1024], task_stack_led[1024];

  7. void test_task(void *Parameter)

  8. {

  9. while(1)

  10. {

  11. printf("hello tobuandOS\r\n");

  12. tos_task_delay(1000);

  13. }

  14. }

  15. void led_task_entry(void *Parameter)

  16. {

  17. while(1)

  18. {

  19. printf("hello tobuandOS thread2\r\n");

  20. tos_task_delay(1000);

  21. PLATFORM_LED_Toggle(LED1);

  22. }

  23. }

  24. int main(void)

  25. {

  26. k_err_t err;

  27. PLATFORM_Init();

  28. tos_knl_init();

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

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

  31. tos_knl_start();

  32. while (1)

  33. {

  34. // PLATFORM_DelayMS(500);

  35. }

  36. }

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