STM32系列BSP操作系统新手指导-RT-ThreadStudio:

软件仿真环境,也让我们有机会在不使用真实硬件环境的情况下直接在电脑上运行目标代码。提供的示例程序运行起来。提供的示例程序运行起来。中其余例程的使用方法也是相同的,了解了运行例程的方法之后,就可以进行后面例程的运行和学习了。

新手引导版简介

RT-Thread操作系统目前拥有三个版本,分别适应不同场合的需求。

学习路线

从版本介绍可以看出,Nano版本是标准版本的极简内核版本,而Smart版本是在标准版本的基础上添加了用户模式创建的,所以学习标准版本是学习RT-Thread的基础。 本文以学习RT-Thread标准版为例,为初学者制定了如下学习路线,分为入门学习、进阶学习和应用开发。

无需 RTOS 经验即可开始使用

目标人群:有C语言和嵌入式基础,想要系统学习RT-Thread操作系统的人

推荐使用Pandora开发板,附Pandora开发板教程。 pdf,或者以下主流学习板进行学习。 不建议在没有任何基础的情况下将RT-Thread移植到开发板上。

内核视频教程

《内核实验手册》

有RTOS经验

目标受众:已经学习过FreeRTOS或uC/OS并想使用RT-Thread的人

准备一块板子,按照RT-Thread支持的板子BSP进行移植,或者按照STM32系列BSP制作教程进行移植。

如果你使用Ubuntu进行开发,可以参考:。

要快速学习内核,请参考:《RT-Thread编程指南》。

查看在线API手册或下载API手册。

为了方便有过使用其他RTOS经验的用户快速上手RT-Thread,以及将基于其他RTOS的API编写的应用层代码快速移植到RT-Thread,RT-Thread社区编写了第三个-方 RTOS 兼容层。 目前支持以下第三方RTOS API进行透明移植:

先进的学习开发工具

Env 工具:Env 工具用于配置或修剪源代码功能。 可以生成MDK/IAR/GCC项目,需要与MDK/IAR/GCC配合使用。 查看具体信息。

RT-Thread Studio:可以下载源码包并在Studio中创建rt-thread项目,独立完成开发、编译、下载、调试等功能,并可以进行功能裁剪,查看详情。

设备和驱动组件应用开发 应用开发列表 应用开发列表

CmBacktrace应用程序

在STM32 Nucleo开发板上使用RW007 WiFi模块

在STM32L4上应用littlefs文件系统

搭建RT-Thread项目框架

使用SFUD在Pandora上操作Flash

在 IoT Board 上实现电源管理

STM32 通用引导加载程序

网络协议栈驱动移植

Wireshark捕获tls数据包

在STM32F429上应用网络功能

在STM32上应用C++

在STM32F429上应用文件系统

在STM32上使用PWM

FreeModbus 应用笔记

STM32上使用USB Host读写U盘

应用AT组件连接ESP8266模块

QEMU网络视频教程

多线程非阻塞网络编程

使用QEMU运行动态模块组件

应用设计参考…

Demo示例 Demo演示及教程【外链图片传输失败,源站可能有防盗链机制,建议保存图片直接上传(img-KBtUmYbL-19)()]示例示例

基于RT-Thread和i.MX RT1052的开源AutoQuad飞控

基于RT-Thread的开源飞控StarryPilot

基于RT-Thread的人体健康监测系统

基于RT-Thread的激光雷达避障车

基于RT-Thread的蓝牙遥控平衡车

蜂鸣器

分布式温度监控系统

智能小车教程

代码贡献

开发指南【外链图片传输失败,源站可能有防盗链接机制,建议保存图片直接上传(img-Rb6TCmF3-20)()】代码规范【外链图片传输失败,源站可能有防盗机制外链机制,建议保存图片直接上传(img-eFZcaflt-21)()]提交代码

封装开发指南

RT-Thread编程风格

向 RT-Thread 贡献代码

STM32系列BSP制作教程

BSP开发规范

传感器驱动程序开发指南

开发工具RT-Thread标准版

