打印
[AT32F405]

【AT-START-F405测评】4、移植TobudOS

[复制链接]
4404|0
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
lulugl|  楼主 | 2024-5-3 13:43 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
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)

30364663465b9909f9.png (424.99 KB )

30364663465b9909f9.png

7909663466a5c5925.png (340.4 KB )

7909663466a5c5925.png

1306966346ebf3108c.png (374.48 KB )

1306966346ebf3108c.png

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

155

主题

737

帖子

10

粉丝