[开发板与模块] 【ESK32-30519 + ESK32-21001测评】+它来了 (TencentOS tiny)

[复制链接]
 楼主| 夜声 发表于 2022-9-11 22:32 | 显示全部楼层 |阅读模式
<
本帖最后由 eltonchang2001 于 2022-11-9 14:01 编辑

[url=home.php?mod=space&uid=760190]@21小跑堂 #申请原创#[/url]

腾讯物联网终端操作系统(TencentOS tiny)是腾讯面向物联网领域开发的实时操作系统,具有低功耗,低资源占用,模块化,安全可靠等特点,可有效提升物联网终端产品开发效率。TencentOS tiny 提供精简的 RTOS 内核,内核组件可裁剪可配置,可快速移植到多种主流 MCU 及模组芯片上。而且,基于RTOS内核提供了丰富的物联网组件,内部集成主流物联网协议栈(如 CoAP/MQTT/TLS/DTLS/LoRaWAN/NB-IoT 等),可助力物联网终端设备及业务快速接入腾讯云物联网平台。这是官网 https://cloud.tencent.com/product/tos-tiny,接下来开始移植。首先要准备一个带有基本外设的工程,有串口,LED灯就可以了,使用的是官方给的例子。下载TencentOS的源码,如下所示:
Tencent.jpg 上面画框的是我们需要的部分,由于本次芯片是m0+的,所以在架构选择arm-v7a,删掉不用的部分,避免工程过大。接下来直接keil里面添加源码。如下所示:
源码.jpg 源码1.jpg

源码添加完成后需要添加头文件路径
头文件路径.jpg
接下来特别重要的一步,需要选择C99mode ,不然编译的时候可以看到900个错误。
C99.jpg
接下来需要对ht32f5xxxxit.h中的函数进行处理。
//void SVC_Handler(void)
//{
//}

/*********************************************************************************************************//**
* @brief   This function handles PendSVC exception.
* @retval  None
************************************************************************************************************/
//void PendSV_Handler(void)
//{
//}

/*********************************************************************************************************//**
* @brief   This function handles SysTick Handler.
* @retval  None
************************************************************************************************************/
void SysTick_Handler(void)
{
         if (tos_knl_is_running())
  {
    tos_knl_irq_enter();
    tos_tick_handler();
    tos_knl_irq_leave();
  }
}

接下来需要创建一个OS的配置裁剪文件,Tos_config.h
  1. #ifndef _TOS_CONFIG_H_
  2. #define  _TOS_CONFIG_H_

  3. #include "ht32.h"        // 目标芯片头文件,用户需要根据情况更改
  4. #include <stdio.h>

  5. #define TOS_CFG_TASK_PRIO_MAX           10u         // 配置TencentOS tiny默认支持的最大优先级数量

  6. #define TOS_CFG_ROUND_ROBIN_EN          0u                // 配置TencentOS tiny的内核是否开启时间片轮转

  7. #define TOS_CFG_OBJECT_VERIFY_EN           1u        // 配置TencentOS tiny是否校验指针合法

  8. #define TOS_CFG_TASK_DYNAMIC_CREATE_EN  0u                // TencentOS tiny 动态任务创建功能宏

  9. #define TOS_CFG_EVENT_EN                1u                // TencentOS tiny 事件模块功能宏

  10. #define TOS_CFG_MMBLK_EN                1u                //配置TencentOS tiny是否开启内存块管理模块

  11. #define TOS_CFG_MMHEAP_EN               1u                //配置TencentOS tiny是否开启动态内存模块

  12. #define TOS_CFG_MMHEAP_DEFAULT_POOL_EN  1u                // TencentOS tiny 默认动态内存池功能宏

  13. #define TOS_CFG_MMHEAP_DEFAULT_POOL_SIZE        0x100        // 配置TencentOS tiny默认动态内存池大小

  14. #define TOS_CFG_MUTEX_EN                1u                // 配置TencentOS tiny是否开启互斥锁模块

  15. #define TOS_CFG_MESSAGE_QUEUE_EN        1u                // 配置TencentOS tiny是否开启消息队列模块

  16. #define TOS_CFG_MAIL_QUEUE_EN           1u                // 配置TencentOS tiny是否开启消息邮箱模块

  17. #define TOS_CFG_PRIORITY_MESSAGE_QUEUE_EN        1u        // 配置TencentOS tiny是否开启优先级消息队列模块

  18. #define TOS_CFG_PRIORITY_MAIL_QUEUE_EN        1u                // 配置TencentOS tiny是否开启优先级消息邮箱模块

  19. #define TOS_CFG_TIMER_EN                1u                // 配置TencentOS tiny是否开启软件定时器模块

  20. #define TOS_CFG_PWR_MGR_EN              0u                // 配置TencentOS tiny是否开启外设电源管理模块

  21. #define TOS_CFG_TICKLESS_EN             0u                // 配置Tickless 低功耗模块开关

  22. #define TOS_CFG_SEM_EN                  1u                // 配置TencentOS tiny是否开启信号量模块

  23. #define TOS_CFG_TASK_STACK_DRAUGHT_DEPTH_DETACT_EN      1u        // 配置TencentOS tiny是否开启任务栈深度检测

  24. #define TOS_CFG_FAULT_BACKTRACE_EN      0u                // 配置TencentOS tiny是否开启异常栈回溯功能

  25. #define TOS_CFG_IDLE_TASK_STK_SIZE      128u        // 配置TencentOS tiny空闲任务栈大小

  26. #define TOS_CFG_CPU_TICK_PER_SECOND     1000u        // 配置TencentOS tiny的tick频率

  27. #define TOS_CFG_CPU_CLOCK               (60000000)        // 配置TencentOS tiny CPU频率

  28. #define TOS_CFG_TIMER_AS_PROC           1u                // 配置是否将TIMER配置成函数模式

  29. #endif
