《RT-Thread实时操作系统内核、驱动和应用开发技术》全套教学课件_第1页
《RT-Thread实时操作系统内核、驱动和应用开发技术》全套教学课件_第2页
《RT-Thread实时操作系统内核、驱动和应用开发技术》全套教学课件_第3页
《RT-Thread实时操作系统内核、驱动和应用开发技术》全套教学课件_第4页
《RT-Thread实时操作系统内核、驱动和应用开发技术》全套教学课件_第5页
已阅读5页,还剩857页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第1章RT-Thread嵌入式系统概述与开发基础

1.1RT-Thread嵌入式系统概述全套可编辑PPT课件RT-Thread嵌入式系统概述RT-Thread,全称RealTime-Thread,诞生于2006年,是国内以开源中立、社区化发展起来的一款高可靠实时操作系统,由睿赛德科技负责开发维护和运营。因其十五年的沉淀积累,专业化的运营推广,其高可靠性、安全、高可伸缩性和中间组件丰富易用等特性极大地满足了市场需求。目前已经成为市面上装机量最大(超20亿台)、开发者数量最多(超15万)软硬件生态最好的操作系统之一,被广泛应用于航空、电力、轨道交通、车载、工业自动化、消费电子等众多行业领域。RT-Thread不仅仅是一个单一的实时性操作系统,也是一个完备的应用系统,包含嵌入式系统所需的各种组件:如TCP/IP协议栈,文件系统,C库接口,以及GUI界面等。它还具有体积小、启动快速、占用资源小、实时性高等特点,可用于家电、消费电子、医疗设备、工控等领域。1.1.1RT-Thread操作系统RT-Thread嵌入式系统概述RT-Thread系统底层主要采用C语言编写,性能优秀,目前已经适配市面上众多开发板,移植方便。针对资源受限的微处理器系统,可以使用平台工具,裁剪出仅需3KFlash,1.2KRAM存储空间的NANO版本;对于资源丰富的设备,可以使用在线的软件包配置工具,实现快速的模块化裁剪,通过导入的软件安装包实现类似语音交互、多媒体、滑动控制等复杂功能。RT-Thread文档资料丰富,官网文档中心包含系统简介、内核、设备与驱动、组件及开发工具等内容,每部分内容都包含说明和案例,并提供详细的API参考手册,以供开发者学习和参考。RT-Thread(Real-TimeThread)是一个实时嵌入式操作系统(RTOS),经过多年的发展,它已经成为一种受欢迎的嵌入式系统选择。以下是RT-Thread系统的一些关键发展阶段:1.1.1RT-Thread操作系统RT-Thread嵌入式系统概述1.1.2RT-Thread发展历程1.项目起源RT-Thread的项目始于2006年,最初是由中国开发者Bernie开发的一个小型嵌入式实时操作系统。起初,它是为了满足一些嵌入式系统项目的需求而创建的。2.开源发布RT-Thread于2007年在中国大陆首次开源发布。开源使得更多的开发者可以参与项目,共同推动系统的发展。3.内核架构改进在项目的早期阶段,RT-Thread的内核采用了比较传统的单内核设计。随着时间的推移,项目逐渐转向了微内核架构,这使得系统更加灵活和可定制。RT-Thread嵌入式系统概述4.多线程支持和实时性改进为了适应更多实时应用场景,RT-Thread增加了对多线程的支持,并优化了系统的实时性能。5.设备驱动和硬件平台支持RT-Thread引入了设备驱动框架,使得用户可以方便地添加和管理硬件设备的驱动程序。同时,项目逐步增加了对不同硬件平台的支持,包括各种处理器架构。6.软件包管理系统引入了软件包管理系统,使用户能够方便地选择和管理他们所需的软件组件,从而简化系统的配置和定制。1.1.2RT-Thread发展历程RT-Thread嵌入式系统概述RT-Thread经历了从初始的小型项目到一个功能丰富、灵活且受欢迎的嵌入式系统的演变。它的发展受到了全球嵌入式开发者社区的积极参与和推动。1.1.2RT-Thread发展历程RT-Thread嵌入式系统概述RT-Thread是一个实时嵌入式操作系统(RTOS),其原理与架构主要包括以下几个方面:1.1.3RT-Thread原理与架构1.微内核架构RT-Thread采用微内核设计,将系统内核分为核心部分和可选的模块。核心部分包括调度器、任务管理和基础服务,而其他功能如文件系统、网络协议栈等则是作为可选模块以插件形式存在。这种设计使得系统更加轻量、模块化,用户可以根据应用需求选择加载不同的功能模块。RT-Thread嵌入式系统概述1.1.3RT-Thread原理与架构2.多线程支持RT-Thread支持多线程操作,允许在一个应用程序中同时运行多个任务。每个线程有自己的独立的堆栈和上下文,这有助于提高系统的并发性和灵活性。3.实时性RT-Thread注重实时性能,通过实时调度器实现对任务的高效调度。实时性能对于嵌入式系统来说至关重要,尤其是在对响应时间有严格要求的应用中,如工业控制和汽车电子系统等。4.设备驱动框架RT-Thread提供了设备驱动框架,允许用户方便地添加和管理硬件设备的驱动程序。这有助于提高系统对外部硬件的兼容性,同时使得硬件抽象更容易实现。RT-Thread嵌入式系统概述1.1.3RT-Thread原理与架构5.软件包管理系统RT-Thread引入了软件包管理系统,使得用户可以方便地选择和管理他们所需的软件组件。这些软件包包括各种驱动、文件系统、网络协议栈等,有助于简化系统的配置和定制。6.中断服务机制嵌入式系统通常需要处理中断,RT-Thread提供了中断服务机制,用于处理外部事件和实时响应。这对于与外设通信、传感器输入等操作至关重要。7.支持多种处理器架构RT-Thread被设计为可以移植到多种处理器架构上,包括ARM、MIPS、PowerPC等。这使得它适用于不同类型的硬件平台。RT-Thread嵌入式系统概述1.1.3RT-Thread原理与架构8.系统调度器RT-Thread的系统调度器负责任务的调度和管理,确保任务按照其优先级和时间片轮转的方式执行。这有助于实现任务的合理分配和实时性能的优化。9.内存管理RT-Thread提供了内存管理机制,包括动态内存分配和释放。这对于嵌入式系统来说很重要,因为资源是有限的。10.社区支持和开源RT-Thread是一个开源项目,拥有庞大的开发者社区。社区的支持和贡献推动了系统的不断改进和更新。RT-Thread嵌入式系统概述1.1.3RT-Thread原理与架构RT-Thread以其微内核架构、实时性能和灵活性为特点,为嵌入式系统提供了一个强大的操作系统平台。其开源性质和活跃的社区生态也使得它成为嵌入式开发者首选的RTOS之一。RT-Thread嵌入式系统概述1.1.4RT-Thread应用领域RT-Thread嵌入式系统在各种应用领域都有广泛的应用,以下是一些RT-Thread在嵌入式系统中常见的应用领域:1.工业自动化RT-Thread在工业控制系统中被广泛应用,用于实时控制和监控。它的实时性和多线程支持使得它适合处理工业自动化中的实时任务,如运动控制和传感器数据采集。2.医疗设备在医疗领域,RT-Thread用于控制和监测各种医疗设备,包括呼吸机、心电图仪、血压计等。RT-Thread嵌入式系统概述1.1.4RT-Thread应用领域3.物联网(IoT)设备RT-Thread适用于物联网设备,如智能家居系统、智能传感器和嵌入式物联网网关。其轻量级设计使得它能够在资源受限的设备上运行。4.汽车电子系统在汽车领域,RT-Thread可以用于车载控制系统、嵌入式信息娱乐系统、驾驶辅助系统等。5.家电和消费电子RT-Thread可用于控制家用电器,如智能电视、智能空调、智能冰箱等。其多线程支持和可移植性使得它适用于各种不同的嵌入式设备。RT-Thread嵌入式系统概述1.1.4RT-Thread应用领域6.网络设备RT-Thread可以用于网络设备,如路由器、交换机和网络摄像头。其支持网络协议栈和设备驱动框架使得它适用于处理网络通信任务。7.军事和航空航天在军事和航空航天领域,对实时性和可靠性的要求非常高。RT-Thread可以应用于飞行控制系统、导弹控制系统等。8.能源管理在能源领域,RT-Thread可以用于监控和控制能源设备,如太阳能控制系统、风力发电控制系统等。RT-Thread嵌入式系统概述1.1.4RT-Thread应用领域9.教育和研究RT-Thread也广泛应用于嵌入式系统的教育和研究领域。和研究人员可以使用RT-Thread来学习和研究实时嵌入式系统的开发。RT-Thread在各个领域的应用表现出了很大的灵活性,这使得它成为许多嵌入式系统项目的首选。其开源性质和丰富的社区支持也为开发者提供了更多的资源和工具。第1章RT-Thread嵌入式系统概述与开发基础

