ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

RT-thread Nano移植

2022-01-15 20:58:25  阅读:183  来源: 互联网

标签:RT rt thread Thread void led1 Nano


RT-thread Nano移植

一、相关概念及安装

1.RT-Thread

RT-Thread,全称是Real Time-Thread,是一款主要由中国开源社区主导开发的开源实时操作系统,包含了实时、嵌入式系统相关的各个组件:TCP/IP协议栈、图形用户界面等。
相较于Linux,RT-Thread 具有体积小,成本低,功耗低、启动快速的优势。除此以外,实时性高、占用资源小等特点,使得它也非常适用于各种资源受限(如成本、功耗限制等)的场合(刚刚好适合装在小内存的开发板上)。
在物联网设备的应用中,RT-Thread 能使用在线软件包管理工具,配合系统配置工具,实现直观、快速的模块化裁剪、无缝导入丰富的软件功能包,以及类似 Android 的图形界面和触摸滑动、智能语音交互等复杂功能。
RT-Thread 系统完全开源,可以免费在商业产品中使用,并且不需要公开私有代码。

2.RT-Thread架构

相对于一些传统的RTOS 如 FreeRTOS、uC/OS 等,RT-Thread 架构上最大的区别在于:它是一个物联网操作系统(IoT OS)。
即RT-Thread 除了包含一个实时内核外,还包括如文件系统、图形库等较为完整的中间件组件,是具备低功耗、安全、通信协议支持和云端连接能力的软件平台。

内核层:

  • RT-Thread 内核:系统核心部分,包括了内核系统中对象的实现,例如多线程及其调度、消息队列、内存管理等
  • libcpu/BSP(芯片移植相关文件 / 板级支持包):与硬件密切相关,由外设驱动和 CPU 移植构成;

组件与服务层:
组件是基于内核之上的上层软件,例如虚拟文件系统、FinSH 命令行界面、网络框架、设备框架等。采用模块化设计,做到组件内部高内聚,组件之间低耦合;

RT-Thread 软件包:
运行于 RT-Thread 物联网操作系统平台上,面向不同应用领域的通用软件组件,由描述信息、源代码或库文件组成。开发者可依据自身需求,选择、组合不同软件包,打造自己想要的系统。
目前支持的软件包有且不仅有:

  1. 物联网相关:Paho MQTT、WebClient、mongoose、WebTerminal 等;
  2. 脚本语言相关:JerryScript、MicroPython ;
  3. 多媒体相关:Openmv、mupdf;
  4. 系统相关:RTGUI、Persimmon UI、lwext4、partition、SQLite 等。
    请添加图片描述

3.安装

基于 CubeMX 移植 RT-Thread Nano

二、工程配置及代码编译

1.新建工程与配置

Softwares Packages—Select Components
请添加图片描述
根据RealThread版本选择
请添加图片描述
Software Packs点击展开
请添加图片描述
RCC
请添加图片描述
SYS
请添加图片描述
串口
请添加图片描述
选择点灯串口A3,A4并去掉多余选项卡
请添加图片描述
时钟树配置
请添加图片描述
创建项目
请添加图片描述

2.编码

在Application/User下新建app_rt_thread.c文件
代码如下

#include "rtthread.h"
#include "main.h"
#include "stdio.h"
 
struct rt_thread led1_thread;
rt_uint8_t rt_led1_thread_stack[128];
void led1_task_entry(void *parameter);
//初始化线程函数
void MX_RT_Thread_Init(void)
{
	//初始化LED线程
	rt_thread_init(&led1_thread,"led1",led1_task_entry,RT_NULL,&rt_led1_thread_stack[0],sizeof(rt_led1_thread_stack),3,20);
	//开启线程调度
	rt_thread_startup(&led1_thread);
}
 
//主任务
void MX_RT_Thread_Process(void)
{
	printf("Hello,this is WOOZI9600L!!!");
	rt_thread_delay(2000);
}
 
//LED1任务
void led1_task_entry(void *parameter)
{
	while(1)
	{
		HAL_GPIO_WritePin(GPIOC,GPIO_PIN_15, GPIO_PIN_RESET);
		rt_thread_delay(500);
		HAL_GPIO_WritePin(GPIOC,GPIO_PIN_15, GPIO_PIN_SET);
		rt_thread_delay(500);
	}
}

修改board.c的77行
请添加图片描述
取消rtconfig.h中145行注释
请添加图片描述
main.c中添加以下代码

extern void MX_RT_Thread_Init(void);
extern void MX_RT_Thread_Process(void);

在主函数中添加以下代码

	MX_RT_Thread_Init();

在main.c的while函数中添加以下代码

HAL_GPIO_TogglePin(GPIOC,GPIO_PIN_14);
		rt_thread_mdelay(500);

参考

什么是RT-Thread?

标签:RT,rt,thread,Thread,void,led1,Nano
来源: https://blog.csdn.net/qq_30593663/article/details/122515506

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有