作为RTOS的初学者,也许你对RT-Thread还比较陌生。 不过,随着你接触的深入,你会逐渐发现RT-Thread的魅力以及它相对于其他同类型RTOS的优势。 RT-Thread是一款完全由国内团队开发和维护、拥有完全自主知识产权的嵌入式实时操作系统(RTOS)。 经过近15年的积累,随着物联网的兴起,正在演变成一个功能强大、组件丰富的物联网操作系统。

RT-Thread,全称是Real Time-Thread,顾名思义,它是一个嵌入式实时多线程操作系统。 它的基本属性之一是支持多任务处理。 允许多个任务同时运行并不意味着处理器真的在同时运行。 执行了多项任务。 事实上,一个处理器核心一次只能运行一项任务。 由于任务一次的执行时间很短,因此通过任务调度器(调度器根据优先级来决定),任务的切换非常快。 此时应该执行的任务),给人一种多个任务同时运行的错觉。 在RT-Thread系统中,任务是通过线程来实现的,RT-Thread中的线程调度器就是上面提到的任务调度器。

RT-Thread主要用C语言编写,简单易懂,易于移植。 它将面向对象的设计方法应用到实时系统设计中,代码风格优雅,体系结构清晰,系统模块化、可剪裁。 对于资源有限的微控制器(MCU)系统,可以通过方便易用的工具,剪出只需要3KB Flash和1.2KB RAM内存资源的NANO版本(NANO由RT-Thread于2017年7月正式发布)内核的极简版本); 针对资源丰富的物联网设备,RT-Thread可以利用在线软件包管理工具,配合系统配置工具,实现直观、快速的模块化裁剪,无缝导入丰富的软件功能包,实现类似Android的图形界面和复杂功能,例如:触摸滑动效果和智能语音交互效果。

与Linux操作系统相比,RT-Thread体积小、成本低、功耗低、启动快。 此外,RT-Thread还具有实时性高、资源占用小等特点,非常适合各种资源受限的应用(如成本、功耗限制等)。 虽然32位MCU是其主要运行平台,但实际上很多带有MMU的应用处理器,基于ARM9、ARM11甚至Cortex-A系列级别的CPU也适合在特定应用中使用RT-Thread。

RT-Thread系统完全开源,3.1.0及更早版本遵循GPL V2+开源许可协议。 3.1.0以后的版本遵循Apache License 2.0开源许可协议,可以免费在商业产品中使用,且不会暴露私有代码。

近年来,物联网(IoT)概念广泛普及,物联网市场发展迅速,嵌入式设备联网已成大势所趋。 终端联网使得软件复杂度大大增加,传统RTOS内核越来越难以满足市场需求。 在这种情况下,物联网操作系统(IoT OS)的概念应运而生。 **物联网操作系统是指以操作系统内核(可以是RTOS、Linux等)为基础,包括文件系统、图形库等比较完善的中间件组件,具有低功耗、安全、通信协议支持和云 具有连接功能的软件平台,**RT-Thread 是一个物联网操作系统。

RT-Thread 与 FreeRTOS 和 uC/OS 等许多其他 RTOS 的主要区别之一是,它不仅是一个实时内核,而且还具有丰富的中间层组件,如下图所示。

具体包括以下几个部分:

Keil模拟器STM32F103入门指南

由于其特殊性,通用嵌入式操作系统往往与硬件平台密切相关。 特定的嵌入式操作系统通常只能在特定的硬件上运行。 对于刚接触RT-Thread操作系统的读者来说,立即获得与RT-Thread操作系统相匹配的硬件模块并不容易。 不过,随着计算机技术的发展,我们可以用软件来模拟一个可以运行RT-Thread的硬件模块。 操作系统的硬件模块是ARM公司的MDK-ARM仿真环境。

MDK-ARM(MDK-ARM微控制器开发套件)软件是ARM公司完整的集成开发环境(IDE),包括ARM芯片(ARM7、ARM9、Cortex-M系列、Cortex-R系列等)、高效的C/C++编译器; 各种 ARM 器件和评估板的工程向导和项目管理; 模拟器用于软件模拟和运行硬件平台; 以及市面上常见的ST-Link、JLink等在线仿真器,连接调试目标板的调试器。 MDK-ARM软件中的软件仿真模拟器采用完整的软件仿真方法来解释和执行ARM机器指令并实现一些外围外围逻辑,从而形成一个完整的虚拟硬件环境,使得用户可以在平台上执行相应的目标程序电脑。

