本帖最后由 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
分别为:
  1. ..\..\OS\arm-v7m\common\include
  2. ..\..\OS\arm-v7m\cortex-m7\gcc
  3. ..\..\OS\kernel\core\include
  4. ..\..\OS\TOS-CONFIG
10、编写config.h内容如下:
  1. #ifndef _TOS_CONFIG_H_
  2. #define  _TOS_CONFIG_H_


  3. #include "gd32h7xx.h"

  4. #include <stdio.h>



  5. #define TOS_CFG_TASK_PRIO_MAX           10u

  6. #define TOS_CFG_ROUND_ROBIN_EN          1u

  7. #define TOS_CFG_OBJECT_VERIFY_EN        1u

  8. #define TOS_CFG_OBJ_DYNAMIC_CREATE_EN   1u

  9. #define TOS_CFG_EVENT_EN                1u

  10. #define TOS_CFG_MMBLK_EN                1u

  11. #define TOS_CFG_MMHEAP_EN               1u

  12. #define TOS_CFG_MMHEAP_DEFAULT_POOL_SIZE        0x8000

  13. #define TOS_CFG_MUTEX_EN                1u

  14. #define TOS_CFG_TIMER_EN                1u

  15. #define TOS_CFG_PWR_MGR_EN              0u

  16. #define TOS_CFG_TICKLESS_EN             0u

  17. #define TOS_CFG_SEM_EN                  1u

  18. #define TOS_CFG_TASK_STACK_DRAUGHT_DEPTH_DETACT_EN      1u

  19. #define TOS_CFG_FAULT_BACKTRACE_EN      0u

  20. #define TOS_CFG_IDLE_TASK_STK_SIZE      512u

  21. #define TOS_CFG_CPU_TICK_PER_SECOND     1000u

  22. #define TOS_CFG_CPU_CLOCK               (SystemCoreClock)

  23. #define TOS_CFG_TIMER_AS_PROC           1u

  24. #define TOS_CFG_MAIL_QUEUE_EN           1u

  25. #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的心跳包,内容如下:
  1. /*!
  2.     \brief      this function handles SysTick exception
  3.     \param[in]  none
  4.     \param[out] none
  5.     \retval     none
  6. */
  7. void SysTick_Handler(void)
  8. {
  9.     delay_decrement();
  10.         if(tos_knl_is_running())
  11.         {
  12.                 tos_knl_irq_enter();
  13.                 tos_tick_handler();
  14.                 tos_knl_irq_leave();
  15.         }
  16. }
到此我们的TobudOS代码移植就结束了,我在main.c中添加两个任务,来验证是否移植成功:
  1. void test_task(void *Parameter)
  2. {
  3.         while(1)
  4.         {
  5.                 TG_LED1;
  6.                 tos_task_delay(1000);
  7.         }
  8. }

  9. void led_task_entry(void *Parameter)
  10. {

  11.         while(1)
  12.         {
  13.                 TG_LED2;
  14.                 tos_task_delay(500);
  15.                
  16.         }
  17.         

  18. }
任务1为1秒翻译一次LED灯,任务2为0.5秒翻转一次LED2。
并在主任务中初始化这两个任务:
  1. tos_knl_init();
  2.         err = tos_task_create(&task, "task1",test_task,NULL, 2, task_stack,1024,20);
  3.         err = tos_task_create(&led_task, "task_led",led_task_entry,NULL, 2, task_stack_led,1024,20);
  4.         tos_knl_start();

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