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, 下载次数: 1)
|