1.2RT-Thread嵌入式系统开发基础RT-Thread嵌入式系统开发基础RT-Thread与市场上已有的RTOS如FreeRTOS、uC/OS的主要区别之一是,它不仅仅是一个实时内核,还具备丰富的中间层组件,如下图所示。

RT-Thread系统架构RT-Thread系统架构具体包括以下部分:

RT-Thread系统架构内核层:RT-Thread内核,是RT-Thread的核心部分,包括了内核系统中对象的实现,例

如多线程及其调度、信号量、邮箱、消息队列、内存管理、定时器等;libcpu/BSP(芯片移植相关文件/板级支持包)与硬件密切相关,由外设驱动和CPU移植构成。组件与服务层:组件是基于RT-Thread内核之上的上层软件,例如虚拟文件系统、FinSH命令行界面、网络框架、设备框架等。采用模块化设计,做到组件内部高内聚,组件之间低耦合。RT-Thread软件包:运行于RT-Thread物联网操作系统平台上,面向不同应用领域的通用软件组件,由描述信息、源代码或库文件组成。RT-Thread提供了开放的软件包平台,这里存放了官方提供或开发者提供的软件包,该平台为开发者提供了众多可重用软件包的选择,这也是RT-Thread生态的重要组成部分。。RT-Thread嵌入式系统开发基础RT-Thread嵌入式系统开发基础1.ZI-ARMEmbed本书所依托的开发平台为嵌入式原型机ZI-ARMEmbed,集成了ARMCortex-M4STM32F407控制器,2.8寸真彩LCD液晶屏,可配置的无线通信模块(支持ZigBee/WiFi/Lora/4G等);集成光照强度传感器、三轴传感器、空气质量传感器、大气压力传感器、人体红外传感器、震动传感器、火焰传感器、霍尔传感器、燃气传感器、RGB和LED灯、步进电机传感器、风扇传感器、锁定检测光栅传感器、电磁锁传感器、温湿度传感器、指纹模块等;板载信号指示灯:电源、电池、网络、数据,四路功能按键,四路LED灯,集成锂电池接口,集成电源管理芯片,支持电池的充电管理和电量测量;板载USB串口,Ti仿真器接口,ARM仿真器接口;集成以太网;集成四路RJ45工业接口,提供ARM芯片功能输出,硬件包含O、ADC3.3V、ADC5V、UART、RS485、两路继电器等功能,提供四路3.3V、5V、12V电源输出。

RT-Thread硬件开发平台RT-Thread嵌入式系统开发基础

RT-Thread硬件开发平台ZI-ARMEmbed嵌入式原型机系统ZI-ARMEmbed引脚对照表RT-Thread嵌入式系统开发基础

RT-Thread硬件开发平台2.STM32处理器STM32系列微控制器是一系列基于ARMCortex-M内核的嵌入式微控制器,是ST(意法半导体)公司以ARM公司的Cortex-M0、Cortex-M3、Cortex-M4和Coretex-M7四种RISC内核开发的系列产品STM32系列芯片型号与内核对应关系STM32系列的微控制器在指令集方面是向后兼容的,而相同封装的芯片,大部分引脚的功能也相同(少数电源与新增功能引脚有区别),用户可以在不修改印制电路板的条件下,根据需要更换不同资源(FLASH、RAM),甚至不同内核的芯片来完善自己的设计工作。RT-Thread嵌入式系统开发基础

