基于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的多任务嵌入式程序设计相关推荐

  1. 基于嵌入式操作系统VxWorks的多任务并发程序设计(4)――任务间通信A

    基于嵌入式操作系统VxWorks的多任务并发程序设计(4) ――任务间通信 作者:宋宝华  e-mail:[email]21cnbao@21cn.com[/email] 出处:软件报 VxWorks提 ...

  2. 基于嵌入式操作系统VxWorks的多任务并发程序设计(3)――任务调度

    基于嵌入式操作系统VxWorks的多任务并发程序设计(3) ――任务调度 作者:宋宝华  e-mail:[email]21cnbao@21cn.com[/email] 出处:软件报 VxWorks支持 ...

  3. 基于嵌入式操作系统VxWorks的多任务并发程序设计(5)――中断与任务

    基于嵌入式操作系统VxWorks的多任务并发程序设计(5) ――中断与任务 作者:宋宝华  e-mail:[email]21cnbao@21cn.com[/email]  出处:软件报 中断处理是整个 ...

  4. 【技术】基于GPRS无线网络的嵌入式远程车载监测系统[图]

    原文链接地址:http://tech.c114.net/164/a663339.html 摘要:按照石化公司的要求,设计了一个基于GPRS无线网络与嵌入式操作系统μC/OS-Ⅱ的远程车载监测系统,用于 ...

  5. linux电机驱动程序,基于Linux系统的HHARM9电机驱动程序设计

    电子科学知识.电机,arm 第24卷 第4期 2005年12月南昌工程学院学报JournalofNanchangInstituteofTechnologyVol.24No.4Dec.2005文章编号: ...

  6. 腾讯tiny os rtt nano rtt freertos MS-RTOS one os小白视角开发对比

    主流国产RTOS 物联网的时代突然爆发,催生了很多优秀的国产RTOS,十年磨一剑,然后华山论剑,下面以我本人的一点见解简单对比一下,以小白的开发视角. 腾讯tiny OS TencentOS tiny ...

  7. 基于VXWORKS的NAND FLASH驱动程序设计

    基于VXWORKS的NAND FLASH驱动程序设计 3162412793@qq.com 技术交流QQ群: 691976956 目前,随着电子技术的不断发展,计算机技术也得到飞速的发展,产生了很多新技 ...

  8. Python基于socket实现的多任务版TCP服务端

    ''' 基于socket实现的多任务版TCP服务端 ''' import socket import threadingdef client_task(client_socket,ip_port):p ...

  9. 2014025630《嵌入式程序设计》第七周学习总结

    2014025630<嵌入式程序设计>第七周学习总结 教材学习内容总结 有名管道(FIFO) 命名管道也被称为FIFO文件,是一种特殊的文件.由于linux所有的事物都可以被视为文件,所以 ...

最新文章

  1. AngryTask - 基于伪 scrum 的个人项目开发产品
  2. c语言6大设计原则 控制反转,fun6868备用网址-fun6868备用网址
  3. [vim]高亮查找匹配
  4. Linux入门笔记——type、switch、help、man、apropos、whatis、info
  5. Qt工作笔记-图形视图框架中的分组,以及添加平行拖动图元
  6. 创建表空间、用户和赋权
  7. QT4.7和VS2008 顺利安装必读 (最新版)
  8. 电子计算机之争的想法,模拟意识的通俗讲解
  9. anndroid 之 Intent(意图)使用示例
  10. 收钱吧好还是网付好?
  11. 研究生如何与导师沟通?来自青年教师的视角
  12. opencv滤镜-素描
  13. html5把六张图片做成立方体,html5 3D旋转的图片立方体代码
  14. 一行Python都可以做什么?这35行看懂十行就算入门,全能看懂必是高手
  15. Android根据byte数组,生成图片,图片名字以当前时间作为名字
  16. 专利申请成功后已超过4年,如何延长专利保护期?
  17. PHP LOL接口,电竞英雄联盟数据API接口 - 【赛事列表】API调用示例代码
  18. 余姚dns服务器位置,余姚广电dns服务器地址
  19. 第二周 新星杯的收获和感触
  20. 2022春招面试题总结-C++方向

热门文章

  1. 2015年百度之星程序设计大赛 - 资格赛 (1004放盘子)
  2. 搭建机器人电控系统——MCU基石——STM32 GPIO原理
  3. 基于python面向对象多人聊天室
  4. BOSHIDA 模块电源的分类(二)
  5. Linux_Vim编辑器 _ 关于在vim中的查找和替换
  6. Android开发QQ登陆、分享、空间分享及回调处理 不回调问题的处理
  7. Android资源之图像资源(图层图像资源)
  8. ALA创世发行!蝰蛇实验室开启全球数据战略布局
  9. 视频编码帧间学习笔记(个人向初学小结)
  10. 低功耗蓝牙学习笔记-链路层