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

[复制链接]
 楼主| 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的空白工程。
423666634653151ba6.png
2、为了给Tobudos提供心跳,需要开启SysTick IRQ,并设置优先级为5。
63043663465cfaeacb.png

3、设置工程名称为AT32F405RCT7_TobudOS,同时选择需要存放工程的文件夹。选择生成MDK工程。
15589663466ab7334b.png
4、打开工程项目,先编译一下,确保编译可以通过。
3267663467373c362.png
5、在项目目录下新建TobundOS用于存放的需要移植的代码:
95008663468be40da1.png
6、复制源码中的arch、core到OS文件夹中。
20431663469fd55358.png
7、在工程中新建分组OS/arch,把TobundOS\arch\arm\arm-v7m\common下的所有.c添加进工程分组中。
5514166346a8d17b8c.png
把TobundOS\arch\arm\arm-v7m\cortex-m4\armcc下的port_c.c以及port_s.S添加进工程。

6189566346b2c9e043.png

8、新建工程分组OS/core,把TobundOS\core目录下的所有的.c文件全部添加进工程。
6413766346be7b7c9d.png
9、在OS文件夹下新建CONFIG文件夹,并拷贝一个示例的CONFIG配置文件。
4904266346c697fcb8.png
新建config分组,并把配置文件添加进工程中:
7226366346ca51ff47.png
10、添加头文件到工程中:
..\..\TobundOS\arch\arm\arm-v7m\common\include
..\..\TobundOS\arch\arm\arm-v7m\cortex-m4\armcc
..\..\TobundOS\config11、打开配置文件,添加#include "at32f402_405_wk_config.h"引用。
9257966346e3670e7f.png
12、注释at32f402_405_int.c中的PendSV_Handler,解决重命名的报错。
4913466346ed20a060.png
13、at32f402_405_int.c添加头文件tos_k.h的引用,并在systick_handle函数中添加心跳代码:
  1. void SysTick_Handler(void)
  2. {
  3.   /* add user code begin SysTick_IRQ 0 */
  4.         if(tos_knl_is_running())
  5.         {
  6.                 tos_knl_irq_enter();
  7.                 tos_tick_handler();
  8.                 tos_knl_irq_leave();
  9.         }
  10.   /* add user code end SysTick_IRQ 0 */
  11.   /* add user code begin SysTick_IRQ 1 */

  12.   /* add user code end SysTick_IRQ 1 */
  13. }


致此,代码的移植完成。
【添加测试代码】
1、添加开发板的板级支持包,来实现LED、printf的实现。复制SDK的at32f402_405_board到工程中,并添加进工程中:
4245866347067a7c68.png

2、在main.c中添加测试用的两个任务如下:
  1. k_stack_t task_1_stack[512];
  2. k_task_t task_1;

  3. k_stack_t task_2_stack[512];
  4. k_task_t task_2;
  5. void test_task1(void *Parameter)
  6. {
  7.         while(1)
  8.         {
  9.                 at32_led_toggle(LED2);
  10.                 printf("LED2 Toggle\n\r");
  11.                 tos_task_delay(1000);
  12.         }
  13. }

  14. void test_task2(void *Parameter)
  15. {
  16.         while(1)
  17.         {
  18.                 at32_led_toggle(LED3);
  19.                 printf("LED3 Toggle\n\r");
  20.                 tos_task_delay(500);
  21.                
  22.         }
  23. }


3、在然后初始化创建任务:
  1. tos_knl_init();
  2.         
  3.         tos_task_create(&task_1,"button_task",test_task1,NULL,2,task_1_stack,512,100);
  4.         tos_task_create(&task_2,"led_task",test_task2,NULL,1,task_2_stack,512,100);

  5.         tos_knl_start();
【实验效果】
在串口助手中,可以看到两个任务按设计的运行打印出了日志,同时两个LED也可以周期的闪烁:
587776634795081604.png
附工程源码:
AT32F405RCT7_TobudOS.zip (1.69 MB, 下载次数: 1)

30364663465b9909f9.png
7909663466a5c5925.png
1306966346ebf3108c.png
您需要登录后才可以回帖 登录 | 注册

本版积分规则

180

主题

830

帖子

12

粉丝
快速回复 在线客服 返回列表 返回顶部

180

主题

830

帖子

12

粉丝
快速回复 在线客服 返回列表 返回顶部