完成之后就可以创建线程,启动OS了,如下所示:
  1. /*********************************************************************************************************//**
  2. * [url=home.php?mod=space&uid=288409]@file[/url]    IP/Example/main.c
  3. * [url=home.php?mod=space&uid=895143]@version[/url] $Rev:: 4869         $
  4. * [url=home.php?mod=space&uid=212281]@date[/url]    $Date:: 2020-08-05 #$
  5. * [url=home.php?mod=space&uid=247401]@brief[/url]   Main program.
  6. *************************************************************************************************************
  7. * @attention
  8. *
  9. * Firmware Disclaimer Information
  10. *
  11. * 1. The customer hereby acknowledges and agrees that the program technical documentation, including the
  12. *    code, which is supplied by Holtek Semiconductor Inc., (hereinafter referred to as "HOLTEK") is the
  13. *    proprietary and confidential intellectual property of HOLTEK, and is protected by copyright law and
  14. *    other intellectual property laws.
  15. *
  16. * 2. The customer hereby acknowledges and agrees that the program technical documentation, including the
  17. *    code, is confidential information belonging to HOLTEK, and must not be disclosed to any third parties
  18. *    other than HOLTEK and the customer.
  19. *
  20. * 3. The program technical documentation, including the code, is provided "as is" and for customer reference
  21. *    only. After delivery by HOLTEK, the customer shall use the program technical documentation, including
  22. *    the code, at their own risk. HOLTEK disclaims any expressed, implied or statutory warranties, including
  23. *    the warranties of merchantability, satisfactory quality and fitness for a particular purpose.
  24. *
  25. * <h2><center>Copyright (C) Holtek Semiconductor Inc. All rights reserved</center></h2>
  26. ************************************************************************************************************/
  27. // <<< Use Configuration Wizard in Context Menu >>>

  28. /* Includes ------------------------------------------------------------------------------------------------*/
  29. #include "ht32.h"
  30. #include "ht32_board.h"
  31. #include "tos_k.h"


  32. k_task_t task;

  33. k_stack_t task_stack[512];

  34. void test_task(void *Parameter)
  35. {
  36.     while(1)
  37.     {
  38.        printf("task is run!\r\n");
  39.            HT32F_DVB_LEDToggle(HT_LED1);
  40.        HT32F_DVB_LEDToggle(HT_LED2);
  41.        tos_task_delay(1000);
  42.     }
  43. }





  44. void NVIC_Configuration(void);
  45. void CKCU_Configuration(void);
  46. void GPIO_Configuration(void);
  47. #if (ENABLE_CKOUT == 1)
  48. void CKOUTConfig(void);
  49. #endif

  50. static void __Delay(u32 count);


  51. int main(void)
  52. {
  53.   
  54.   k_err_t err;
  55.   NVIC_Configuration();               /* NVIC configuration                                                 */
  56.   CKCU_Configuration();               /* System Related configuration                                       */
  57.   GPIO_Configuration();               /* GPIO Related configuration                                         */
  58.   RETARGET_Configuration();           /* Retarget Related configuration                                     */

  59.   HT32F_DVB_LEDInit(HT_LED1);
  60.   HT32F_DVB_LEDInit(HT_LED2);
  61.   HT32F_DVB_LEDInit(HT_LED3);
  62.   HT32F_DVB_LEDOn(HT_LED1);
  63.   HT32F_DVB_LEDOff(HT_LED2);
  64.   HT32F_DVB_LEDOn(HT_LED3);
  65.   printf("Welcome to TencentOS tiny\r\n");
  66.   tos_knl_init(); // TOS Tiny kernel initialize
  67. //                                       
  68.     err = tos_task_create(&task,  "task1",  test_task,  NULL, 2,task_stack,512,20);


  69.     if(err != K_ERR_NONE)
  70.         printf("TencentOS Create task fail! code : %d \r\n",err);
  71.     if(err==K_ERR_NONE)
  72.                 printf("TencentOS Create task success!\r\n");
  73.     tos_knl_start(); // Start TOS Tiny
  74. }

  75. /*********************************************************************************************************//**
  76.   * [url=home.php?mod=space&uid=247401]@brief[/url]  Configure the NVIC vector table.
  77.   * @retval None
  78.   ***********************************************************************************************************/
  79. void NVIC_Configuration(void)
  80. {
  81.   NVIC_SetVectorTable(NVIC_VECTTABLE_FLASH, 0x0);     /* Set the Vector Table base location at 0x00000000   */
  82. }

  83. /*********************************************************************************************************//**
  84.   * @brief  Configure the system clocks.
  85.   * @retval None
  86.   ***********************************************************************************************************/
  87. void CKCU_Configuration(void)
  88. {
  89. /*
  90. //<e0> Enable Peripheral Clock
  91. //  <h> Communication
  92. //    <q5> EBI
  93. //    <q11> I2C0   <q12> I2C1
  94. //    <q23> I2S
  95. //    <q21> SCI0 <q22> SCI1
  96. //    <q13> SPI0   <q14> SPI1
  97. //    <q17> UART0  <q18> UART1
  98. //    <q15> USART0 <q16> USART1
  99. //    <q3>  USB
  100. //  </h>
  101. //  <h> IO
  102. //    <q7> GPIO Port A <q8>  GPIO Port B <q9>  GPIO Port C <q10>  GPIO Port D
  103. //    <q19> AFIO
  104. //    <q20> EXTI
  105. //  </h>
  106. //  <h> System
  107. //    <q32> ADC
  108. //    <q4>  CKREF
  109. //    <q6>  CRC
  110. //    <q31> CMP
  111. //    <q2>  PDMA
  112. //    <q26> PWRCU
  113. //  </h>
  114. //  <h> Timer
  115. //    <q29> BFTM0 <q30> BFTM1
  116. //    <q33> SCTM0 <q34> SCTM1 <q35> SCTM2 <q36> SCTM3
  117. //    <q27> GPTM0 <q28> GPTM1
  118. //    <q24> MCTM0
  119. //    <q26> RTC   <q25> WDT
  120. //  </h>
  121. //</e>
  122. */
  123. #if 1
  124.   CKCU_PeripClockConfig_TypeDef CKCUClock = {{ 0 }};
  125.   CKCUClock.Bit.PDMA       = 0;
  126.   CKCUClock.Bit.USBD       = 0;
  127.   CKCUClock.Bit.CKREF      = 0;
  128.   CKCUClock.Bit.EBI        = 0;
  129.   CKCUClock.Bit.CRC        = 0;
  130.   CKCUClock.Bit.PA         = 0;
  131.   CKCUClock.Bit.PB         = 0;
  132.   CKCUClock.Bit.PC         = 0;
  133.   CKCUClock.Bit.PD         = 0;
  134.   CKCUClock.Bit.I2C0       = 0;
  135.   CKCUClock.Bit.I2C1       = 0;
  136.   CKCUClock.Bit.SPI0       = 0;
  137.   CKCUClock.Bit.SPI1       = 0;
  138.   CKCUClock.Bit.USART0     = 1;
  139.   CKCUClock.Bit.USART1     = 1;
  140.   CKCUClock.Bit.UART0      = 1;
  141.   CKCUClock.Bit.UART1      = 1;
  142.   CKCUClock.Bit.AFIO       = 1;
  143.   CKCUClock.Bit.EXTI       = 0;
  144.   CKCUClock.Bit.SCI0       = 0;
  145.   CKCUClock.Bit.SCI1       = 0;
  146.   CKCUClock.Bit.I2S        = 0;
  147.   CKCUClock.Bit.MCTM0      = 0;
  148.   CKCUClock.Bit.WDT        = 0;
  149.   CKCUClock.Bit.BKP        = 0;
  150.   CKCUClock.Bit.GPTM0      = 0;
  151.   CKCUClock.Bit.GPTM1      = 0;
  152.   CKCUClock.Bit.BFTM0      = 0;
  153.   CKCUClock.Bit.BFTM1      = 0;
  154.   CKCUClock.Bit.CMP        = 0;
  155.   CKCUClock.Bit.ADC        = 0;
  156.   CKCUClock.Bit.SCTM0      = 0;
  157.   CKCUClock.Bit.SCTM1      = 0;
  158.   CKCUClock.Bit.SCTM2      = 0;
  159.   CKCUClock.Bit.SCTM3      = 0;
  160.   CKCU_PeripClockConfig(CKCUClock, ENABLE);
  161. #endif

  162. #if (ENABLE_CKOUT == 1)
  163.   CKOUTConfig();
  164. #endif
  165. }

  166. #if (ENABLE_CKOUT == 1)
  167. /*********************************************************************************************************//**
  168.   * @brief  Configure the debug output clock.
  169.   * @retval None
  170.   ***********************************************************************************************************/
  171. void CKOUTConfig(void)
  172. {
  173.   { /* Enable peripheral clock                                                                              */
  174.     CKCU_PeripClockConfig_TypeDef CKCUClock = {{ 0 }};
  175.     CKCUClock.Bit.AFIO = 1;
  176.     CKCU_PeripClockConfig(CKCUClock, ENABLE);
  177.   }

  178.   AFIO_GPxConfig(GPIO_PA, AFIO_PIN_9, AFIO_MODE_15);

  179.   { /* Configure CKOUT                                                                                      */
  180.     CKCU_CKOUTInitTypeDef CKOUTInit;
  181.     CKOUTInit.CKOUTSRC = CKCU_CKOUTSRC_HCLK_DIV16;
  182.     CKCU_CKOUTConfig(&CKOUTInit);
  183.   }
  184. }
  185. #endif

  186. /*********************************************************************************************************//**
  187.   * @brief  Configure the GPIO ports.
  188.   * @retval None
  189.   ***********************************************************************************************************/
  190. void GPIO_Configuration(void)
  191. {
  192.   /* !!! NOTICE !!!
  193.      Shall be modified according to the part number.
  194.   */
  195. #if (RETARGET_PORT == RETARGET_USART0)
  196.   //AFIO_GPxConfig(GPIO_PA, AFIO_PIN_2 | AFIO_PIN_3, AFIO_FUN_USART_UART);
  197. #endif

  198. #if (RETARGET_PORT == RETARGET_USART1)
  199.   //AFIO_GPxConfig(GPIO_PA, AFIO_PIN_4 | AFIO_PIN_5, AFIO_FUN_USART_UART);
  200. #endif

  201. #if (RETARGET_PORT == RETARGET_UART0)
  202.   //AFIO_GPxConfig(GPIO_PC, AFIO_PIN_4 | AFIO_PIN_5, AFIO_FUN_USART_UART);
  203. #endif

  204. #if (RETARGET_PORT == RETARGET_UART1)
  205.   //AFIO_GPxConfig(GPIO_PC, AFIO_PIN_1 | AFIO_PIN_3, AFIO_FUN_USART_UART);
  206. #endif
  207. }

  208. #if (HT32_LIB_DEBUG == 1)
  209. /*********************************************************************************************************//**
  210.   * @brief  Report both the error name of the source file and the source line number.
  211.   * @param  filename: pointer to the source file name.
  212.   * @param  uline: error line source number.
  213.   * @retval None
  214.   ***********************************************************************************************************/
  215. void assert_error(u8* filename, u32 uline)
  216. {
  217.   /*
  218.      This function is called by IP library that the invalid parameters has been passed to the library API.
  219.      Debug message can be added here.
  220.      Example: printf("Parameter Error: file %s on line %d\r\n", filename, uline);
  221.   */

  222.   while (1)
  223.   {
  224.   }
  225. }
  226. #endif

  227. /* Private functions ---------------------------------------------------------------------------------------*/
  228. /*********************************************************************************************************//**
  229.   * @brief  delay function
  230.   * @param  count: delay count for loop
  231.   * @retval None
  232.   ***********************************************************************************************************/
  233. static void __Delay(u32 count)
  234. {
  235.   while (count--)
  236.   {
  237.     __NOP(); // Prevent delay loop be optimized
  238.   }
  239. }


  240. /**
  241.   * @}
  242.   */

  243. /**
  244.   * @}
  245.   */

  246. /**
  247.   * @}
  248.   */
接下来看串口输出的结果:
结果.jpg
   
gouguoccc 发表于 2022-9-11 23:13 来自手机 | 显示全部楼层
现在操作系统满天飞啊
海滨消消 发表于 2022-9-13 15:10 来自手机 | 显示全部楼层
腾讯是什么也开始搞物联网操作系统的
Stahan 发表于 2022-9-13 21:18 | 显示全部楼层
腾讯也有物联网操作系统了?

评论

对的  发表于 2022-9-13 22:02
chenci2013 发表于 2022-10-1 12:53 | 显示全部楼层
TencentOS tiny 是腾讯面向物联网领域开发的实时操作系统
zerorobert 发表于 2022-10-1 13:15 | 显示全部楼层
合适的任务栈大小是多少               
aspoke 发表于 2022-10-1 13:36 | 显示全部楼层
腾讯task是什么配置               
mattlincoln 发表于 2022-10-1 14:12 | 显示全部楼层
这个有AT组件可以使用的              
quickman 发表于 2022-10-1 14:52 | 显示全部楼层
低功耗,低资源占用,模块化,安全可靠
alvpeg 发表于 2022-10-1 15:43 | 显示全部楼层
tencent os tiny难吗
10299823 发表于 2022-10-5 16:43 | 显示全部楼层
使用了任务栈多少字节                 
lzbf 发表于 2022-10-5 17:35 | 显示全部楼层
这个占用多大的内存呢?                 
yujielun 发表于 2022-10-5 18:44 | 显示全部楼层
在使用最多字节的基础上多分配一部分空间,就是一个合适的任务栈大小。
typeof 发表于 2022-10-5 19:42 | 显示全部楼层
可大幅降低物联网应用开发成本  
1988020566 发表于 2022-10-9 20:03 | 显示全部楼层
低功耗,低资源占用,模块化,安全可靠  
sanfuzi 发表于 2022-10-9 20:57 | 显示全部楼层
TencentOStiny是腾讯面向物联网领域开发的实时终端操作系统
lzmm 发表于 2022-10-9 21:52 | 显示全部楼层
这个教程在哪里下载 呢     
selongli 发表于 2022-10-10 17:45 | 显示全部楼层
nb-iot采用什么技术降低功耗
mikewalpole 发表于 2022-10-10 20:00 | 显示全部楼层
这个对单片机有什么要求呢?               
touser 发表于 2022-10-10 20:50 | 显示全部楼层
适用于哪些类型的场景?                 
您需要登录后才可以回帖 登录 | 注册

本版积分规则

27

主题

89

帖子

2

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