ZI-ARMEmbed硬件平台连接1.仿真器连接将ARM仿真器与嵌入式原型机板卡的ARM调试口相连接,仿真器USB端与电脑相连接仿真器连接RT-Thread嵌入式系统开发基础

ZI-ARMEmbed硬件平台连接2.串口连接1)使用MiniUSB线将嵌入式原型机板卡与PC机相连。串口连接2)在PC机上右键点击“我的电脑”,点击“管理”进入计算机管理页面。3)点击“设备管理器”,找到端口(COM和LPT),查看串口的端口号:比如COM5(每台电脑串口端口号可能都不一样)。若没有找到端口则有两种可能,第一种是没有按照实验要求使用USB线连接硬件与PC机(重新检查连接即可),另一种为没有安装串口驱动(串口第一次使用需要安装驱动,安装时只需要根据相应提示进行下去就可以),驱动目录在DISK-Packages\53-常用驱动程序\USB串口驱动目录下安装CP210x_Drivers-win7.zip或者CH340_Drivers.zip即可(根据自己实际的硬件去选择不同的驱动)。RT-Thread嵌入式系统开发基础

MobaXterm串口工具1.串口配置1)安装MobaXterm软件,双击MobaXterm.exe文件即可启动。安装MobaXterm2)启动软件之后点击“Session”新建会话,会话类型选择“Serial”串口,在“Serialport”选择对应的串口号(Serialport:COM5,每个电脑可能不一样),串口设置(波特率-数据位-停止位-校验位-流控制):115200-8-1-None-None。设置完成之后点击“OK”即可。串口设置RT-Thread嵌入式系统开发基础

MobaXterm串口工具2.串口使用1)嵌入式原型开发套件硬件上电启动后,会输出串口打印消息。2)在MobaXterm工具的串口终端可以看到启动消息,并进入到FinSH控制台,如图1.12所示。FinSH控制台RT-Thread嵌入式系统开发基础

J-FlashARM烧写工具1.软件安装J-FlashARM软件,可以将hex文件烧写到ARM内核的单片机(如stm32f407)中。双击安装包文件,默认安装。(路径:DISK-Packages\02-嵌入式接口技术\JLinkARM\Setup_JLinkARM_V462.exe)。特别说明:安装J-FlashARM软件时,如果已经安装了IARforARM软件,会弹出如下提示框。J-FlashARM软件安装1此提示框提示是否需要更换掉IARforARM软件安装路径下的JLinkARM.dll文件。点击SelectAll按钮,勾选IAREmbeddedWorkbenchforARM(DLLV4.62in“…\IAR\bin”)选项点击OK按钮,按照默认,完成安装。J-FlashARM软件安装2RT-Thread嵌入式系统开发基础

J-FlashARM烧写工具2.软件配置1)安装完成后,可以在开始菜单栏的SEGGER文件夹下找到J-FlashARM软件。2)根据实际的硬件需要进行配置:打开该程序后,进入如图1.15所示界面,点击“Options->Projectsettings”,进入设置界面。设置界面RT-Thread嵌入式系统开发基础

J-FlashARM烧写工具2.软件配置选择“TargetInterface”选项卡,在界面的第一个下拉框列表中选择“SWD”选择“SWD”选择“CPU”选项卡,选中第一行的“Device”选项,在Device选项框中选择“STSTM32F407VE”(如果是烧写RF2无线模组,对应的Devices选择“STSTM32F103CB”),设置完毕最后点击“确定”。选择“STSTM32F407VE”RT-Thread嵌入式系统开发基础

J-FlashARM烧写工具2.软件配置3)设置完成后,点击“Target->Connect”测试与硬件的连接是否正常。测试与硬件的连接连接成功后,在该界面下的LOG窗口下会显示“Connectedsuccessfully”。连接成功RT-Thread嵌入式系统开发基础

J-FlashARM烧写工具3.烧写固件1)点击“File”->Opendatafile,打开要烧写入嵌入式原型机板卡的hex文件。烧写固件1RT-Thread嵌入式系统开发基础

J-FlashARM烧写工具3.烧写固件2)然后点击“Target->Erasechip”,擦除单片机的Flash扇区。烧写固件2RT-Thread嵌入式系统开发基础

J-FlashARM烧写工具3.烧写固件3)最后点击“Target->Program&Verify”,将hex文件烧写到嵌入式原型机板卡的MCU中。烧写固件3RT-Thread嵌入式系统开发基础1.2.2开发设计与实践本项目使用J-FlashARM软件烧录镜像文件,使用嵌入式原型机板卡的LCD屏幕显示人机交互界面,K1~K4四个功能按键用于用户输入,功能按键对传感器和无线设备参数进行操作。RT-Thread嵌入式系统开发基础1.2.3开发步骤与验证(1)准备嵌入式原型机板卡ZI-ARMEmbed、ARM仿真器、MiniUSB线。(2)完成仿真器、串口(MiniUSB线)、12V电源的连接。(3)使用MobaXterm工具创建串口终端并打开,串口设置(波特率-数据位-停止位-校验位-流控制):115200-8-1-None-None。

硬件部署

程序下载(1)运行J-FlashARM软件打开镜像hex文件。(2)点击J-FlashARM软件“Target->Program&Verify”,将hex文件烧写到板卡的STM32F407芯片中。(3)拔掉ARM仿真器,按下复位键启动程序。RT-Thread嵌入式系统开发基础1.嵌入式原型机板卡程序下载成功之后,LCD屏幕点亮,并显示传感器状态信息,可以通过K1、K2、K3、K4共四个功能按键与系统进行交互。其中【K1】进行翻页,【K2】进行选择和取消选择,【K3】/【K4】进行上下移动。页面1显示的各种采集类传感器数据,页面2显示的是各种控制类传感器状态及开关操作,页面3显示的是各种安防类传感器状态,页面4显示的是无线设备参数。页面1:各种采集类传感器数据。

验证效果各种采集类传感器数据RT-Thread嵌入式系统开发基础1.嵌入式原型机板卡页面2:各种控制类传感器状态及开关操作。

验证效果各种控制类传感器状态及开关操作页面3:各种安防类传感器状态。各种安防类传感器状态页面4:无线设备参数。无线设备参数RT-Thread嵌入式系统开发基础2.FinSH控制台1)程序启动后在MobaXterm工具的串口终端可以看到启动消息,并进入到FinSH控制台。2)在MobaXterm串口终端FinSH控制台输入“help”命令(输入之前需要把输入法切换到英文),输出系统可使用的命令,在控制台中使用这些不同的命令可得到不同的输出信息。3)可以参照实验步骤去操作嵌入式原型机板卡的功能,进一步加深对板子的认识。

验证效果RT-Thread嵌入式系统开发基础本小节首先学习了RT-Thread系统架构、J-FlashARM烧写工具,然后使用嵌入式原型机板卡的LCD屏幕显示人机交互界面,K1~K4四个功能按键用于用户输入,功能按键对传感器和无线设备参数进行操作与开发。1.2.4小结第1章RT-Thread嵌入式系统概述与开发基础

1.3RT-ThreadStudio应用开发RT-ThreadStudio应用开发嵌入式系统集成开发环境(IntegratedDevelopmentEnvironment,IDE)是一种用于嵌入式系统开发的集成工具,它提供了一套功能强大的工具和资源,以帮助开发人员创建、编译、调试和测试嵌入式系统的软件和硬件。以下是一些常见的嵌入式系统IDE:KeilµVision:Keil是一家知名的嵌入式工具提供商,其µVisionIDE广泛用于开发ARMCortex-M微控制器和其他嵌入式系统。它包括编译器、调试器、仿真器和各种插件。IAREmbeddedWorkbench:IARSystems的EmbeddedWorkbench是另一个受欢迎的IDE,用于多种不同的嵌入式平台,包括ARM、MSP430和Renesas等。RT-ThreadStudio应用开发AtmelStudio:AtmelStudio是MicrochipTechnology(之前是AtmelCorporation)为其AVR和SAM微控制器提供的IDE。它集成了编译器、调试工具和AtmelSTART用于快速启动项目的库。Eclipse:Eclipse是一个免费的、开源的IDE平台,可通过各种插件扩展以支持不同的嵌入式系统开发。它通常需要额外的插件来支持特定的硬件架构和编程语言。PlatformIO:PlatformIO是一个用于嵌入式开发的开源IDE,支持多种平台和硬件架构,包括Arduino、ESP8266、ESP32、STM32等。CodeComposerStudio:CodeComposerStudio是德州仪器(TexasInstruments)为其TivaC和CCS系列微控制器提供的集成开发环境。RT-ThreadStudio应用开发RT-ThreadStudio:是一个基于RT-Thread(Real-TimeThread)实时操作系统的集成开发环境(IDE),专门设计用于嵌入式系统和物联网设备。本节要求掌握的知识点如下:1.了解RT-ThreadStudio软件简介。2.掌握RT-ThreadStudio新建工程。3.掌握RT-ThreadStudio编译、调试及程序下载基本开发方法。RT-ThreadStudio应用开发RT-ThreadStudio是由RT-Thread团队开发的一款集成开发环境(IDE),专门用于支持和开发基于RT-Thread实时操作系统的嵌入式应用程序。它提供了一套工具,帮助开发人员更容易地创建、调试和部署嵌入式系统。以下是一些RT-ThreadStudio的关键特点和功能:1.基于EclipseRT-ThreadStudio的基础是EclipseIDE,这是一个流行的开源综合性IDE平台。这使得RT-ThreadStudio可以利用Eclipse生态系统中的丰富插件和工具。2.支持多种处理器架构RT-ThreadStudio支持多种处理器架构,包括ARM、MIPS、RISC-V等。这使得它适用于不同类型的嵌入式系统。1.3.1RT-ThreadStudio分析RT-ThreadStudio应用开发3.RT-Thread集成IDE集成了RT-Thread操作系统,提供了对RT-ThreadAPI的直观支持,简化了RT-Thread项目的创建和配置。4.图形化配置工具RT-ThreadStudio提供了图形化配置工具,允许开发人员通过界面配置RT-Thread操作系统,而无需手动编辑配置文件。5.全面的调试支持支持多种调试工具,包括GDB调试器,使开发人员能够进行全面的调试和性能分析。6.项目管理工具提供了项目管理工具,方便开发人员管理复杂的嵌入式项目,包括代码组织、构建和部署。1.3.1RT-ThreadStudio分析RT-ThreadStudio应用开发RT-ThreadStudio旨在简化嵌入式系统的开发流程,提高开发效率,特别是对于使用RT-Thread操作系统的项目,如图1.27所示。1.3.1RT-ThreadStudio分析图1.27RT-ThreadStudioRT-ThreadStudio应用开发安装部署RT-ThreadStudio开发环境,使用RT-ThreadStudio新建工程,编译和下载程序;熟悉RT-ThreadStudio开发环境的常用操作,熟悉RT-ThreadStudio程序调试。1.3.2开发设计与实践RT-ThreadStudio应用开发1)准备嵌入式原型机板卡ZI-ARMEmbed、ARM仿真器、MiniUSB线。2)完成仿真器、串口(MiniUSB线)、12V电源的连接。3)使用MobaXterm工具创建串口终端并打开,串口设置(波特率-数据位-停止位-校验位-流控制):115200-8-1-None-None。1.3.3开发步骤与验证

硬件部署RT-ThreadStudio应用开发1)RT-ThreadStudio的软件包已经存放在随书资源包里面,也可以从官方/studio.html下载纯净版,但是开发过程中推荐使用随书资源包中的安装包,该安装包已经集成了必备的系统内核和芯片BSP包。2)将RT-ThreadStudio.zip压缩包放在任意目录下解压,不要有中文路径,使用右键以管理员的身份运行studio.exe。或者右键studio.exe选择属性,在属性页面的兼容性中勾选“以管理员的身份运行此程序”,如图1.28所示。1.3.3开发步骤与验证

