后文rtt代表RT-Thread

在官网公众号中,看到rtt发布了rtt nano,这个就很轻量级的rtos内核,把多余的驱动都裁剪了,因此移植工作量小,可以哪来学习一番,体验rtt之美

rtt现在也集成到cubemx5.0以上的平台,类似于freertos中间件,这个做法,倒是有点类似于大厂的风格了,看好rtt。

在keil5中,有两种方法可以移植rtt nano。
前提条件是:cubemx生成一个最小的裸机led系统。
MRTE的方法,
1、这个需要下载pack包RealThread::RT-Thread,keil有很多类似的第三方包,有ucos,freertos(这个比官网更新的都快,厉害了我的keil)rtx还是keil自带的免费rtos,这个我之前也有移植文档,也是很方便的。
安装好之后,左上方的写的小正方形,里面的rtos里面有很多选项。之前一直找不到, 是rtt的技术支持微信亲自指点的。因此需要注意。

我的选择如下:

其他的你也看到, 集成有很多rtos。

2、之后编译,会出现很多错误(重复定义之类),可以看到rtt的官网上,已经提到了,需要把很多中断Handler()注释掉,因为rtt自己已经实现了很多中断函数。

3、添加<rtthread.h>,把hal_delay()替换成rtt的延时函数,再次编译,即可一次成功。

源文件移植方法:
1、在现有的裸机工程中,添加rtt nano的3.1.3源码。注意也有rtt3.1.3的完整版,完整版的代码就很大了。我们使用namo版本,两个版本官网都可以下载。
2、依照官网的说明,把源文件拷贝到工程目录中,逐次添加c文件,.s文件,s文件是编译器有区别的,iar gcc rdvs三种。c文件都是一样的,因此移植工作很简单。

3、把重复定义的,需要注释相关中断,因为rtt已经实现了。
4、魔术棒里面,添加c的头文件路径。添加<rtthread.h>,把hal_delay()替换成rtt的延时函数,再次编译,即可一次成功。
5、编译,运行。

这里讲讲几个细节:
1、首先rtt默认不使用heap,这样可以保持1一个较小的体积,不用为内存堆开辟空间。开启系统 heap 将可以使用动态内存功能,如使用 rt_malloc、rt_free 以及各种系统动态创建对象的 API。
这个可以比较好的理解。就相当于把rtt当作一个静态生成任务,适合新手,在freertos中,我们通常使用heap4.c的内存管理,使用动态的方式来创建任务的,rtt也是可以的,需要开启宏定义。细节可以参考官网文档。
2、配置文件,这个类似于之前用过的nrf的工程,用作系统裁剪。其实就是.h文件,符合keil的规范,当然iar里面是只能修改代码的。编译器ide的差别。
3、裸机中的main函数,经过移值以后,变成了main线程。这个是比较聪明的方法,在其他公众号中,我看到了他的实现原理,可以单步仿真试试他到底是怎么运行的。说白了,在main线程运行之前,就已经作了一些代码操作,如初始化工作,时钟滴答等等,还可以把一定硬件初始化放到rtt写的代码中。
4、后面就可以自己在main线程中,再根据需求创建新的线程。

参考文档:https://www.rt-thread.org/document/site/tutorial/nano/nano-port-keil/an0039-nano-port-keil/

