【硬件】灵动 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的文件夹。
4、将源码下的arch、kernel文件复制到TOBUDOS文件夹下面。
5、新建一个TOS_CONFIG文件夹用于存放TobudOS的配置文件。并到源的board下面的工程 中复制一个到文件夹内。
6、在工程中新建三个分组,分别为arch、kernel、tos-config分组。
7、将OS\arch\arm\arm-v8m\cortex-m33\gcc 下面的.c以及.s添进arch分组,将\arch\arm\arm-v8m\common下面的.c也全部添回进分组。
8、将\kernel\core下面全部的.c文件添加进kernel项目分组中。
9、将tos_config.h也添回config分组之中。
10、添加头文件目录到工程中,如下图:
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灯也按期闪烁: