#申请原创# #有奖活动# @21小跑堂 【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、下载开发包:ftp://download.nationstec
下载后打开,找到Keil的安装包,目录为:\N32G401xx_V1.0.0\6.Software Development Kit
安装pack包,双击后会找到默认的keil包地址,一路next就完成了MDK包的安装。
2、解压SDK包,在pack包的目录下有压缩文件,打开后可以得官方提供的驱动库以及示例工程:
其的目录比较新,可以把包复制到上几层目录,方例查找。
6、打开示例工程中的printf示例,这个示例帮我们生成了串品打印的工程,我们在这个工程中来实现TobudOS的移植。
7、我打开工程将例程下载到开发板,保存能打印出信息,我这里在串品助手中出现如下信息,说明工程一切正常。
USART Printf Example: retarget the C library printf function to the USART
【ToboudOS移植】
1、我们需要去下载源码,网址为:TobudOS-AtomGit
2、下载好源码后,我们在工程中新建一个os的文件夹,用于存放需要的文件。
3、把源码中的arch、core、osal三个文件夹放到os目录中。
4、同时新建os_config文件夹用于存放配置文件。
5、在MDK工程中新建三个项目组。分别为OS/arch、OS/kernel、OS/config:
6、添加内核需要的文件到工程中,从keil的工程中我们看到N32G401为arm_M4F内核。
所以我把\os\arch\arm\arm-v7m\cortex-m4\armcc下在的两文件port_c.c 、port_s.S添加进工程。
同时把\os\arch\arm\arm-v7m\common下面的tos_cpu.c、tos_fault.c添加进arch的分组中:
如果大家要想文件夹内容小,可以把arch下其的文件删掉。
7、添加kernel工程分配,我们把\os\core下面所有的.c都添加kernel分组中。
同时把\os\osal\cmsis_os,下面的cmsis_os添加进工程。
8、从官方示例中下载一个config文件到config文件夹里,并把它添加进OS/config工程分组中。
9、添回文件头文件到工程中,如果下图所示:
10、打开配置钩选c99.
11、注释掉n32f401_it.c中的void PendSv_Handler函数,去除重复定义的错误。
12、添加#include "tos_k.h"头文件,并把TobudOS心跳到systick函数中:
void SysTick_Handler(void)
{
if(tos_knl_is_running())
{
tos_knl_irq_enter();
tos_tick_handler();
tos_knl_irq_leave();
}
}
13、其配置文件修改如下:
#ifndef _TOS_CONFIG_H_
#define _TOS_CONFIG_H_
#include "main.h"
#include <stdio.h>
extern uint32_t SystemClockFrequency;
#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 0x500
#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 (SystemClockFrequency)
#define TOS_CFG_TIMER_AS_PROC 1u
#define TOS_CFG_MAIL_QUEUE_EN 1u
#endif
【测试】
1、添加头文件#include "tos_k.h"的引用。
2、添加两个任务,分别人1秒、0.5秒的printf。内容如下:
k_task_t task, led_task;
k_stack_t task_stack[256], task_stack_led[256];
void test_task(void *Parameter)
{
while(1)
{
printf("hello tobuandOS task1\r\n");
tos_task_delay(1000);
}
}
void led_task_entry(void *Parameter)
{
while(1)
{
printf("hello tobuandOS task2\r\n");
tos_task_delay(500);
}
}
USART_InitType USART_InitStructure;
/**
*\*\name main.
*\*\fun Main program.
*\*\param none
*\*\return none
**/
int main(void)
{
k_err_t err;
RCC_ClocksType RCC_ClocksStatus;
/* System Clocks Configuration */
RCC_Configuration();
/* Configure the GPIO ports */
GPIO_Configuration();
RCC_Clocks_Frequencies_Value_Get(&RCC_ClocksStatus);
/* USARTy and USARTz configuration ------------------------------------------------------*/
USART_InitStructure.BaudRate = 115200;
USART_InitStructure.WordLength = USART_WL_8B;
USART_InitStructure.StopBits = USART_STPB_1;
USART_InitStructure.Parity = USART_PE_NO;
USART_InitStructure.HardwareFlowControl = USART_HFCTRL_NONE;
USART_InitStructure.Mode = USART_MODE_RX | USART_MODE_TX;
/* Configure USARTx */
USART_Initializes(USARTx, &USART_InitStructure);
/* Enable the USARTx */
USART_Enable(USARTx);
/* Output a message on Hyperterminal using printf function */
printf("\n\rUSART Printf Example: retarget the C library printf function to the USART\n\r");
tos_knl_init();
err = tos_task_create(&task, "task1",test_task,NULL, 2, task_stack,128,20);
err = tos_task_create(&led_task, "task_led",led_task_entry,NULL, 2, task_stack_led,256,20);
tos_knl_start();
while (1)
{
}
}
【实现效果】
下载到开发板后,串口中预想中输出的两个不同周期的打印效果。
【总结】
国产开源的TobudOS能做到体积小单版机里也可以跑的实时OS。移植方便、快捷!
|