MDK-ARM集成开发环境因其完整的STM32F103软件仿真环境,也让我们有机会直接在计算机上运行目标代码,而无需使用真实的硬件环境。 该软件仿真模拟器可以完全虚拟化ARM Cortex-M3的各种运行模式和外设,如中断异常、时钟定时器、串口等,与真实的硬件环境几乎一模一样。 实践也证明,本文使用的RT-Thread入门例程,编译成二进制代码后,不仅可以在模拟器上运行软件模拟,而且无需修改也可以在真实硬件平台上正常运行。

接下来我们将选择MDK-ARM集成开发环境作为目标硬件平台来观察RT-Thread操作系统的运行情况。

MDK开发环境:需要安装MDK-ARM 5.24(正式版或评估版,5.14及以上版本)。 该版本也是比较新的版本,可以提供比较完善的调试功能。 请参考安装方法。

要使用STM32F103软件仿真,还需要下载并安装STM32F103包文件。 如果MDK下载速度慢,也可以点击这里下载。 下载后,双击安装。

作为一个操作系统,RT-Thread的代码大小是多少? 在弄清楚这一点之前,我们需要做的第一件事是获取本文对应的 RT-Thread 示例。 该示例可以从以下链接获取:

RT-Thread模拟器例程

本示例是一个压缩包文件。 解压它。 这里我们将其解压到D:/。 解压完成后的目录结构如下图:

每个目录包含的文件类型说明如下表:

目录名称说明

应用

RT-Thread 应用程序。

rt-线程

RT-Thread 的源文件。

– 成分

RT-Thread的各个组件目录。

-包括

RT-Thread 内核的头文件。

-libcpu

各种芯片的移植代码,包括STM32移植文件。

– 源代码

RT-Thread 内核的源文件。

– 工具

RT-Thread 命令构建工具的脚本文件。

司机

RT-Thread驱动,针对不同平台的底层驱动的具体实现。

图书馆

ST的STM32固件库文件。

内核样本-0.1.0

RT-Thread 的内核例程。

目录下有一个project.uvprojx文件,该文件是本文引用的例程中的MDK5工程文件。 双击“project.uvprojx”图标打开该项目文件:

您可以在项目主窗口左侧的“项目”栏中看到该项目的文件列表。 这些文件存储在以下组中,即:

目录组描述

应用领域

对应的目录为rtthread_simulator_v0.1.0/applications,用于存放用户应用程序代码。

司机

对应的目录为rtthread_simulator_v0.1.0/drivers,用于存放RT-Thread底层驱动代码。

STM32_HAL

对应的目录为rtthread_simulator_v0.1.0/Libraries/CMSIS/Device/ST/STM32F1xx,用于存放STM32固件库文件。

内核样本

对应的目录为rtthread_simulator_v0.1.0/kernel-sample-0.1.0,用于存放RT-Thread的内核例程。

核心

对应的目录为rtthread_simulator_v0.1.0/src,用于存放RT-Thread内核核心代码。

皮质-M3

对应的目录为rtthread_simulator_v0.1.0/rt-thread/libcpu,用于存放ARM Cortex-M3移植代码。

设备驱动程序

对应的目录为rtthread_simulator_v0.1.0/rt-thread/components/drivers,用于存放RT-Thread驱动框架源码。

芬什

对应的目录为rtthread_simulator_v0.1.0/rt-thread/components/finsh,用于存放RT-Thread命令行finsh命令行组件。

现在让我们单击窗口上方工具栏中的按钮

、编译工程,如图:

编译结果显示在窗口底部的“Build”栏中。 如果没有意外发生,最后一行会显示“0 Error(s), * warning(s).”,即没有错误或警告。