安装软件RT-ThreadStudio应用开发1.3.3开发步骤与验证

安装软件图1.28安装RT-ThreadStudio1RT-ThreadStudio应用开发1.3.3开发步骤与验证

安装软件图1.29安装RT-ThreadStudio2软件打开后如图1.29所示。RT-ThreadStudio应用开发1.3.3开发步骤与验证

安装软件图1.30安装RT-ThreadStudio3

打开RT-ThreadStudio软件后,在工具栏找到“

”图标,名称为“SDKManager”,可以进行SDK软件包管理,如图1.30所示。RT-ThreadStudio应用开发1.3.3开发步骤与验证

安装软件图1.31安装RT-ThreadStudio44)本开发中的硬件主芯片为STM32F407,RT-Thread采用4.1.0版本。需要保障SDKManager管理器中RT-Thread_Source_Code对应的4.1.0版本内核、Chip_Support_Packages对应的STM32F4已经安装,安装后的截图如下所示,提供的软件包中这些组件是默认安装好的,如图1.31和1.32所示。RT-ThreadStudio应用开发1.3.3开发步骤与验证

安装软件图1.32安装RT-ThreadStudio5RT-ThreadStudio应用开发1.3.3开发步骤与验证

工具使用图1.33新建工程11.新建工程1)打开RT-ThreadStudio软件,在菜单栏选择“文件->新建->RT-Thread项目”创建RT-Thread项目(或者“文件->新建->项目->RT-Thread项目”),如图1.33所示。RT-ThreadStudio应用开发1.3.3开发步骤与验证

工具使用图1.34新建工程22)根据如下的配置选项进行设置:工程名:02-Template;RT-Thread:4.1.0;厂商:STM;系列:STM32F4;子系列:STM32F407;芯片:STM32F407VE;调试器:J-Link;接口:SWD。设置完成后,点击完成即可创建02-Template工程,如图1.34所示。RT-ThreadStudio应用开发1.3.3开发步骤与验证

工具使用图1.35新建工程33)创建好的02-Template工程完成后如图1.35所示。RT-ThreadStudio应用开发1.3.3开发步骤与验证

工具使用图1.36工程编译12.工程编译1)点击工具栏“

”构建按钮完成项目的编译,如图1.36所示。RT-ThreadStudio应用开发1.3.3开发步骤与验证

工具使用2)在控制台窗口提示编译完成并没有报错即表示程序编译成功。RT-ThreadStudio应用开发1.3.3开发步骤与验证

工具使用图1.37工程下载13.工程下载1)如果需要将程序下载到硬件板卡,可点击工具栏“

”下载按钮,即可完成程序的下载,如图1.37所示。RT-ThreadStudio应用开发1.3.3开发步骤与验证

工具使用2)在控制台窗口提示执行完毕并没有报错即表示完成程序的下载。3)程序下载完成后,按下硬件板卡的复位键即可运行新的程序,在MobaXterm串口终端可以看到程序的启动打印信息。\|/-RT-ThreadOperatingSystem/|\4.1.0buildOct13202217:33:302006-2022CopyrightbyRT-Threadteam[D/main]HelloRT-Thread!msh>[D/main]HelloRT-Thread![D/main]HelloRT-Thread!RT-ThreadStudio应用开发1.3.3开发步骤与验证

工具使用图1.38调试按钮启动调试功能4.工程调试1)如果需要进行程序调试,可点击工具栏“

”调试按钮启动调试功能,如图1.38所示。RT-ThreadStudio应用开发1.3.3开发步骤与验证

工具使用图1.39工具栏2)进入调试功能后,工具栏中出现如图1.39所示调试使用按钮。下面是部分按钮的使用解释。RT-ThreadStudio应用开发1.3.3开发步骤与验证

工具使用工具栏图标图标的功能表示程序启动。表示程序暂停,暂停后点击程序启动继续运行。表示调试停止,点击后调试程序退出,退出调试模式。表示单步跳入,程序跳入,比如跳入一个函数内部。表示单步跳过,程序不会跳入具体函数内部,可理解单行调试。表示单步返回,当进入函数内部时,使用此按钮单步跳出该函数,进入外部函数。表示指令步进模式,选择此模式后,可实现汇编代码的单步调试。RT-ThreadStudio应用开发1.3.3开发步骤与验证

工具使用图1.40添加断点3)断点:在调试模式下,在程序需要的位置双击序号处即可添加断点,如图1.40所示。RT-ThreadStudio应用开发1.3.3开发步骤与验证

工具使用图1.41取消断点点击工具栏“”继续按钮全速运行程序,程序运行到断点处会停止运行。在右侧的断点管理器中可以查看到所有的断点,这里可以将不需要的断点取消掉,如图1.41所示。RT-ThreadStudio应用开发1.3.3开发步骤与验证

工具使用图1.42跟踪变量14)变量:在右侧分栏中找到变量窗口,这个窗口中默认显示当前所在函数中的所有变量,如图1.42所示。RT-ThreadStudio应用开发1.3.3开发步骤与验证

工具使用图1.43跟踪变量2也可以手动输入你想查阅的变量名,在表达式窗口中输入表达式即可。如下输入count变量,如图1.43所示RT-ThreadStudio应用开发1.3.3开发步骤与验证

工具使用图1.44工具栏5)外设寄存器:由于RTT软件的问题,要查看寄存器的数值时需要这里配置CSP包的版本,在新建工程时选择的版本是0.2.2,所以下面就需要修改配置路径。点击工具栏“

”调试配置按钮,如图1.44所示。RT-ThreadStudio应用开发1.3.3开发步骤与验证

工具使用图1.45配置工程1在SVDPath栏中找到filepath,将里面的0.2.0修改为的版本0.2.2,如图1.45和1.46所示。RT-ThreadStudio应用开发1.3.3开发步骤与验证

