Cortex M23 移植TencentOS tiny

  • 准备源码和工具
  • 准备硬件、软件
  • 移植开始

准备源码和工具

TencentOS tiny的源码地址在这: TencentOS tiny.
MDK软件下载在这:MDK5.28 已有MDK请忽略
项目需要的资料我已经上传 M251_Sourse

准备硬件、软件

硬件:
1个新唐 Numaker_M251_252SD demo板,如果你有其他板子,只要是M251或者M252都可以,可以正常下程序的
1个Nulink 用来下载程序的

软件:
TencentOS tiny代码包
我上传的资料包里边的Nu-Link_Keil_Driver 3.00.6909.exe一路安装,提示是否需要加入软件包的时候点确定即可
解压M251_252_Series_BSP_CMSIS_V3.00.002.zip备用,以下是先把一个裸机工程的必须文件提取,如下
桌面新建一个文件夹名为Nuvoton Tos(随意),然后新建如下几个文件

TencentOS里边新建三个文件夹 arch 、kernel、TOS_CONFIG这三个文件夹

然后先拷贝CMSIS文件,把M251_252_Series_BSP_CMSIS_V3.00.002图中三个文件拷贝到工程的CMSIS下

到M251_252_Series_BSP_CMSIS_V3.00.002中复制图中红框内的文件夹和文件到工程的STARTUP文件夹内


然后进入ARM文件夹内,复制startup_M251.s

然后把整个外设驱动文件夹内全部复制到工程的StdDriver内

最后到TencentOS tiny的移植
进入TencentOS tiny 文件夹 \TencentOS-tiny\arch\arm\arm-v7m\common 和
\TencentOS-tiny\arch\arm\arm-v7m\cortex-m0+\armcc
复制框中的文件夹到工程的TencentOS 的 arch内 这些就是操作系统和内核的接口文件


然后把 kernel内的所有文件复制到工程的kernel内这些就是实现操作系统的底层文件


TOS_CONFIG 文件夹内的文件在 \TencentOS-tiny\board\TencentOS_tiny_EVB_MX\TOS-CONFIG
把它复制到工程的TOS_CONFIG 文件夹内

这样准备工作就基本完成,接下来就是移植了

移植开始

打开MDK 新建一个工程 然后把工程保存到工程Project文件夹内,名字随意取


接下来是选择目标单片机,我这里是M251KG6AE,看你的板子是什么单片机就选什么单片机

然后勾选CMSIS的CORE

一个空工程模板就建好了,接下来要放入文件,添加对应对应文件夹内的代码

这是添加好的代码 红框内的文件是在kernel 的 pm文件夹内,此时USER文件夹内是空的,需要新建一个main.c文件

新建main.c 放入以下代码,里面就是初始化系统,选择时钟源,然后创建两个任务