基于 Keil MDK 移植 RT-Thread Nano的更多相关文章

  1. 免费的EmBitz可替代Keil MDK开发STM32、NXP项目

    一.背景 由于使用之前开发STM32是基于Keil MDK编译环境开发的,由于该软件是收费的,想用个免费开源的软件来替代Keil,EmBitz编译器是免费的,可以完全替代开发.下载程序支持J-Link ...

  2. 基于IAP和Keil MDK的远程升级设计

    写在前面:三个周之前,我突然想写一个远程升级的程序.那个时候我只是大概知道IAP的意思是在应用编程,但怎么编,我还一无所知.我给自己定下一个个阶段目标,从最基础的代码一点点写起,解决一个又一个的问题. ...

  3. Keil MDK STM32系列(九) 基于HAL和FatFs的FAT格式SD卡TF卡读写

    Keil MDK STM32系列 Keil MDK STM32系列(一) 基于标准外设库SPL的STM32F103开发 Keil MDK STM32系列(二) 基于标准外设库SPL的STM32F401 ...

  4. Keil MDK STM32系列(一) 基于标准外设库SPL的STM32F103开发

    Keil MDK STM32系列 Keil MDK STM32系列(一) 基于标准外设库SPL的STM32F103开发 Keil MDK STM32系列(二) 基于标准外设库SPL的STM32F401 ...

  5. Keil MDK STM32系列(二) 基于标准外设库SPL的STM32F401开发

    Keil MDK STM32系列 Keil MDK STM32系列(一) 基于标准外设库SPL的STM32F103开发 Keil MDK STM32系列(二) 基于标准外设库SPL的STM32F401 ...

  6. Keil MDK STM32系列(三) 基于标准外设库SPL的STM32F407开发

    Keil MDK STM32系列 Keil MDK STM32系列(一) 基于标准外设库SPL的STM32F103开发 Keil MDK STM32系列(二) 基于标准外设库SPL的STM32F401 ...

  7. Keil MDK STM32系列(四) 基于抽象外设库HAL的STM32F401开发

    Keil MDK STM32系列 Keil MDK STM32系列(一) 基于标准外设库SPL的STM32F103开发 Keil MDK STM32系列(二) 基于标准外设库SPL的STM32F401 ...

  8. Keil MDK STM32系列(六) 基于抽象外设库HAL的ADC模数转换

    Keil MDK STM32系列 Keil MDK STM32系列(一) 基于标准外设库SPL的STM32F103开发 Keil MDK STM32系列(二) 基于标准外设库SPL的STM32F401 ...

  9. Keil MDK STM32系列(七) STM32F4基于HAL的PWM和定时器

    Keil MDK STM32系列 Keil MDK STM32系列(一) 基于标准外设库SPL的STM32F103开发 Keil MDK STM32系列(二) 基于标准外设库SPL的STM32F401 ...

随机推荐

  1. FROM_UNIXTIME()时间戳转换函数

    前几天,工作用到了将时间戳转化成具体的时间(年月日 时:分:秒),出了一点问题,先看一下下面的sql语句: select *,FROM_UNIXTIME(created_at,'%Y-%m-%d %H ...

  2. Spring Boot 最流行的 16 条实践解读!

    Spring Boot是最流行的用于开发微服务的Java框架.在本文中,我将与你分享自2016年以来我在专业开发中使用Spring Boot所采用的最佳实践.这些内容是基于我的个人经验和一些熟知的Sp ...

  3. [转帖]在 Kubernetes 离线部署 KubeSphere

    在 Kubernetes 离线部署 KubeSphere https://kubesphere.io/docs/v2.0/zh-CN/installation/install-ks-offline/ ...

  4. [转帖]pidstat 命令详解

    pidstat 命令详解 https://www.jianshu.com/p/3991c0dba094 pidstat -r -u -d -p 各种参数非常好用. pidstat 概述 pidstat ...

  5. mysql启动报错 "unknown variable 'defaults-file=/etc/my.cnf"

    使用指定的my.cnf,而不用默认的/etc/my.cnf文件,可以在启动时,在mysqld_safe后加上参数--default-file=/usr/local/server/mysql2/etc/ ...

  6. vivado sdx 綜合報錯ERROR: [SdsCompiler 83-5019] Exiting sds++ : Error when calling 'aarch64-linux-gnu-g++ -c

    ERROR: [SdsCompiler 83-5019] Exiting sds++ : Error when calling 'aarch64-linux-gnu-g++ -c 主函數 添加 頭文件 ...

  7. 记一个Redis分布式事务锁

    package com.mall.common; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory. ...

  8. Linux C++ Socket 高并发短连接 TIME_WAIT 挥之不去解决方法

    近期遇到一个项目 需要在Linux上建立一个Socket 进行 HTTP_GET , 需要线程高并发的 使用TCP Socket 进行Send 发送HTTP_GET请求到 指定网站 . 而且不需要re ...

  9. 如何查找YUM安装的JAVA_HOME环境变量详解

    如何查找YUM安装的JAVA_HOME环境变量详解  更新时间:2017年10月27日 09:44:56   作者:铁锚   我要评论 这篇文章主要给大家介绍了关于如何查找YUM安装的JAVA_HOM ...

  10. java中什么是包

    一.什么是包 包允许将类组合成较小的单元(类似文件夹),使其易于找到和使用相应的类文件 包有助于避免命名冲突.在使用许多类时,类和方法的名称很难决定.有时需要使用与其他类相同的名称.包基本上隐藏了类并 ...