工具使用图1.46

配置工程2RT-ThreadStudio应用开发1.3.3开发步骤与验证

工具使用图1.47查看寄存器修改完成后点击确定,这时候重新启动调试按钮即可正常显示寄存器的数值。点击相应的寄存器,会在状态栏中显示具体的寄存器值,如图1.47所示。RT-ThreadStudio应用开发1.3.3开发步骤与验证

工具使用6)程序调试完后,点击工具栏“

”停止图标退出调试状态。RT-ThreadStudio应用开发1.3.3开发步骤与验证

验证效果1)关闭RT-ThreadStudio软件,拔掉仿真器。按下嵌入式原型机板卡电源按键重新开机上电。2)本项目创建了一个初始工程,在MobaXterm串口终端默认每秒打印一次“HelloRT-Thread!”消息。\|/-RT-ThreadOperatingSystem/|\4.1.0buildOct13202217:33:302006-2022CopyrightbyRT-Threadteam[D/main]HelloRT-Thread!msh>[D/main]HelloRT-Thread![D/main]HelloRT-Thread!3)也可以参考实验步骤3熟悉RT-ThreadStudio软件的使用和调试,自行设置程序断点,进行单步调试,观察程序中不同窗口的具体数值,深入了解工具的使用。RT-ThreadStudio应用开发1.3.4小结本小节学习了RT-ThreadStudio基本开发工具,利用掌握RT-ThreadStudio进行新建工程、编译、调试及程序下载基本开发方法。第1章RT-Thread嵌入式系统概述与开发基础

1.4RT-Thread嵌入式系统移植技术开发RT-Thread嵌入式系统移植技术开发1.RT-Thread系统启动流程RT-Thread启动代码统一入口为rtthread_startup(),芯片启动文件在完成必要工作(如初始化时钟、配置中断向量表、初始化堆栈等)后,最终会在程序跳转时,跳转至RT-Thread的启动入口中。RT-Thread的启动流程如下:1)全局关中断,初始化与系统相关的硬件。2)打印系统版本信息,初始化系统内核对象(如定时器、调度器)。3)初始化用户main线程(同时会初始化线程栈),在main线程中对各类模块依次进行初始化。4)初始化软件定时器线程、初始化空闲线程。5)启动调度器,系统切换到第一个线程开始运行(如main线程),并打开全局中断。1.4.1RT-Thread系统移植原理分析RT-Thread嵌入式系统移植技术开发2.启动文件(zonesion/common/LIB/Libraries/startup_stm32f407xx.S)

启动文件(startup.s)由芯片厂商提供,位于芯片固件库中。每款芯片都有相对应的启动文件,在不同开发环境下启动文件也不相同。当系统加入RT-Thread之后,会将RT-Thread的启动放在调用main()函数之前。1.4.1RT-Thread系统移植原理分析RT-Thread启动在startup.s中主要完成初始化时钟、配置中断向量表;完成全局/静态变量的初始化工作;初始化堆栈;库函数的初始化;程序的跳转等内容。3.libcpu(rt-thread/libcpu)

RT-Thread的libcpu抽象层向下提供了一套统一的CPU架构移植接口,这部分接口包含了全局中断开关函数、线程上下文切换函数、时钟节拍的配置和中断函数、Cache等等内容,RT-Thread支持的cpu架构在源码的libcpu文件夹下。RT-Thread嵌入式系统移植技术开发4.上下文切换(rt-thread/libcpu/arm/cortex-m4/context_gcc.S)