#include "stdio.h"
#include "NuMicro.h"
#include "tos.h"#define task1_size   512  //任务1堆栈大小
#define oled_size    1024k_task_t task1;   //任务1结构体
k_task_t oled_task;      //显示任务结构体k_stack_t task1_stack[task1_size]; //任务1堆栈
k_stack_t oled_stack[oled_size];   //任务2的堆栈大小void SYS_Init(void)
{/*---------------------------------------------------------------------------------------------------------*//* Init System Clock                                                                                       *//*---------------------------------------------------------------------------------------------------------*//* Unlock protected registers */SYS_UnlockReg();/* Set XT1_OUT(PF.2) and XT1_IN(PF.3) to input mode to prevent leakage  */PF->MODE &= ~(GPIO_MODE_MODE2_Msk | GPIO_MODE_MODE3_Msk);/* Disable digital input path of analog pin XT1_OUT to prevent leakage */GPIO_DISABLE_DIGITAL_PATH(PF, BIT2 | BIT3);/* Enable, HXT  clock */CLK_EnableXtalRC(CLK_PWRCTL_HXTEN_Msk);       /* Switch HCLK clock source to PLL */CLK_SetHCLK(CLK_CLKSEL0_HCLKSEL_HXT, CLK_CLKDIV0_HCLK(1));  //这里选择外部晶振,DEMO板子上的是32M/* Set the core clock freq*/CLK_SetCoreClock(FREQ_32MHZ);   //这里是设定内核的时钟频率,实测不能倍频,只能小于或等于你的外部晶振的频率 /* Enable UART module clock */CLK_EnableModuleClock(UART0_MODULE);/* Select UART module clock source as HIRC and UART module clock divider as 1 */CLK_SetModuleClock(UART0_MODULE, CLK_CLKSEL1_UART0SEL_HIRC,   CLK_CLKDIV0_UART0(1));/*---------------------------------------------------------------------------------------------------------*//* Init I/O Multi-function                                                                                 *//*---------------------------------------------------------------------------------------------------------*/Uart0DefaultMPF();}void UART0_Init()
{/*---------------------------------------------------------------------------------------------------------*//* Init UART                                                                                               *//*---------------------------------------------------------------------------------------------------------*//* Reset UART module */SYS_ResetModule(UART0_RST);/* Configure UART0 and set UART0 baud rate */UART_Open(UART0, 115200);
}void task1_fun(void *Parameter)
{while(1){printf("Task1 :移植CORTEX-M23成功\r\n"); PB14 =~ PB14;     //板子上的LED灯tos_task_delay(1000);  //延时1s}}//*OLED显示任务函数
void oled_display_task(void *Parameter)
{k_err_t err;while(1){              printf("Task2 请欢呼雀跃,谢谢\r\n");      tos_task_delay(100);   //100mS刷新 }
}int main()
{k_err_t err;/* Unlock protected registers */SYS_UnlockReg();  //解锁时钟保护寄存器/* Init System, peripheral clock and multi-function I/O */SYS_Init();     tos_knl_init();   //tos init 系统初始化是包含初始化滴答定时器,所以必须在时钟保护寄存器解锁后调用  /* Lock protected registers */SYS_LockReg();      //上锁/* Init UART0 for printf */UART0_Init();GPIO_SetMode(PB, BIT14, GPIO_MODE_OUTPUT);err = tos_task_create(&task1,"Task1",task1_fun,NULL,2,task1_stack,task1_size,100);err = tos_task_create(&oled_task,                 //内核任务的结构体"display",              //任务的名字的指针oled_display_task,            //任务实体函数入口NULL,                     //传递给任务函数的参数2,              //优先级  数字越小优先级越大oled_stack,        //任务在运行时使用的栈空间的起始地址oled_size,            //任务堆栈大小100);                       //时间片轮转机制下当前任务的时间片大小。当timeslice为0时,任务调度时间片会被设置为默认大小(TOS_CFG_CPU_TICK_PER_SECOND / 10),系统时钟滴答(systick)数 / 10。          if(err != K_ERR_NONE)printf("TenentOS creat task fail! code is %d\r\n",err);tos_knl_start(); //Start TOS TINY
}

保存到工程文件夹Project内,然后再添加到MDK USER中即可

然后包含头文件如图:

接下来是修改核心文件,先构建系统滴答定时器的中断服务函数
在 system_M251.c 文件中包含Tos头文件 在最下面添加中断服务

修改串口的引脚,在该文件的最下面,我的demo板子是用的uart0,引脚对应的是A0 A1,所以修改一下

void Uart0DefaultMPF(void)
{/* Set GPB multi-function pins for UART0 RXD and TXD *///  SYS->GPB_MFPH = (SYS->GPB_MFPH & ~SYS_GPB_MFPH_PB12MFP_Msk) | SYS_GPB_MFPH_PB12MFP_UART0_RXD;//   SYS->GPB_MFPH = (SYS->GPB_MFPH & ~SYS_GPB_MFPH_PB13MFP_Msk) | SYS_GPB_MFPH_PB13MFP_UART0_TXD;   SYS->GPA_MFPL = (SYS->GPA_MFPL & ~SYS_GPA_MFPL_PA0MFP_Msk) | SYS_GPA_MFPL_PA0MFP_UART0_RXD;SYS->GPA_MFPL = (SYS->GPA_MFPL & ~SYS_GPA_MFPL_PA1MFP_Msk) | SYS_GPA_MFPL_PA1MFP_UART0_TXD;
}

然后在串口函数下面添加滴答定时器的中断服务函数


//systick 中断处理函数
void SysTick_Handler(void)
{if (tos_knl_is_running()){tos_knl_irq_enter();tos_tick_handler();      //系统的心跳tos_knl_irq_leave();}
}

修改内核头文件:打开port_c.c文件,修改单片机内核头文件

然后修改tos_config文件

还有下面的设置系统的时钟频率的,这里要和单片机设定的内核时钟频率移植,否则会出现时间不准确的现象。

然后编译


然后就下载到板子上,先选择仿真器,并对仿真器进行设置:

然后把USB-TTl,链接PA0 PA1,打开串口调试助手,设置115200波特率,打开串口,然后按一下板子上的复位键,即可看到串口打印任务1 和 任务2 ,任务1是每秒打印,任务2是100ms打印,然后板子上的LED灯每秒交替亮灭,说明系统正常跑

到这里,TencentOS tiny 移植新塘M251 cortex-M23内核成功!

最后献上代码 点我

我也开始使用github了,代码在gihub上也有
GITHUB

新唐M251 CORTEX-M23内核移植TencentOS tiny教程相关推荐

  1. 新唐ARM®Cortex™-M0特点总结

    ARM®CortexTM-M0特点: 主频50mhz主频,0.9DMIPS/MHz(相当于8位和16位产品的2-4倍) 小的处理内核,系统和存储器,可以降低器件成本 完善的电源管理(睡眠,深度睡眠和深 ...

  2. 腾讯物联网系统TOS,内核移植起来比你想象的要简单

    关注.星标公众号,不错过精彩内容 可能很多人都听说了,就在前几天,腾讯公布了面向物联网领域开发的实时操作系统:TencentOS tiny. 一.介绍 TencentOS tiny的内核就是一个RTO ...

  3. MQTT移植到stm32开发板——使用TencentOS tiny操作系统

    mqttclient 一个高性能.高稳定性的跨平台MQTT客户端 一个高性能.高稳定性的跨平台MQTT客户端,基于socket API之上开发,可以在嵌入式设备(FreeRTOS/LiteOS/RT- ...

  4. AIoT应用创新大赛-基于TencentOS Tiny 的遥控小车

    AIoT应用创新大赛-基于TencentOS Tiny 的遥控小车 - 云+社区 - 腾讯云https://cloud.tencent.com/developer/article/1951791 一, ...

  5. 物联网终端操作系统 TencentOS Tiny

    TencentOS tiny 是腾讯面向物联网领域开发的实时操作系统,具有低功耗,低资源占用,模块化,安全可靠等特点,可有效提升物联网终端产品开发效率.TencentOS tiny 提供精简的 RTO ...

  6. 物联网开发——TencentOS Tiny 简介

    TencentOS tiny是腾讯面向物联网领域开发的实时操作系统,具有低功耗,低资源占用,模块化,安全可靠等特点,可有效提升物联网终端产品开发效率.TencentOS tiny 提供精简的 RTOS ...

  7. 腾讯开源物联网操作系统 TencentOS tiny,最小体积 1.8KB!

    作者 | 胡巍巍 责编 | 伍杏玲 出品 | CSDN(ID:CSDNnews) 2010年秋,笔者还在念书,有一天,几个男生在讨论"3Q大战",还有几天就18岁的我,表示很懵懂. ...

  8. 新唐单片机移植RT-Thread,Finsh组件的接口函数编写

    提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言 一.RTT的移植 二.具体函数代码 1.rt_hw_console_output的编写 2.rt_hw_console ...

  9. 重磅!兆易创新推出中国首款Cortex®-M7内核超高性能MCU GD32H737/757/759系列

    关注.星标公众号,精彩内容每日送达 来源:网络素材 中国北京(2023年5月11日)--业界领先的半导体器件供应商兆易创新GigaDevice (股票代码 603986) 今日宣布,正式推出中国首款基 ...

最新文章

  1. 轻量级HTTP服务器Nginx
  2. 【Git报错】 ! [rejected] master - master (fetch first)
  3. Debain/ArchLinux/Gentoo 等将合并为超级Linux
  4. python基础单词-学习Python必背的初级单词有哪些?
  5. 常用的NSLOG日志打印格式
  6. 如何在jieba分词中加自定义词典_Pyspark Word2Vec + jieba 训练词向量流程
  7. spark基础之存储原理
  8. 腾讯网游加速器大升级!5月31日起仅支持国服游戏加速 你用过吗?
  9. VB6的后期绑定和前期绑定
  10. JavaScript面向对象 - 严格模式
  11. 定点运算之补码一位乘法(Booth算法)
  12. C语言如何统计程序运行时间
  13. 取地址符和指针*的认识
  14. CSP赛前集训 【DD头子张京华】
  15. asp.net 下载文件几种方式
  16. Linux命令调整显存,nVidia多显卡多GPU在Linux下的超频设置
  17. 返回ajax有几种方式,java ajax返回 Json 的 几种方式
  18. 无头浏览器和抓取-解决方案
  19. 奇安信渗透测试工程师试题(2020)
  20. 【Ian Goodfellow课件】卷积网络

热门文章

  1. 十二个“一”的演义小故事
  2. RT-Thread柿饼控件(4)-- Card
  3. JSP界面——背景图片
  4. Flutter之路由与导航
  5. 安装arm_qt交叉编译环境(亲测有效)
  6. 6-29 水上飞机(*) (20分)多重继承
  7. java pdf 图片_java实现PDF转图片的方法
  8. Linux 桌面玩家指南:02. 以最简洁的方式打造实用的 Vim 环境
  9. wps 写论文时 参考文献的横线怎么消除
  10. 计算机打印机密码怎么设置,如何设置电脑开机密码(电脑如何安装打印机)