注意:由于该项目包含大量内核例程代码,如果您使用MDK试用版,会有16KB的限制。 这种情况下,可以只保留某个目标例程的代码(例如内核例程只保留一个thread_sample.c参与编译),先从工程中删除其他未使用的例程,然后再进行编译。

编译完RT-Thread/STM32后,我们可以通过MDK-ARM模拟器来模拟运行RT-Thread。点击窗口右上角的按钮

或者直接按“Ctrl+F5”进入仿真界面,然后按F5开始运行,然后点击图中工具栏中的按钮或在菜单栏中选择“View→Serial Windows→UART#1”打开串口1窗口。 可以看到串口的输出只显示RT-Thread的LOGO。 这是因为用户代码为空。 仿真运行结果如图所示:

提示:我们可以通过输入Tab键或者help+Enter来输出当前系统支持的所有命令,如下图。

一般来说,理解一段代码大多是从启动部分开始的。 这里也使用这个方法,首先寻找启动的来源。 以MDK-ARM为例,MDK-ARM的用户程序入口点是main()函数,该函数位于main.c文件中。 系统启动后,从汇编代码startup_stm32f103xe.s开始运行,然后跳转到C代码,初始化RT-Thread系统函数,最后进入用户程序入口main()。

我们看一下在components.c中定义的这段代码:

//components.c 中定义
/* re-define main function */
int $Sub$$main(void)
{
    rt_hw_interrupt_disable();
    rtthread_startup();
    return 0;
}复制错误复制成功

这里$Sub$$main函数只调用rtthread_startup()函数。 RT-Thread支持多平台、多编译器,而rtthread_startup()函数是RT-Thread指定的统一入口点,因此$Sub$$main函数只需要调用rtthread_startup()函数即可。 例如,用GNU GCC编译器编译的RT-Thread直接从汇编启动代码部分跳转到rtthread_startup()函数,开始执行第一段C代码。 在components.c的代码中找到rtthread_startup()函数,我们就能看到RT-Thread的启动过程:

int rtthread_startup(void)
{
    rt_hw_interrupt_disable();
    /* board level initalization
     * NOTE: please initialize heap inside board initialization.
     */
    rt_hw_board_init();
    /* show RT-Thread version */
    rt_show_version();
    /* timer system initialization */
    rt_system_timer_init();
    /* scheduler system initialization */
    rt_system_scheduler_init();
#ifdef RT_USING_SIGNALS
    /* signal system initialization */
    rt_system_signal_init();
#endif
    /* create init_thread */
    rt_application_init();
    /* timer thread initialization */
    rt_system_timer_thread_init();
    /* idle thread initialization */
    rt_thread_idle_init();
    /* start scheduler */
    rt_system_scheduler_start();
    /* never reach here */
    return 0;
}复制错误复制成功

这部分启动代码大致可以分为四部分:

上面的启动代码基本上可以说是和RT-Thread系统相关的。 那么用户如何添加自己应用程序的初始化代码呢? RT-Thread 使用 main 函数作为用户代码的入口点。 你只需要在main函数中添加自己的代码即可。

int main(void)
{
  /* user app entry */
  return 0;
}复制错误复制成功

暗示:

为了在进入主程序之前完成系统函数初始化,可以在进入主程序之前使用$sub$$和$super$$函数标识符调用另一个例程,这样用户就不必担心系统在 main() 初始化操作之前。 有关详细信息,请参阅适用于 µVision® armlink 的 ARM® 编译器 v5.06 用户指南

对于从事电子开发的技术工程师来说,跑马灯可能是最简单的例子,就像每个编程语言中程序员接触的第一个程序Hello World一样,所以本例就从跑马灯开始。 让它定期更新 LED(开或关)。

我们在UART#1中输入msh命令:led并回车运行,如图:

天棚示例

/*
 * 程序清单:跑马灯例程
 *
 * 跑马灯大概是最简单的例子,就类似于每种编程语言中程序员接触的第一个程序
 * Hello World 一样,所以这个例子就从跑马灯开始。创建一个线程,让它定时地对
 * LED 进行更新(亮或灭)
 */