上下文切换(context_xx.s)表示CPU从一个线程切换到另一个线程、或者线程与中断之间的切换等。在上下文切换过程中,CPU一般会停止处理当前运行的代码,并保存当前程序运行的具体位置以便之后继续运行。1.4.1RT-Thread系统移植原理分析上下文切换接口函数RT-Thread嵌入式系统移植技术开发5.线程初始化(rt-thread/libcpu/arm/cortex-m4/cpuport.c)线程栈初始化(cpuport.c):在RT-Thread中,线程具有独立的栈,当进行线程切换时,会将当前线程的上下文存在栈中,当线程要恢复运行时,再从栈中读取上下文信息,进行恢复。rt_hw_hard_fault_exception()为故障异常处理函数,在发生硬件错误时,执行HardFault_Handler中断,会执行该函数。该文件中主要实现线程栈的初始化rt_hw_stack_init()与hardfault异常处理函数1.4.1RT-Thread系统移植原理分析线程栈初始化接口函数RT-Thread嵌入式系统移植技术开发6.中断与异常在Cortex-M内核上,所有中断都采用中断向量表的方式进行处理,即当一个中断触发时,处理器将直接判定是哪个中断源,然后直接跳转到相应的固定位置进行处理,不需要再自行实现中断管理。7.板级文件板级文件(board.c和board.h)主要是针对rt_hw_board_init()函数内容的实现,该函数在板级配置文件board.c中,函数中做了许多系统启动必要的工作,其中包含:1)配置系统时钟。2)实现OS节拍。3)初始化外设:如GPIO/UART等等。4)设置控制台的串口设备。5)初始化系统内存堆,实现动态堆内存管理。6)板级自动初始化,使用INIT_BOARD_EXPORT()自动初始化的函数会在此处被初始化。7)其他必要的初始化。1.4.1RT-Thread系统移植原理分析RT-Thread嵌入式系统移植技术开发1.4.1RT-Thread系统移植原理分析/*************************************************************************************************名称:rt_hw_board_init()*功能:板级初始化************************************************************************************************/RT_WEAKvoidrt_hw_board_init(){externvoidhw_board_init(char*clock_src,int32_tclock_src_freq,int32_tclock_target_freq);

/*Heapinitialization*/#ifdefined(RT_USING_HEAP)rt_system_heap_init((void*)HEAP_BEGIN,(void*)HEAP_END);//堆内存初始化#endif

hw_board_init(BSP_CLOCK_SOURCE,BSP_CLOCK_SOURCE_FREQ_MHZ,BSP_CLOCK_SYSTEM_FREQ_MHZ);//板级初始化

/*Settheshellconsoleoutputdevice*/#ifdefined(RT_USING_DEVICE)&&defined(RT_USING_CONSOLE)rt_console_set_device(RT_CONSOLE_DEVICE_NAME);//设置控制台的调用的串口设备名#endif

/*Boardunderlyinghardwareinitialization*/#ifdefRT_USING_COMPONENTS_INITrt_components_board_init();//初始化组件#endif}RT-Thread嵌入式系统移植技术开发1.4.1RT-Thread系统移植原理分析

在rt_hw_board_init函数中还会调用hw_board_init函数,该函数中进行的就是hal库的初始化、系统时钟的配置clk_init、系统滴答时钟的配置rt_hw_systick_init、pin设备和串口设备的打开等等。/*************************************************************************************************名称:hw_board_init()*功能:板级初始化************************************************************************************************/voidhw_board_init(char*clock_src,int32_tclock_src_freq,int32_tclock_target_freq){externvoidrt_hw_systick_init(void);externvoidclk_init(char*clk_source,intsource_freq,inttarget_freq);

#ifdefSCB_EnableICache/*EnableI-Cache---------------------------------------------------------*/SCB_EnableICache();#endif

#ifdefSCB_EnableDCache/*EnableD-Cache---------------------------------------------------------*/SCB_EnableDCache();#endif/*HAL_Init()functioniscalledatthebeginningoftheprogram*/HAL_Init();//hal库初始化,完成中断分组等等RT-Thread嵌入式系统移植技术开发1.4.1RT-Thread系统移植原理分析/*enableinterrupt*/__set_PRIMASK(0);/*Systemclockinitialization*/clk_init(clock_src,clock_src_freq,clock_target_freq);//系统时钟初始化/*disbaleinterrupt*/__set_PRIMASK(1);

rt_hw_systick_init();//系统滴答时钟初始化

/*Pindriverinitializationisopenbydefault*/#ifdefRT_USING_PINexternintrt_hw_pin_init(void);rt_hw_pin_init();//pin设备初始化#endif

/*USARTdriverinitializationisopenbydefault*/#ifdefRT_USING_SERIALexternintrt_hw_usart_init(void);rt_hw_usart_init();//串口设备注册#endif}RT-Thread嵌入式系统移植技术开发8.配置系统闹钟系统时钟的配置函数是在drv_clk.c文件中clk_init函数进行,是给各个硬件模块提供工作时钟的基础,一般在hw_board_init()函数中进行调用,位于drv_common.c文件中。RT-ThreadStudio软件默认生成的代码使用的是内部时钟,由于各家厂商使用的外部晶振频率不一定相同,所以这一点需要各板级厂商根据需求进行修改clk_init函数来启动外部晶振,下面是这里调用的一种方式,这里使用的外部晶振源为8MHz。1.4.1RT-Thread系统移植原理分析/*************************************************************************************************名称:clk_init(char*clk_source,intsource_freq,inttarget_freq)*功能:时钟源初始化*参数:clk_source时钟源字符描述,比如HSE,表示外部晶振源*参数:source_freq晶振源的频率*参数:target_freq晶振源的目标频率************************************************************************************************/voidclk_init(char*clk_source,intsource_freq,inttarget_freq){if(strcmp(clk_source,"HSE")==0)//外部晶振{RCC_OscInitTypeDefRCC_OscInitStruct={0};RCC_ClkInitTypeDefRCC_ClkInitStruct={0};

/**Configurethemaininternalregulatoroutputvoltage*/__HAL_RCC_PWR_CLK_ENABLE();RT-Thread嵌入式系统移植技术开发1.4.1RT-Thread系统移植原理分析__HAL_PWR_VOLTAGESCALING_CONFIG(PWR_REGULATOR_VOLTAGE_SCALE1);/**InitializestheCPU,AHBandAPBbussesclocks*/RCC_OscInitStruct.OscillatorType=RCC_OSCILLATORTYPE_HSE;RCC_OscInitStruct.HSEState=RCC_HSE_ON;RCC_OscInitStruct.PLL.PLLState=RCC_PLL_ON;RCC_OscInitStruct.PLL.PLLSource=RCC_PLLSOURCE_HSE;RCC_OscInitStruct.PLL.PLLM=8;RCC_OscInitStruct.PLL.PLLN=target_freq*2;RCC_OscInitStruct.PLL.PLLP=RCC_PLLP_DIV2;RCC_OscInitStruct.PLL.PLLQ=7;if(HAL_RCC_OscConfig(&RCC_OscInitStruct)!=HAL_OK){Error_Handler();}/**InitializestheCPU,AHBandAPBbussesclocks*/RCC_ClkInitStruct.ClockType=RCC_CLOCKTYPE_HCLK|RCC_CLOCKTYPE_SYSCLK|RCC_CLOCKTYPE_PCLK1|RCC_CLOCKTYPE_PCLK2;RCC_ClkInitStruct.SYSCLKSource=RCC_SYSCLKSOURCE_PLLCLK;RCC_ClkInitStruct.AHBCLKDivider=RCC_SYSCLK_DIV1;RCC_ClkInitStruct.APB1CLKDivider=RCC_HCLK_DIV4;RCC_ClkInitStruct.APB2CLKDivider=RCC_HCLK_DIV2;RT-Thread嵌入式系统移植技术开发1.4.1RT-Thread系统移植原理分析if(HAL_RCC_ClockConfig(&RCC_ClkInitStruct,FLASH_LATENCY_5)!=HAL_OK){Error_Handler();}}else{system_clock_config(target_freq);}}RT-Thread嵌入式系统移植技术开发9.实现OS节拍OS节拍也叫时钟节拍或OStick。任何操作系统都需要提供一个时钟节拍,以供系统处理所有和时间有关的事件。时钟节拍的实现:通过硬件timer实现周期性中断,在定时器中断中调用rt_tick_increase()函数实现全局变量rt_tick自加,从而实现时钟节拍。一般地,在CortexM上直接使用内部的滴答定时器Systick实现。时钟节拍由配置为中断触发模式的硬件定时器产生,当中断到来时,将调用一次:voidrt_tick_increase(void),通知操作系统已经过去一个系统时钟;不同硬件定时器中断实现都不同,下面的中断函数以STM32定时器作为示例。如下是STM32配置OS节拍示例,在初始化时钟节拍后,直接在SysTick_Handler()中断服务例程中调用rt_tick_increase()。rt_hw_systick_init函数由hw_board_init函数调用。该函数使用hal库完成滴答时钟的配置,并设置滴答时钟的中断优先级,可见这里的优先级设置是最高的。中断服务例程也定义在同样的文件内。1.4.1RT-Thread系统移植原理分析RT-Thread嵌入式系统移植技术开发9.实现OS节拍1.4.1RT-Thread系统移植原理分析/*SysTickconfiguration*/voidrt_hw_systick_init(void){#ifdefined(SOC_SERIES_STM32H7)HAL_SYSTICK_Config((HAL_RCCEx_GetD1SysClockFreq())/RT_TICK_PER_SECOND);#elseHAL_SYSTICK_Config(HAL_RCC_GetHCLKFreq()/RT_TICK_PER_SECOND);#endifHAL_SYSTICK_CLKSourceConfig(SYSTICK_CLKSOURCE_HCLK);HAL_NVIC_SetPriority(SysTick_IRQn,0,0);}/*中断服务例程*/voidSysTick_Handler(void){/*enterinterrupt*/rt_interrupt_enter();HAL_IncTick();rt_tick_increase();/*leaveinterrupt*/rt_interrupt_leave();}RT-Thread嵌入式系统移植技术开发1.4.2开发设计与实践针对嵌入式原型机板卡ZI-ARMEmbed的硬件,进行RT-Thread项目系统移植。RT-Thread嵌入式系统移植技术开发1.4.3.1硬件部署(1)准备嵌入式原型机板卡ZI-ARMEmbed、ARM仿真器、MiniUSB线。(2)完成仿真器、串口(MiniUSB线)、12V电源的连接。(3)使用MobaXterm工具创建串口终端并打开,串口设置(波特率-数据位-停止位-校验位-流控制):115200-8-1-None-None。1.4.3开发步骤与验证

系统移植本次实验是在02-Template示例工程进行项目改进的,由于该示例工程是由RT-ThreadStudio软件自动生成的,具有一定的参考意义,因此本次实验是在02-Template示例工程的基础上针对实际的硬件进行板级BSP包移植,形成一个整体项目的实例工程,便于后面各个实验的代码建立。也可以直接导入本项目已经创建好的工程03-init直接使用。RT-Thread嵌入式系统移植技术开发1.4.3开发步骤与验证

系统移植1.创建工程1)将实验2:02-Template复制一份命名为03-init,并拷贝到RT-ThreadStudio\workspace工作区目录下。2)修改.cproject第215行的目录路径。(03-init/.cproject)

