【硬件】灵动 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 160931ullkqk5aftx3a3k1](data/attachment/forum/202401/11/160931ullkqk5aftx3a3k1.png)
4、将源码下的arch、kernel文件复制到TOBUDOS文件夹下面。
![160931hsg7zn40rkp6ugp0 160931hsg7zn40rkp6ugp0](data/attachment/forum/202401/11/160931hsg7zn40rkp6ugp0.png)
5、新建一个TOS_CONFIG文件夹用于存放TobudOS的配置文件。并到源的board下面的工程 中复制一个到文件夹内。
![160931bff5vuufsfh3dzf3 160931bff5vuufsfh3dzf3](data/attachment/forum/202401/11/160931bff5vuufsfh3dzf3.png)
6、在工程中新建三个分组,分别为arch、kernel、tos-config分组。
![160931qi7lyyia474lzayj 160931qi7lyyia474lzayj](data/attachment/forum/202401/11/160931qi7lyyia474lzayj.png)
7、将OS\arch\arm\arm-v8m\cortex-m33\gcc 下面的.c以及.s添进arch分组,将\arch\arm\arm-v8m\common下面的.c也全部添回进分组。
![160931nzwy5wwa1v1slygz 160931nzwy5wwa1v1slygz](data/attachment/forum/202401/11/160931nzwy5wwa1v1slygz.png)
8、将\kernel\core下面全部的.c文件添加进kernel项目分组中。
9、将tos_config.h也添回config分组之中。
10、添加头文件目录到工程中,如下图:
![160931tm3csouyztx3hqm7 160931tm3csouyztx3hqm7](data/attachment/forum/202401/11/160931tm3csouyztx3hqm7.png)
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 160932w166g7kse64x74io](data/attachment/forum/202401/11/160932w166g7kse64x74io.png)