MDK不能联网下载pack包安装RealThread nano的方法

最近感觉用STM32F4做项目程序量越来越大,用裸奔的方式太吃力了,向找一个体积小上手快的操作系统,研究了网上的各种操作系统评论,分析了FREERTOS、UCOSII、RTX、RT-Tread,最终选了国产的RT-Tread。

RT-Tread对我这个英文太不好的有几大优势:

1.官方的说明和教程都是中文的!

2.这个系统有完整版和NANO(单独内核)版可以选,完整版有丰富的外设,可以不用自己写外设驱动,拿过来就用。单独内核版可以很容易合成到已有的裸奔工程中,把原工程改造成带操作系统的工程。

3.商业用不需要授权完全免费使用不用担心以后赚钱了有人来收授权费。

4.我有爱国情结,能支持国货坚决不用外国的东西。

基于以上几个原因,我选择了RT-Tread,先试试RT-Tread NANO

最简单的办法是在MDK里直接下载

但是我的MDK可能是和谐的时候破坏了什么东西,连不上网,没法获取PACK包。

我只能选择手动安装

从官网下载安装文件,RT-Thread Nano 离线安装包下载https://www.rt-thread.org/download/mdk/,下载结束后双击文件进行安装:

Packs 手动安装

添加 RT-Thread Nano 到工程

打开已经准备好的可以运行的裸机程序,将 RT-Thread 添加到工程。如下图,点击 Manage Run-Time Environment。

MDK RTE

在 Manage Rum-Time Environment 里 "Software Component" 栏找到 RTOS,Variant 栏选择 RT-Thread,然后勾选 kernel,点击 "OK" 就添加 RT-Thread 内核到工程了。

添加 Nano 内核

现在可以在 Project 看到 RT-Thread RTOS 已经添加进来了,展开 RTOS,可以看到添加到工程的文件:

添加了 RTOS 的工程

Cortex-M 芯片内核移植代码:

context_rvds.s
cpuport.c

Kernel 文件包括:

clock.c
components.c
device.c
idle.c
ipc.c
irq.c
kservice.c
mem.c
object.c
scheduler.c
thread.c
timer.c

配置文件:

board.c
rtconfig.h

适配 RT-Thread Nano

中断与异常处理

RT-Thread 会接管异常处理函数 HardFault_Handler() 和悬挂处理函数 PendSV_Handler(),这两个函数已由 RT-Thread 实现,所以需要删除工程里中断服务例程文件中的这两个函数,避免在编译时产生重复定义。如果此时对工程进行编译,没有出现函数重复定义的错误,则不用做修改。

系统时钟配置

需要在 board.c 中实现 系统时钟配置(为 MCU、外设提供工作时钟)与 os tick 的配置(为操作系统提供心跳 / 节拍)。

如下图所示,SystemCoreClockUpdate() 配置了系统时钟,_SysTick_Config() 配置了 OS Tick。此处 OS Tick 使用滴答定时器 systick 实现,需要用户在 board.c 中实现 SysTick_Handler() 中断服务例程,调用 RT-Thread 提供的 rt_tick_increase() 。

系统时钟与 OS Tick 配置

OS Tick 的实现

由于 SysTick_Handler() 中断服务例程由用户在 board.c 中重新实现,做了系统 OS Tick,所以还需要删除工程里中原本已经实现的 SysTick_Handler() ,避免在编译时产生重复定义。如果此时对工程进行编译,没有出现函数重复定义的错误,则不用做修改。

内存堆初始化

系统内存堆的初始化在 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() 将被调用,如下所示:

系统 heap 初始化

初始化内存堆需要堆的起始地址与结束地址这两个参数,系统中默认使用数组作为 heap,并获取了 heap 的起始地址与结束地址,该数组大小可手动更改,如下所示:

默认 heap 的实现

注意:开启 heap 动态内存功能后,heap 默认值较小,在使用的时候需要改大,否则可能会有申请内存失败或者创建线程失败的情况,修改方法有以下两种:

  • 可以直接修改数组中定义的 RT_HEAP_SIZE 的大小,至少大于各个动态申请内存大小之和,但要小于芯片 RAM 总大小。
  • 也可以参考《RT-Thread Nano 移植原理》——实现动态内存堆 章节进行修改,使用 RAM ZI 段结尾处作为 HEAP 的起始地址,使用 RAM 的结尾地址作为 HEAP 的结尾地址,这是 heap 能设置的最大值的方法。

 

我这个文章的主要部分都是从RT-Tread官网上截取的,目的不是凑一篇文章,而是给和我一样找手动安装费劲的人提供方便。

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值