蕊创科技与原厂国民技术是IDH的合作方式,双方在蓝牙方案、整体解决方案等方面进行深度合作开发
 
 
CMS,免费CMS,免费开源Java CMS,CMS系统,Java CMS,CMS内容管理系统,企业CMS,HTML网页模板,CMS模板,CMS源码,网站源码,信创系统软件,安可系统,网站建设,模板网站,建站模板,建站工具,建站平台,建站工具

行业动态

公司动态 行业动态
在 N32G031x 开发板上移植 RT-Thread Nano

1.简介

本文介绍如何在国民技术的 N32G031 开发板Q上移植 RT-Thread Nano,并提供了 N32G031 芯片和 N32G003 芯片基于 Keil MDK RT-Thread Nano 示范工程。如果你的基于 N32G031x 的应用想要在 RTOS 上开发,这会是个不错的基础工程。

2.N32G031 系列微处理器简介

·内核 CPU:32 位 ARM Cortex-M0,单周期硬件乘法,最高主频 48MHZ

·存储:64KB Flash 支持加密存储,8KB SRAM

·通信接口:3 usart,2 spi接口,212C接口

模拟接口:1 12bit 1Msps 高速 ADC,12 路外部单端通道,1 个运算放大器,1 个高速模拟比较器

最大支持 40 个支持复用功能的 GPIO

3. RT-Threada Nano 简介

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

RT-Thread Nano 对 RAM 和 ROM 的开销非常小。在支持 semaphore 和 mailbox 特性,并运行2个线程(main+idle 线程)情况下,RAM 占用约 1.2KB,ROM 4KB 左右。

RT-Thread Nano 下载地址:

https://github.com/RT-Thread/rtthread-nano/archive/refs/heads/master.zip

4.开发工具和环境

·操作系统:Windows 11 x64

·编译工具链:Keil MDK5

·编辑器:VSCODE

·开发板:国民技术 N32G031C8L7开发板 N32G031C8L7-STB V1.0 LQFP48封装

5.移植步骤

5.1 准备国民技术官方固件库

可以从国民技术官方网站获取 N32G031 的 firmware SDK,这里采用的 SDK 版本是 Nationstech.N32G031 Library. 1.0.5

5.2 准备 RT-Thread Nano 源码

在前面 RT-Thread Nano 简介提供了下载地址。下载好 rtt nano 源码。

5.3 添加 RT-Thread Nano 到工程

1.准备一个基于 N32G031 的 keil MDK 基础工程

2.将 rt-thread nano 源码 rt-thread 复制到工程根目录下

3.在工程跟目录下创建 RTEIRTOS 目录,复制 rt-threadlbsp template 目录下所有文件到此目录下

4.在基础工程中添加 RT-Thread Nano 源码

添加的文件如下,

kernel 文件,在rt-thread\src目录下

1.png

Cortex-M0(N32G031 内核是 Cortex-M0)芯片移植代码,在 rt- threadlibcpuarmicortex-m0 目录:

2.png

配置文件,文件在 RTE\RTOS 目录下

3.png

5.4 适配 RT-Thread Nano

5.4.1 中断异常处理

RT-Thread 会接管 HardFault_Handler() Pendsv_Handler(),这两个函数已由 RT-Thread 实现,所以要删除基础工程里的这两个函数,避免在编译时产生重复定义错误。

5.4.2 系统时钟配置

1.在 board.c 中实现 os tick 配置,为操作系统提供节拍。

4.png

2.在 board.c中实现 SysTick Handler 中断服务

5.png

5.4.3 内存堆初始化

系统内存堆的初始化在 board.c中的rt hw board init()函数中完成,内存堆功能是否使用取决于宏RT USING HEAP 是否开启,RT-Thread Nano 默认不开启内存堆功能,这样可以保持一个较小的体积,不用为内存堆开辟空间。


开启系统 heap 将可以使用动态内存功能,如使用 rt malloc、rt free 以及各种系统动态创建对象的API。若需要使用系统内存堆功能,则打开 RT USING HEAP 宏定义即可,此时内存堆初始化函数rt system heap init()将被调用


本例程没有开启内存堆服务。


5.5 编写第一个应用

移植好 RT-Thread Nano 之后。此时的 main 函数就编程 rt-thread 的一个线程。可在 main 函数中调用 rt thread mdelay 来验证系统是否正常工作。

6.png

5.6 内存优化

移植 RT-Thread Nano 之后,至少需要2个线程(main 和 idle),加上系统中断使用的主堆栈,这些是系统最基本开销。这些堆栈都可以设置。

main 线程堆栈大小在 rtconfig.h 中通过宏定义 RT MAIN THREAD STACK SIZE 设置idle 线程堆栈默认只有 128B,几乎不能往下调整了。系统(中断)堆栈在芯片sdk目录下的startup n32g031.s中的 Stack Size 设置,默认大小是 0x400(1024B)

6.演示和总结

在我的演示代码中,我打开了 RT USING CONSOLE 宏定义(可以通过 rt kprint 输出调试信息)以及 finsh 组件。另外包含了 uart 驱动,pin 驱动。

编译后资源占用:

7.png

可以看到,占用的空间非常小,剩余给应用的 ROM 和 RAM 空间还比较充裕。

启动效果:

8.png

msh h命令效果

9.png

鉴于 RT-Thread Nano 的极致小开销的特性,我将它移植到了国民技术一个入门级的 M0 芯片N32G003 上,这颗芯片只有 29KB Flash和 3KB SRAM。将系统(中断)堆栈改为 512B,主线程512B ,移植 uart 驱动,移植按键驱动的情况下,编译后资源占用

10.png

对于需要多个 timer,多个任务协同工作的应用,充分利用 RT-Thread 的 timer 功能,进程同步和通信功能,可能比直接裸机开发还节省空间。


附录:演示代码下载地址

你可以从下面的地址下载完整的演示代码。


·N32G031x rtthread Nano 移植演示代码下载地址下载zip

git仓库: https://gitee.com/japyvi/n32g031x demos.git


N32G003x rtthread Nano 移植演示代码下载地址:

下载 zip

git 仓库: https://gitee.com/japyvi/ant g003.git

·N32G301C8L7 开发板链接


联系我们

186 6585 0059 仅限中国 9:00-20:00
微信二维码
Copyright @2024~ 粤ICP备2024273580号-1