本帖最后由 lulugl 于 2024-3-1 14:22 编辑

TobudOS简介
TobudOS是开放原子开源基金会孵化的,面向物联网领域开发的实时操作系统,具有低功耗,低资源占用,模块化,安全可靠等特点,可有效提升物联网终端产品开发效率,助力物联网终端设备及业务快速接入云上服务和应用。
项目特点】:

(1).小体积
最小内核:RAM 0.6KB,ROM 1.8KB 典型 LoraWAN 及传感器应用:RAM 3.3KB,ROM 12KB
(2).低功耗
休眠最低功耗低至 2uA 支持外设功耗管理框架
(3).丰富的 IoT 组件
集成主流 IoT 协议栈 多种通信模组SAL层适配框架; 支持 OTA 升级 提供简单易用端云 API,加速用户业务接入腾讯云
(4).可靠的安全框架
多样化的安全分级方案 均衡安全需求&成本控制
(5).良好的可移植性
内核及IoT组件高度解耦,提供标准适配层 提供自动化移植工具,提升开发效率
(6).便捷的调试手段
提供云化的最后一屏调试功能 故障现场信息自动上传云平台,方便开发人员调试分析

【移植步骤】
1、从开源原子基金会下载源码到本地:https://atomgit.com/tobudos
2、项目我将采用前面的工程作为模板使用。
3、在项目中新建os文件夹,并把源码arch\arm\amr_v7m以及kernel以及osal复制os文件夹中。
image.png
4、新建一个TOS-CONFIG文件夹,用于存放TobudOS的配置文件。
5、打开keil工程,添加arch、kernel、config三个分组:
image.png
6、把工程源码arm-v7m\cortex-m7\gcc下面的port_s.S、port_c.c,以及\arm-v7m\common下面的tos_cpu.c、tos_fault.c加到arch分组下面:
image.png
7、把kernel\core目录下面所有的.c文件添加进kernel分组中。
image.png
8、在工程中新建一个tos_config.h,并把它加入到config分组中。
9、添加头文件目录到工程中分别为:
image.png
分别为:
..\..\OS\arm-v7m\common\include
  • ..\..\OS\arm-v7m\cortex-m7\gcc
  • ..\..\OS\kernel\core\include
  • ..\..\OS\TOS-CONFIG
  • 复制代码
    10、编写config.h内容如下:
    #ifndef _TOS_CONFIG_H_
  • #define  _TOS_CONFIG_H_


  • #include "gd32h7xx.h"

  • #include <stdio.h>



  • #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_EVENT_EN                1u

  • #define TOS_CFG_MMBLK_EN                1u

  • #define TOS_CFG_MMHEAP_EN               1u

  • #define TOS_CFG_MMHEAP_DEFAULT_POOL_SIZE        0x8000

  • #define TOS_CFG_MUTEX_EN                1u

  • #define TOS_CFG_TIMER_EN                1u

  • #define TOS_CFG_PWR_MGR_EN              0u

  • #define TOS_CFG_TICKLESS_EN             0u

  • #define TOS_CFG_SEM_EN                  1u

  • #define TOS_CFG_TASK_STACK_DRAUGHT_DEPTH_DETACT_EN      1u

  • #define TOS_CFG_FAULT_BACKTRACE_EN      0u

  • #define TOS_CFG_IDLE_TASK_STK_SIZE      512u

  • #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

  • 复制代码
    该文件配置参数可查阅官网了解具体的定义,我们主要考虑到的两个参数为:
    1)、TOS_CFG_MMHEAP_DEFAULT_POOL_SIZE 0x8000
    这个HEAP的大小,如果报内存不足,可以适当的调查大小。
    2)、TOS_CFG_CPU_CLOCK (SystemCoreClock)
    这个SystemCoreClock,为系统时钟频率。
    12、然后我们需要注释掉gd32h7xxit.c中的PendSV_Handler中断函数,因为在TobudOS里面也做了定义,要不会报重复定义的错误。
    13、在SysTick_Handler添加TobudOS的心跳包,内容如下:
    /*!
  •     \brief      this function handles SysTick exception
  •     \param[in]  none
  •     \param[out] none
  •     \retval     none
  • */
  • void SysTick_Handler(void)
  • {
  •     delay_decrement();
  •         if(tos_knl_is_running())
  •         {
  •                 tos_knl_irq_enter();
  •                 tos_tick_handler();
  •                 tos_knl_irq_leave();
  •         }
  • }
  • 复制代码
    到此我们的TobudOS代码移植就结束了,我在main.c中添加两个任务,来验证是否移植成功:
    void test_task(void *Parameter)
  • {
  •         while(1)
  •         {
  •                 TG_LED1;
  •                 tos_task_delay(1000);
  •         }
  • }

  • void led_task_entry(void *Parameter)
  • {

  •         while(1)
  •         {
  •                 TG_LED2;
  •                 tos_task_delay(500);
  •                
  •         }
  •         

  • }
  • 复制代码
    任务1为1秒翻译一次LED灯,任务2为0.5秒翻转一次LED2。
    并在主任务中初始化这两个任务:
    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();
  • 复制代码

    编译下载后,成功的运行,并看到两个任务”并行“的控制两个LED灯在不同周期里闪烁!
    【总结】
    GD32H759可以稳定的运行TobudOS,国产的芯片配国产的操作系统,支持本地化发展!
    【工程源码】
    GD32H759_tobudos.zip (1.25 MB, 下载次数: 2)
    全部回复 0
    暂无评论,快来抢沙发吧