合泰HT32F52352 RT-Thread操作系统移植

HT32F52352系列

该系列的Holtek单片机是一款基于ARM Cortex-M0+处理器内核的32-bit高性能低功耗单片机。Cortex-M0+是把嵌套向量中断控制器(NVIC)、系统节拍定时器(Systick Timer)和先进的调试支持紧紧结合在一起的新一代处理器内核。

该系列单片机可借助Flash加速器工作在高达48Mhz的频率下,以获得较大的频率。他提供128KB的嵌入式Flash存储器用作程序/数据存储,16KB的嵌入式SRAM存储器用作系统操作和应用程序运作。此系列单片机具有多种外设,如ADC、IIC、USART、UART、SPI、IIS、GPTM、MCTM、SCL、CRC-16/32、RTC、WDT、PDMA、EBI、USB2.0 FS、SW-DP(串行线调试端口)等。在唤醒延迟和功耗方面,几种省电模式提供了具有灵活性的较大优化方案,此举在低功耗应用方面尤为值得考虑。

以上这些特性使得该系列单片机可以广泛地适用于各种应用,如大型家用电器应用控制、电源监控、报警系统、消费类产品、手持式设备、数据记录应用、马达控制等。

官网:https://www.holtek.com.cn/web/guest/home

  1. 实时操作系统移植

RT-Thread Nano

RT-Thread Nano简介

RT-Thread Nano是一个极简版的硬实时内核,他是由C语言开发,采用面向对象的编程思维,具有良好的代码风格,是一款可裁剪的、抢占式实时多任务的RTOS。其内存资源占用极小,功能包括任务处理、软件定时器、信号量、邮箱和实时调度等相对完整的实时操作系统特性。适用于家电、消费类电子、医疗设备、工控等领域大量使用的32位ARM入门级MCU的场合。

图1.1 RT-Thread软件框图

上图是RT-Thread Nano的软件框图,包含支持的CPU架构与内核源码,还有可拆卸的FinSH组建。

支持架构:ARM:Cortex M0/M3/M4/M7等、RISC-V及其他。

功能:线程管理、线程间同步与通信、时钟管理、中断管理、内存管理。

移植步骤

1.准备一份裸机源码工程

2.下载RT-Thread Nano源码

RT-Thread官网下载网址:https://www.rt-thread.org/document/site/#/rt-thread-version/rt-thread-nano/nano-port-iar/an0040-nano-port-iar

3.添加RT-Thread Nano到工程

(1)在裸机工程下新建文件夹rtthread文件夹

(2)把Nano源码中的include、libcpu、src文件夹复制到裸机工程新建的rtthread文件夹下

(3)把Nano源码文件夹rtthread/bsp 中的board.c和rtconfig.h两个文件复制到裸机工程新建的rtthread文件夹下

(4)打开裸机工程,新建rtthread文件夹,并在分组下添加源码:

  • 添加工程下rtthread/src/文件夹所有文件到工程。

  • 添加工程下rtthread/libcpu/文件夹中相应内核的CPU移植文件及上下文切换文件:cpuport.c以及context_iar.S。

  • 添加rtthread/文件夹下的board.c。

4.添加头文件路径

5.适配RT-Thread Nano

中断和异常处理:

屏蔽工程中的异常处理函数HardFault_Handler()和悬挂处理函数PendSV_Handler()。

系统时钟配置:

需要在board.c中实现系统时钟配置。

解决报错问题:

需添加RTE-Components.h

/* RT-Thread config file */

#ifndef __RTTHREAD_CFG_H__
#define __RTTHREAD_CFG_H__

#include "RTE_Components.h"

#define RT_THREAD_PRIORITY_MAX  8

#define RT_TICK_PER_SECOND    1000

#define RT_ALIGN_SIZE   4

#define RT_NAME_MAX       16

#define RT_USING_COMPONENTS_INIT


#define RT_USING_USER_MAIN

#define RT_MAIN_THREAD_STACK_SIZE     612


#define RT_DEBUG
#define DBG_LEVEL         DBG_LOG
//#define RT_DEBUG_INIT 1

#define RT_USING_OVERFLOW_CHECK


#define RT_USING_HOOK

#define RT_USING_IDLE_HOOK

#define RT_USING_TIMER_SOFT         1
#if RT_USING_TIMER_SOFT == 0
#undef RT_USING_TIMER_SOFT
#endif

#define RT_TIMER_THREAD_PRIO        4

#define RT_TIMER_THREAD_STACK_SIZE    1024

#define RT_TIMER_TICK_PER_SECOND    1000

#define RT_USING_SEMAPHORE

#define RT_USING_MUTEX

#define RT_USING_EVENT

#define RT_USING_MAILBOX

#define RT_USING_SIGNALS

#define RT_USING_MESSAGEQUEUE

#define RT_USING_HEAP

#define RT_USING_SMALL_MEM

#define RT_USING_TINY_SIZE

#define RT_USING_MEMPOOL

#define RT_USING_MEMHEAP



#define RT_USING_CONSOLE

#define RT_CONSOLEBUF_SIZE          128

#define RT_CONSOLE_DEVICE_NAME      "uart0"



#if defined(RTE_FINSH_USING_MSH)
#define RT_USING_FINSH
#define FINSH_USING_MSH
#define FINSH_USING_MSH_ONLY

#define __FINSH_THREAD_PRIORITY     6
#define FINSH_THREAD_PRIORITY       (RT_THREAD_PRIORITY_MAX / 8 * __FINSH_THREAD_PRIORITY + 1)

#define FINSH_THREAD_STACK_SIZE     600

#define FINSH_HISTORY_LINES            5

#define FINSH_USING_SYMTAB

#endif

#if defined(RTE_USING_DEVICE)
#define RT_USING_DEVICE
#endif


#endif

(1)

(2)

(3)

(4)

(5)

(6)

(7)

(8)

6.在Nano上添加UART控制台(实现打印)

实现串口初始化:

实现rt_hw_console_output:

7.在Nano上添加FinSH组件(实现命令输入)

RT-Thread FinSH是RT-Thread的命令组件(shell),提供一套供用户在命令行调用的操作接口,主要用于调试或查看系统信息。

添加FinSH源码到工程:

(1)复制Nano源码中components文件夹下的finsh文件夹到工程中。

(2)打开工程新建finsh分组,添加工程中finsh文件夹下的所有.c文件,并在工程中添加finsh文件夹的路径

(3)在rtconfig.h中使能#define RT_USING_FINSH宏定义

实现rt_hw_console_getchar

要实现FinSH组件功能:既可以打印也能输入命令进行调试,控制台已经实现了打印功能,现在还需要在board.c中对接控制台输入函数,实现字符输入:

  • 2
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值