基于RTT Nano的多任务嵌入式程序设计
基于RTT Nano的多任务嵌入式程序设计
- 一、国产RT-Thread操作系统概述
- 1.简述
- 2.特点
- 3.优势
- 二、RTT-Nano的功能框架
- 三、在stm32F103上移植RTT Nano
- 1.添加RT-Thread系统组件
- 2.创建工程及配置项目
- 3.点灯
- 四、心得体会
一、国产RT-Thread操作系统概述
1.简述
RT-Thread实时操作系统是一个分层的操作系统,它包括了:
• 组件层components,这些是基于RT-Thread核心基础上的外围组件,把一些功能模块划分成独立的一个个组件模块,做到组件与组件之间的低耦合,组件内部的高内聚。
例如文件系统,命令行shell接口,lwIP轻型TCP/IP协议栈,GUI图形用户界面等。
• 硬实时内核kernel,这层是RT-Thread的核心,包括了内核系统中对象的实现,例如多线程及其调度,信号量,邮箱,消息队列,内存管理,定时器等实现。
•分支接口porting,主要由libcpu以及不同硬件平台的bsp构成,即RT-Thread支持的一个个芯片移植,外设驱动等
2.特点
①体积小,可伸缩、易裁剪最小资源占用 1.2KB RAM 和 2.5KB flash。
②针对物联网场景提供的众多组件和软件包,比如 AT组件、WiFi、蓝牙、LoRa、Sensor、AI 等等,以及针对安全和低功耗的优化,
③代码质量优秀,linux内核风格,增加了小程序、SMP 多核调度、PSA 安全支持等多项的功能。
3.优势
相比Linux操作系统,RT-Thread体积小、功耗低、启动快速,还具有实时性高、占用资源小等特点,非常适用于各种资源受限的场合。
而“美”则是RT-Thread优化了使用和开发体验,增加了小程序、SMP多核调度、PSA安全支持等多项实用的新功能,使得RT-Thread系统能实现灵活极简的应用开发,能扩展至众多高性能、高安全的应用领域。
二、RTT-Nano的功能框架
RT-Thread Nano是一个极简的硬实时内核,它还具备体积小、启动快速、实时性高、占用资源小等特点。
适用于系统资源紧张或是项目功能较为简单,仅需使用RTOS内核,无需丰富功能的场景,且开发时无需额外的辅助工具。
三、在stm32F103上移植RTT Nano
1.添加RT-Thread系统组件
获取RT-Thread Nano软件包
软件包
2.创建工程及配置项目
在CubeMX中新建项目(同之前)
配置sys
配置RCC
设置引脚PA6和PA7
设置串口USART1
设置时钟树
配置RT-Thread组件
选择
填写项目相关信息
生成代码(在keil中打开)
3.点灯
在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)
{//初始化LED1线程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 RT_Thread!!!");rt_thread_delay(2000);
}//LED1任务
void led1_task_entry(void *parameter)
{while(1){HAL_GPIO_WritePin(GPIOA,GPIO_PIN_6, GPIO_PIN_RESET);rt_thread_delay(500);HAL_GPIO_WritePin(GPIOA,GPIO_PIN_6, GPIO_PIN_SET);rt_thread_delay(500);}
}
Middlewares/RT-Thread/RTOS/kernel文件夹下的board.c,修改串口为USART2。
在usart.c文件中添加代码
/* USER CODE BEGIN 0 */
#include "stdio.h"
/* USER CODE END 0 */
.
.
.
/* USER CODE BEGIN 1 */
#ifdef __GNUC__/* With GCC/RAISONANCE, small printf (option LD Linker->Libraries->Small printfset to 'Yes') calls __io_putchar() */#define PUTCHAR_PROTOTYPE int __io_putchar(int ch)
#else#define PUTCHAR_PROTOTYPE int fputc(int ch, FILE *f)
#endif /* __GNUC__ */
/*** @brief Retargets the C library printf function to the USART.* @param None* @retval None*/
PUTCHAR_PROTOTYPE
{/* Place your implementation of fputc here *//* e.g. write a character to the EVAL_COM1 and Loop until the end of transmission */HAL_UART_Transmit(&huart1, (uint8_t *)&ch, 1, 0xFFFF);return ch;
}
/* USER CODE END 1 */
在main.c文件中添加代码
/* Private typedef -----------------------------------------------------------*/
/* USER CODE BEGIN PTD */
extern void MX_RT_Thread_Init(void);
extern void MX_RT_Thread_Process(void);
/* USER CODE END PTD */
MX_GPIO_Init();
MX_USART1_UART_Init();
MX_RT_Thread_Init();
在main函数的while循环中添加代码
HAL_GPIO_TogglePin(GPIOA,GPIO_PIN_7);
rt_thread_delay(1000);
编译烧录运行代码
在硬件在stm32F103上实现电灯
四、心得体会
采用中断和查询结合的方式可以解决大部分裸机应用,但随着工程的复杂,裸机方式的缺点就暴露出来了: 必须在中断 (ISR) 内处理时间关键运算 内处理时间关键运算 ; ISR ISR 函数变得非常复杂,并且需要很长执行时间 ; ISR ISR 嵌套可能产生不预测的执行时间和堆栈 需求;超级循环和 ISR 之间的 数据交换是通过全局共享变量进行; 应用程序的员必须确保数据一致性 ; 超级循环可以与系统计时器轻松同步,但 如果系统需要多种不同的周期时间,则会很难实现 。而针对这些情况,使用多任务系统就可以解决这些问题。多任务系统或者说RTOS的实现,重点就在这个调度器上,而调度器的作用就是使用相关的调度算法来决定当前需要执行的任务。创建了任务并完成OS初始化后,就可以通过调度器来决定任务A,任务B和任务C的运行,从而实现多任务系统。
学习了嵌入式系统基础这门课,对嵌入式操作系统有了基本的认识和基础的掌握;能运用CubeMX生成项目用keil运行从而实现一些stm3F103硬件的操作。使用过程中遇到了很多问题,需要耐心的查找资料或者向同学询问,不能轻易放弃,一旦放弃就是会累积从而跟不上老师的节奏,心态要平和态度要积极才能学有所得学有所成。
基于RTT Nano的多任务嵌入式程序设计相关推荐
- 基于嵌入式操作系统VxWorks的多任务并发程序设计(4)――任务间通信A
基于嵌入式操作系统VxWorks的多任务并发程序设计(4) ――任务间通信 作者:宋宝华 e-mail:[email]21cnbao@21cn.com[/email] 出处:软件报 VxWorks提 ...
- 基于嵌入式操作系统VxWorks的多任务并发程序设计(3)――任务调度
基于嵌入式操作系统VxWorks的多任务并发程序设计(3) ――任务调度 作者:宋宝华 e-mail:[email]21cnbao@21cn.com[/email] 出处:软件报 VxWorks支持 ...
- 基于嵌入式操作系统VxWorks的多任务并发程序设计(5)――中断与任务
基于嵌入式操作系统VxWorks的多任务并发程序设计(5) ――中断与任务 作者:宋宝华 e-mail:[email]21cnbao@21cn.com[/email] 出处:软件报 中断处理是整个 ...
- 【技术】基于GPRS无线网络的嵌入式远程车载监测系统[图]
原文链接地址:http://tech.c114.net/164/a663339.html 摘要:按照石化公司的要求,设计了一个基于GPRS无线网络与嵌入式操作系统μC/OS-Ⅱ的远程车载监测系统,用于 ...
- linux电机驱动程序,基于Linux系统的HHARM9电机驱动程序设计
电子科学知识.电机,arm 第24卷 第4期 2005年12月南昌工程学院学报JournalofNanchangInstituteofTechnologyVol.24No.4Dec.2005文章编号: ...
- 腾讯tiny os rtt nano rtt freertos MS-RTOS one os小白视角开发对比
主流国产RTOS 物联网的时代突然爆发,催生了很多优秀的国产RTOS,十年磨一剑,然后华山论剑,下面以我本人的一点见解简单对比一下,以小白的开发视角. 腾讯tiny OS TencentOS tiny ...
- 基于VXWORKS的NAND FLASH驱动程序设计
基于VXWORKS的NAND FLASH驱动程序设计 3162412793@qq.com 技术交流QQ群: 691976956 目前,随着电子技术的不断发展,计算机技术也得到飞速的发展,产生了很多新技 ...
- Python基于socket实现的多任务版TCP服务端
''' 基于socket实现的多任务版TCP服务端 ''' import socket import threadingdef client_task(client_socket,ip_port):p ...
- 2014025630《嵌入式程序设计》第七周学习总结
2014025630<嵌入式程序设计>第七周学习总结 教材学习内容总结 有名管道(FIFO) 命名管道也被称为FIFO文件,是一种特殊的文件.由于linux所有的事物都可以被视为文件,所以 ...
最新文章
- Java学习笔记26
- 数据中心基础设施故障处理流程
- 【Java虚拟机规范】JVM类加载机制
- 【收藏】HUE配置HDFS
- 河南城建学院linux期末试题,河南城建学院Linux期末考试复习题
- 【零散积累】传输文件(sz/rz/scp命令)
- c++builder中dbgrid控件排序_如何实现APP中各种布局效果?学会这几个控件就够了...
- NMEA-0183协议(多星联合定位)
- 2003-2019年全国30省市分地区能源消费结构数据集(煤炭占比)
- 1.7亿,国家重点研发计划“综合交通运输与智能交通”2019年项目申报开始
- 天池大赛 xgboost/lightgbm + python36 + win10_64 环境配置
- K8s 很难么?带你从头到尾捋一遍,不信你学不会
- 为什么app会被常常攻击?如何预防攻击?
- Apache HBase JavaAPI 查询数据
- 手游还能这么玩?电脑控制手机鼠标键盘大屏玩手游了解一下
- 关于搜索问题答案的方式
- 我找到了一个快速定位SpringBoot接口超时问题的神器!
- Java Socket编程系列(四)开发支持多客户端访问的Server
- 浅谈Facade外观模式
- (一)VirtualBox及其扩展包下载安装
热门文章
- 2016百度之星 - 初赛(Astar Round2A)解题报告
- plsql oracle 无效月份,“ORA-01843: 无效的月份“问题
- ppt模板下载keyppt.cn
- Maltab GUI课程设计——身份证号码识别
- 得物 App H5秒开优化实战
- 仿真系统rivz进入后不显示机器人,Global Status:Error
- html制作阅读界面,用shiny制作html界面
- 蒲公英 Ghost Win 7 Sp1(x86/x64)旗舰版 2018 08
- 宏基因组理论教程3PICRUSt功能预测
- 产能节拍php,工厂生产线的产能如何提升(实例讲解)