将这里workspacePath中02-Template修改为03-init。<storageModulemoduleId="refreshScope"versionNumber="2"><configurationconfigurationName="Debug"><resourceresourceType="PROJECT"workspacePath="/03-init"/></configuration></storageModule>RT-Thread嵌入式系统移植技术开发1.4.3开发步骤与验证

系统移植1.创建工程3)修改.project第3行和倒数第3行的工程名。(03-init/.project)<?xmlversion="1.0"encoding="UTF-8"?><projectDescription><name>03-init</name><comment/><projects></projects><buildSpec><buildCommand><name>org.eclipse.cdt.managedbuilder.core.genmakebuilder</name><triggers>clean,full,incremental,</triggers><arguments></arguments></buildCommand><buildCommand><name>org.eclipse.cdt.managedbuilder.core.ScannerConfigBuilder</name><triggers>full,incremental,</triggers><arguments></arguments></buildCommand></buildSpec><natures><nature>ature</nature><nature>org.rt-thread.studio.rttnature</nature><nature>org.eclipse.cdt.managedbuilder.core.managedBuildNature</nature><nature>org.eclipse.cdt.managedbuilder.core.ScannerConfigNature</nature></natures><name>03-init</name><linkedResources/></projectDescription>

如上,将这里name中02-Template修改为03-init。RT-Thread嵌入式系统移植技术开发1.4.3开发步骤与验证

系统移植1.创建工程4)修改.settings目录中的projcfg.ini最后一行为新工程名。=(03-init/.settings/projecfg.ini)#RT-ThreadStudioProjectConfiguration#FriSep0215:21:23CST2022project_type=rttchip_name=STM32F407VEcpu_name=Nonetarget_freq=168clock_source=hsidvendor_name=STMicroelectronicsrx_pin_name=PA10rtt_path=repo/Extract/RT-Thread_Source_Code/RT-Thread/4.1.0source_freq=0csp_path=repo/Extract/Chip_Support_Packages/RealThread/STM32F4/0.2.2sub_series_name=STM32F407selected_rtt_version=4.1.0cfg_version=v3.0tool_chain=gccuart_name=uart1tx_pin_name=PA9rtt_nano_path=output_project_path=C\:/RT-ThreadStudio/workspacehardware_adapter=J-Linkproject_name=03-init如上,将这里project_name中02-Template修改为03-init。RT-Thread嵌入式系统移植技术开发1.4.3开发步骤与验证

系统移植1.创建工程5)修改.settings目录中的4个配置文件头为新工程名。(03-init/.settings)修改前工程名修改后工程名RT-Thread嵌入式系统移植技术开发1.4.3开发步骤与验证

系统移植2.导入工程1)运行RT-ThreadStudio软件,在菜单栏选择“文件->导入”功能“选择RT-ThreadStudio项目到工作空间中”,点击下一步,选择根目录为RT-ThreadStudio\workspace工作区目录,将会出现目录下的所有工程,勾选03-init工程并点击完成即可导入工程1导入工程2RT-Thread嵌入式系统移植技术开发1.4.3开发步骤与验证

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论