TobudOS 是面向物联网领域开发的实时操作系统,早期版本基于腾讯自研的物联网操作系统TobudOS,2020年由腾讯捐赠到开放原子开源基金会进行孵化,2023年正式更名为TobudOS,TobudOS具有低功耗,低资源占用,模块化,安全可靠等特点,可有效提升物联网终端产品开发效率,提供精简的 RTOS 内核,内核组件可裁剪可配置,可快速移植到多种主流 MCU (如 STM32 全系列) 及模组芯片上。而且,基于 RTOS 内核提供了丰富的物联网组件,内部集成主流物联网协议栈(如 CoAP/MQTT/TLS/DTLS/LoRaWAN/NB-IoT 等),可助力物联网终端设备及业务快速接入物联网云平台。【下载源码】
https://atomgit.com/tobudos/kernel
【移植步骤】
1、使用AT32 Work Bench创建工程。先新建一个基于AT32F405RCT7的空白工程。
2、为了给Tobudos提供心跳,需要开启SysTick IRQ,并设置优先级为5。
3、设置工程名称为AT32F405RCT7_TobudOS,同时选择需要存放工程的文件夹。选择生成MDK工程。
4、打开工程项目,先编译一下,确保编译可以通过。
5、在项目目录下新建TobundOS用于存放的需要移植的代码:
6、复制源码中的arch、core到OS文件夹中。
7、在工程中新建分组OS/arch,把TobundOS\arch\arm\arm-v7m\common下的所有.c添加进工程分组中。
把TobundOS\arch\arm\arm-v7m\cortex-m4\armcc下的port_c.c以及port_s.S添加进工程。
8、新建工程分组OS/core,把TobundOS\core目录下的所有的.c文件全部添加进工程。
9、在OS文件夹下新建CONFIG文件夹,并拷贝一个示例的CONFIG配置文件。
新建config分组,并把配置文件添加进工程中:
10、添加头文件到工程中:
..\..\TobundOS\arch\arm\arm-v7m\common\include
..\..\TobundOS\arch\arm\arm-v7m\cortex-m4\armcc
..\..\TobundOS\config11、打开配置文件,添加#include "at32f402_405_wk_config.h"引用。
12、注释at32f402_405_int.c中的PendSV_Handler,解决重命名的报错。
13、at32f402_405_int.c添加头文件tos_k.h的引用,并在systick_handle函数中添加心跳代码:
void SysTick_Handler(void)
{
/* add user code begin SysTick_IRQ 0 */
if(tos_knl_is_running())
{
tos_knl_irq_enter();
tos_tick_handler();
tos_knl_irq_leave();
}
/* add user code end SysTick_IRQ 0 */
/* add user code begin SysTick_IRQ 1 */
/* add user code end SysTick_IRQ 1 */
}
致此,代码的移植完成。
【添加测试代码】
1、添加开发板的板级支持包,来实现LED、printf的实现。复制SDK的at32f402_405_board到工程中,并添加进工程中:
2、在main.c中添加测试用的两个任务如下:
k_stack_t task_1_stack[512];
k_task_t task_1;
k_stack_t task_2_stack[512];
k_task_t task_2;
void test_task1(void *Parameter)
{
while(1)
{
at32_led_toggle(LED2);
printf("LED2 Toggle\n\r");
tos_task_delay(1000);
}
}
void test_task2(void *Parameter)
{
while(1)
{
at32_led_toggle(LED3);
printf("LED3 Toggle\n\r");
tos_task_delay(500);
}
}
3、在然后初始化创建任务:
tos_knl_init();
tos_task_create(&task_1,"button_task",test_task1,NULL,2,task_1_stack,512,100);
tos_task_create(&task_2,"led_task",test_task2,NULL,1,task_2_stack,512,100);
tos_knl_start();
【实验效果】
在串口助手中,可以看到两个任务按设计的运行打印出了日志,同时两个LED也可以周期的闪烁:
附工程源码:
AT32F405RCT7_TobudOS.zip
(1.69 MB)
|