int led(void)
{
    rt_uint8_t count;
    rt_pin_mode(LED_PIN, PIN_MODE_OUTPUT);
    for(count = 0 ; count < 10 ;count++)
    {
        rt_pin_write(LED_PIN, PIN_HIGH);
        rt_kprintf("led on, count : %drn", count);
        rt_thread_mdelay(500);
        rt_pin_write(LED_PIN, PIN_LOW);
        rt_kprintf("led offrn");
        rt_thread_mdelay(500);
    }
    return 0;
}
MSH_CMD_EXPORT(led, RT-Thread first led sample);复制错误复制成功

更多其他内核示例可以在 kernel-sample-0.1.0 目录中找到。

rt-threadsrckservice.c(823): error: #929: incorrect use of vaarg fieldwidth = aarg(args, int);
rt-threadsrckservice.c(842): error: #929: incorrect use of vaarg precision = aarg(args, int);
………复制错误复制成功

原因:此类问题基本是ADS安装造成的。 ADS和keil共存,va_start所在头文件指向ADS文件夹。

解决方案:

为了方便有过使用其他RTOS经验的用户快速上手RT-Thread,以及将基于其他RTOS的API编写的应用层代码快速移植到RT-Thread,RT-Thread社区编写了第三个-方 RTOS 兼容层。 目前支持以下第三方RTOS API进行透明移植:

以上第三方RTOS兼容层均提供了本章介绍的STM32F103 Keil软件仿真工程,方便初学者在不依赖开发板的情况下评估兼容层。

RT-Thread Pandora STM32L475 入门指南

本文档将介绍Pandora(即IoT Board)开发板和IoT Board SDK的基本情况。 使开发者熟悉IoT Board SDK的目录结构,并能够运行SDK提供的示例程序。

IoT Board是正电Atom与RT-Thread联合推出的一款基于ARM Cortex-M4内核的开发板。 最高主频80Mhz。 该开发板板载资源丰富,可以充分发挥STM32L475的芯片性能。

开发板外观及资源如下:

该开发板常用板载资源如下:

常用接口:WIRELESS模块接口、TF卡接口、USB串口、USB OTG接口、耳机接口调试接口、板载ST-LINK下载

更详细的开发板信息请参考正电原子官方品牌店的介绍。

如何获取IoT Board SDK:从Github获取或者从Gitee获取。 SDK的目录结构如下:

名称说明

文档

文档

司机

开发板驱动文件

例子

示例程序

图书馆

库文件

rt-线程

rt线程源代码

工具

工具目录

为开发板提供的示例程序存放在examples文件夹中。 下面以第一个示例程序为例,介绍如何运行SDK提供的示例程序。

IoT Board SDK中的示例程序提供MDK和IAR工程,支持GCC开发环境。 下面以MDK开发环境为例,介绍如何运行示例程序。 运行示例程序之前,您需要做好以下准备工作:

MDK开发环境

我们需要安装MDK-ARM 5.24(正式版或评估版,版本5.14及以上)。 该版本也是比较新的版本,可以提供比较完善的调试功能。 请参考安装方法。

将开发板的ST-Link USB口连接到PC

进入examples1_basic_led_blink文件夹,双击project.uvprojx文件,打开MDK5工程,执行编译。 编译完成后,点击下载按钮将固件下载到开发板并观察程序运行情况。

按复位按钮重启开发板,观察开发板上RBG-LED的实际效果。 正常工作后,红色LED会周期性闪烁,如下图:

IoT Board SDK中其他例程的使用方法也是一样的。 了解了例程如何运行后,就可以运行并学习后续的例程了。

完成RT-Thread快速上手! 单击此处继续。

内核学习完成后,继续学习IoT Board SDK中的例程,参考教程。

单片机

单片机实训总结,你所见过的总结应该是什么样的?

2024-1-24 21:01:52

单片机

2020年5月23日树莓派实验室图形化编程平台

2024-1-24 22:02:16

0 条回复 A文章作者 M管理员
    暂无讨论,说说你的看法吧
个人中心
购物车
优惠劵
今日签到
有新私信 私信列表
搜索