嵌入式实时操作系统:RT-Thread设计与实现(txt+pdf+epub+mobi电子书下载)


发布时间:2020-05-21 19:09:32

点击下载

作者:邱祎,熊谱翔,朱天龙

出版社:机械工业出版社

格式: AZW3, DOCX, EPUB, MOBI, PDF, TXT

嵌入式实时操作系统:RT-Thread设计与实现

嵌入式实时操作系统:RT-Thread设计与实现试读:

前言

为什么要写这本书

自2006年发布V0.01版起,到今年正式发布V4.0版,RT-Thread历经12年的累积发展,凭借良好的口碑和开源免费的策略,已经拥有了一个国内最大的嵌入式开源社区,积聚了数十万的软件爱好者。RT-Thread广泛应用于能源、车载、医疗、消费电子等众多行业,已成为国人自主开发、最成熟稳定和装机量最大的开源嵌入式操作系统。

深处于行业之中,我们深刻地感受到近年来国内芯片产业和物联网产业快速崛起的趋势,行业发展迫切需要更多人才,尤其是掌握嵌入式操作系统等底层技术的人才,我们希望通过本书让RT-Thread触达更多人群,让更多的人了解集聚国人智慧的RT-Thread操作系统,从而让RT-Thread赋能更多行业,真正做到“积识成睿,慧泽百川”。

另外,高校学生是RT-Thread非常重视的群体,从2018年起,RT-Thread启动了一系列大学生计划,包括送书计划、培训计划、合作开课、赞助竞赛等,以帮助学生了解和学习RT-Thread,本书编写尽可能做到简单、易懂,让大学生能够轻松上手RT-Thread。希望本书能够加快RT-Thread在高校的普及。

总之,本书的初衷在于降低RT-Thread的学习门槛,让更多人能轻松学习、掌握RT-Thread,从而参与开发RT-Thread,共同打造开源、开放、小而美的物联网操作系统。读者对象

·所有使用C/C++进行编程的开发人员;

·嵌入式软硬件工程师、电子工程师、物联网开发工程师;

·高校计算机/电子/自动化/通信类专业学生、老师;

·其他对嵌入式操作系统感兴趣的人员。如何阅读本书

为了能够阅读本书,建议先学习C语言和STM32编程知识,如果有数据结构和面向对象编程基础则更佳。学习本书时,大多数章节都有配套示例代码,这些代码都可以实际运行,建议边阅读边实战,读完一章的同时完成该章示例实验。

本书分为两大部分,共16章:第1~10章为内核篇;第11~16章为组件篇。

第1~9章介绍RT-Thread内核,首先对RT-Thread进行总体介绍,在随后各章中分别介绍RT-Thread的线程管理、时钟管理、线程间同步、线程间通信、内存管理、中断管理,每章都有配套的示例代码,这部分示例可运行在Keil MDK模拟器环境下,不需要任何硬件。

第10章介绍RT-Thread内核移植,读完本章,可以将RT-Thread移植到实际的硬件板上运行。

第11~16章介绍RT-Thread组件部分,分别介绍Env开发环境、FinSH控制台、设备管理、文件系统和网络框架,这部分配套示例可以运行在硬件板上,分别完成外设访问、文件系统读写、网络通信功能。

本书配套资料包括实验源码及相关工具软件、硬件资料,可以通过关注微信公众号“RTThread物联网操作系统”获得。配套硬件

本书配套硬件为RT-Thread与正点原子联合开发的IoT Board开发板,基于STM32L475主芯片,本书组件篇配套的示例代码都基于IoT Board。IoT Board开发板

本书第16章需要用到如下图所示的ENC28J60模块实现网络示例功能。ENC28J60网络模块

如果已经购买其他开发板,如下图所示的野火和正点原子开发板,也可以配合本书进行学习,前提是根据第10章的介绍完成开发板上的RT-Thread内核移植,然后实现相关的外设驱动。野火和正点原子开发板勘误和支持

由于笔者水平有限,编写时间仓促,书中难免会存在一些错误或者不准确的地方,恳请读者到论坛发帖指正,RT-Thread官方论坛地址为https://www.rt-thread.org/qa/。在学习过程中遇到任何问题,也可以发帖交流,期待能够得到你们的真诚反馈,在技术之路上互勉共进。致谢

本书由诸多RT-Thread开发者小伙伴集体完成,除封面作者外,杨洁、罗娇、虞昊迪、张源、邹诚、姚金润也参与了本书编写工作,郭占鑫、韩方黎、杨广亮、赵盼盼等参与了本书校对工作,王卓然对书稿开发提出了宝贵建议,感谢大家为本书出版做出的贡献。

感谢机械工业出版社华章公司编辑高婧雅帮助和引导我们顺利完成全部书稿。邱祎2018年11月第一篇 内核篇第1章 嵌入式实时操作系统第2章 了解与快速上手RT-Thread第3章 内核基础第4章 线程管理第5章 时钟管理第6章 线程间同步第7章 线程间通信第8章 内存管理第9章 中断管理第10章 内核移植第1章嵌入式实时操作系统

操作系统是指管理和控制计算机硬件与软件资源的计算机程序,是直接运行在计算机上的最基本的系统软件,任何其他软件都必须在操作系统的支持下才能运行。按应用领域来划分,操作系统可分为桌面操作系统、服务器操作系统、移动操作系统和嵌入式操作系统几类。

桌面操作系统是指运行在个人电脑上的操作系统,当前主流的桌面操作系统是微软的Windows操作系统,此外,Linux、Mac OS也是桌面操作系统。

服务器操作系统是指运行在大型服务器上的操作系统,例如云服务器、数据库服务器、网络服务器等,当前主流的服务器操作系统是Linux,微软的Windows服务器操作系统也有部分市场份额。

移动操作系统是指运行在手机、平板、智能电视上的操作系统,谷歌的Android和苹果的iOS都属于移动操作系统,传统的移动设备,如手机、平板,也属于嵌入式设备,只是随着移动设备使用的芯片越来越强大,它们跟传统的嵌入式设备差异明显变大,因此也将移动操作系统单独分类。

嵌入式操作系统指用在嵌入式系统的操作系统。嵌入式系统使用非常广泛,可以理解为除了服务器、个人电脑、移动设备外的计算机都是嵌入式设备。从军事到民用,从工业控制到网络应用,嵌入式系统在我们的生活中无处不在。以下是一些典型的嵌入式设备举例,图1-1中也列出了一些嵌入式操作系统的应用实物的图片。图1-1 常见嵌入式操作系统的应用图1-1 (续)

·军用:各种武器控制(火炮控制、导弹控制、智能炸弹制导引爆装置)、坦克、舰艇、轰炸机等陆海空各种军用电子装备,雷达、电子对抗军事通信装备,野战指挥作战使用的各种专用设备等。

·消费电子:各种信息家电产品,如数字电视机、机顶盒、数码相机、音响设备、可视电话、家庭网络设备、洗衣机、电冰箱、智能玩具等。

·工业控制:各种智能测量仪表、数控装置、可编程控制器、控制机、分布式控制系统、现场总线仪表及控制系统、工业机器人、机电一体化机械设备、汽车电子设备等。

·网络应用:网络基础设施、接入设备、移动终端设备、共享单车、水电气表、物联网终端设备等。

·其他:各类收款机、POS系统、电子秤、条形码阅读机、商用终端、银行点钞机、IC卡输入设备、取款机、自动柜员机、自动服务终端、防盗系统,以及各种银行专业外围设备与各种医疗电子仪器,无一不用到嵌入式系统。1.1 嵌入式系统

嵌入式系统是一种完全嵌入在装置或设备内部为满足特定需求而设计的计算机系统,生活中常见的嵌入式系统就有:电视机顶盒、路由器、电冰箱、微波炉与移动电话等。它们都具有某种特定的功能:对于电视机顶盒而言,它用来播放网络中的电视节目;同样,路由器用于选择最优路径并正确转发网络报文。这类系统专用性强、功能相对单一,通常只针对特定的外部输入进行处理,然后给出相应的结果,这样的特点使得嵌入式系统只需具备相匹配的少量硬件资源,就可完成所需的特定功能,因而能使成本得到有效的控制。

通用计算机系统则恰恰相反,它们并不针对特定的需求,而是尽可能地去满足各种需求,甚至在构造硬件系统时还会考虑未来几年的需求变化。例如,在人们购买电脑时,在自身有限的资金情况下,都希望尽可能获得更高端的性能,用于多媒体、游戏及工作等。

如图1-2所示,嵌入式系统的硬件设备由一些芯片及电路组成,包括主控芯片、电源管理、开发调试时用到的JTAG接口,也可能包含一些数据采集模块、通信模块及音频/视频模块等。图1-2 嵌入式系统硬件框图1.2 实时系统

系统的实时性指的是在固定的时间内正确地对外部事件做出响应。在这段“时间内”,系统内部会做一些处理,例如输入数据的分析计算、加工处理等。而在这段时间之外,系统可能会空闲下来,做一些空余的事。以一个手机终端为例:当一个电话拨入的时候,系统应当及时发出振铃、声音提示以通知主人有来电,询问是否进行接听;而在非电话拨入的时候,人们可以用它进行一些其他操作,例如听音乐、玩游戏等。

从上面的例子我们可以看出,实时系统是一种需求倾向性的系统,对于实时的任务需要在第一时间内做出回应,而对非实时任务则可以在实时事件到达时为之让路——被抢占。所以也可以将实时系统看成是一个等级系统,不同重要性的任务具有不同的优先等级:重要的任务能够优先被响应执行,非重要的任务可以适当往后推迟。

实时计算可以定义成这样一类计算,即系统的正确性不仅取决于计算的逻辑结果,还依赖于产生结果的时间。有两个关键点,即正确地完成和在给定的时间内完成,且两者重要性是等同的。如果计算结果出错,这将不是一个正确的系统,而计算结果正确,但计算所耗费的时间已经偏离需求设定的时间,那么这也不是一个实时系统。图1-3描述了一个实时系统。

对于输入的信号、事件,实时系统必须能够在规定的时间内得到正确的响应,而不管这些事件是单一事件、多重事件,还是同步信号或异步信号。

举一个例子说明:假设一颗子弹从20米外射向一个玻璃杯,子弹的速度是v米/秒,那么经过t=20/v秒后,子弹将击碎玻璃杯。而如1果有一个保护系统在检测到子弹射出后,把玻璃杯拿走了,假设整个过程持续t秒的时间,如果t<t,玻璃杯就不会被击碎,那么就可221以将这个系统看成是一个实时系统。图1-3 实时系统

和嵌入式系统类似,实时系统中也存在一定的计算单元,这些单元可对系统的环境及其内部的应用做出预计,这也就是很多关于实时系统的书中所谈及的可确定性,即系统可以在给定的时间(t秒)内对一个给定事件做出响应。多个事件、多个输入的系统响应的可确定性构成了整个实时系统的可确定性(实时系统并不代表着对所有输入事件具备实时响应,而是在指定的时间内完成对事件的响应)。嵌入式系统的应用领域十分广泛,我们并不是要求所有的专用功能都具备实时性,只有当系统对任务有严格时间限定时,我们才关注它的实时性问题。具体的例子包括实验控制、过程控制设备、机器人、空中交通管制、远程通信、军事指挥与控制系统等。而对打印机这样一个嵌入式应用系统,人们并没有严格的时间限定,只有一个“尽可能快”的期望要求,因此,这样的系统称不上是实时系统。

软实时与硬实时

正如上面所描述的,实时系统关注的不外乎两点,即时间的正确性和功能的正确性。事实上,衡量一个实时系统的正确性正是如此,就是要求系统能在给定的时间内正确地完成相应的任务。但现实中也存在这样一种系统,即在多数情况下,它能够严格地在规定的时间内完成任务,但偶尔它也会稍微超出这个给定的时间范围才能正确地完成任务,我们通常把这种系统称为软实时系统。从系统对规定时间的敏感性的要求来看,实时系统可以分为硬实时系统和软实时系统。

硬实时系统严格限定在规定的时间内完成任务,否则就可能导致灾难的发生,例如导弹拦截系统,汽车引擎系统等,当这些系统不能满足规定的响应时间时,即使只是偶尔,也将导致车毁人亡等重大灾难的发生。

软实时系统,可以允许偶尔出现一定的时间偏差,但是随着时间的偏移,整个系统的正确性也会随之下降,例如可以将一个DVD播放系统看成一个软实时系统,允许它偶尔出现画面或声音延迟。

图1-4绘制了这三种系统(非实时系统、软实时系统和硬实时系统)的时效关系。图1-4 时间与效用的关系

从图1-4中我们可以看出,当事件触发,在时间t内完成,则三类系统的效用是相同的。但是当完成时间超出时间t时,则效用发生了变化。

·非实时系统:超过规定的时间t后,其效用缓慢下降。

·软实时系统:超过规定的时间t后,其效用迅速下降。

·硬实时系统:超过规定的时间t后,其效用立即归零。1.3 嵌入式实时操作系统

在嵌入式设备中,除嵌入式操作系统之外,还有裸机程序,在主函数中编写一个大循环,循环中是各个任务的功能实现,而所有的任务都是平级顺序执行,下一个任务必须等待上一个任务运行完毕才能开始运行,这个运行着的大循环我们称之为后台程序。中断可以打断系统当前的后台任务优先执行,等中断处理完毕,再回到原先后台被中断处继续执行后台程序,中断处理程序称为前台程序。图1-5所示是一个前后台系统。图1-5 前后台系统

这样的前后台系统在实时性处理方面存在缺陷,例如任务1是重要任务,需要能够得到及时响应,在运行任务4的时候,产生中断,执行任务1的条件被满足,最理想的快速响应方式是任务1立即被投入运行,但是在前后台程序中做不到,因为任务是被顺序执行的,即使任务1焦急万分,也必须等待任务4处理完毕后才能被运行。

嵌入式实时操作系统被设计成为一个抢占式系统,能够解决上述的实时性问题,它把任务分为不同的优先级,当运行条件被满足时,高优先级任务可以打断低优先级任务优先运行,从而极大地提高了系统实时性。实时操作系统执行任务示意图如图1-6所示。图1-6 实时操作系统

当然,嵌入式实时操作系统相比前后台程序,不仅有实时性方面的进步,它在多任务管理、任务间通信、内存管理、定时器管理、设备管理等方面,也提供了一套完整的机制,极大程度上便利了嵌入式应用程序的开发、管理和维护。如果要和桌面操作系统进行类比,那么前后台程序开发好比直接使用BIOS进行开发,而使用嵌入式实时操作系统好比在Windows上进行应用开发。

总体来说,嵌入式操作系统是应用于嵌入式系统的软件,用来对接嵌入式底层硬件与上层应用软件,操作系统将底层驱动封装起来为开发者提供功能接口,极大地提高了应用程序的开发效率。1.3.1 主流嵌入式实时操作系统

uC/OS是美国的一款RTOS,发布于1992年。2001年,北航的邵贝贝教授第一次将有关uC/OS的书籍翻译成中文,该书出版后获得了大量好评,当时该书遇上了“嵌入式系统开发”风口,大量的高校学生开始学习嵌入式系统,将该书作为学习嵌入式操作系统的入门书籍,将学习的内容带入各类项目和产品后,它的特点才渐渐崭露头角。在2010年以前,uC/OS一直是国内大多企业的首选RTOS。2010年以后,开源免费的RTOS开始流行,而uC/OS本身的商业收费策略一直未能及时调整,导致很多厂商转而选择开源免费的操作系统,如FreeRTOS、RT-Thread。

FreeRTOS诞生于2003年,按照开源、免费的策略发布,可用于任何商业和非商业场合。2004年,英国的ARM公司推出第一款基于ARMv7-M架构的Cortex-M3 IP核,主打高性价比的MCU市场,随后美国德州仪器公司推出了第一款基于Cortex-M3内核的MCU,接下来意法半导体、恩智浦、飞思卡尔、爱特梅尔等欧美厂商相继推出了基于Cortex-M内核的MCU,出于性价比的考虑,这些厂商都选择了FreeRTOS作为芯片默认使用的嵌入式操作系统,趁着这波热潮,FreeRTOS迅速崛起,在国内外流行开来。

RT-Thread是国内的一款嵌入式实时操作系统,诞生于2006年,许可证类似FreeRTOS,以开源、免费的方式进行发布。与FreeRTOS和uC/OS不同的是,RT-Thread自创建之初的定位就不仅是一个RTOS内核,而是包含网络、文件系统、GUI界面等组件的中间件平台,它秉承开源、免费的思想,积聚吸收社区的力量来不断发展壮大。经过十多年的积淀,RT-Thread已经成为一款知名度较高、口碑极佳、高度稳定可靠的实时操作系统。RT-Thread支持市面上所有的主流编译工具,如IAR、GCC、Keil等;在硬件支持方面,它完成了超过50款MCU芯片和所有主流CPU架构上的移植工作,包括ARM、MIPS、C-Sky、Xtensa、Andes与RISC-V等。在行业应用上,因为RT-Thread的高可靠性和组件丰富等特点,它被广泛应用于安防、医疗、新能源、车载、北斗导航以及消费电子等众多行业。

近两年来,随着RT-Thread推广力度的加大、文档资料的不断完善及周边生态合作伙伴支持热情的高涨,RT-Thread的企业项目需求显著增加,RT-Thread开发者的数量也呈现出加速增长的态势。线下活动方面,RT-Thread借助社区力量,定期组织一系列技术沙龙活动,活动覆盖多数一二线城市,受到了初学者和开发者的欢迎,参与线下技术沙龙成为他们学习RT-Thread、线下交流互勉的一个重要渠道。除此之外,移动微信、QQ社群的运营,线上培训讲座和设计竞赛的陆续展开都成为生态建设的重要部分,推动着RT-Thread社区的健康发展。1.3.2 发展趋势

在传统嵌入式时代,设备之间相互孤立,系统和应用都较为简单,操作系统的价值也相对较低。各个厂商采用一个开源的RTOS内核,根据垂直应用领域的不同,构建、开发各自的上层软件,工作量可控,也基本能满足自身、客户和行业的需求。

进入物联网时代之后,原有的格局和模式将会被完全打破,联网设备的开发难度也呈几何级数增加,可靠性、长待机、低成本、通信方式和传输协议、手机兼容性、二次开发、云端对接等都成为必须考虑与解决的问题。

对于企业来说,带有丰富中间层组件和标准API接口的OS平台无疑能大大降低联网终端开发的难度,也能简化对多种云平台的对接,为未来各种IoT服务应用的部署和更新铺平道路。

国产物联网芯片的逐渐崛起,产业链持续增强的优势,为国产IoT OS的成功提供了良好的机遇和土壤,也为RT-Thread提供了更多的用武之地。物联网终端对软件能力的要求大大提高,RT-Thread作为一款IoT OS,它具有丰富的组件和高度可扩展的特性,这正是市场所需要的,因而越来越多的芯片厂商纷纷将它选为原生操作系统,和芯片一同推向市场。

在物联网时代,相信RT-Thread能和其他国内厂商一起,耐住寂寞、踏实前行、勇于创新、相互提携,实现物联网时代自主操作系统的梦想。1.4 本章小结

本章主要对嵌入式实时系统做了简单的介绍,嵌入式操作系统是嵌入式系统的操作系统,是应用于嵌入式系统的软件,生活中无处不在。嵌入式操作系统又分为实时操作系统与非实时操作系统,本书将重点介绍嵌入式实时操作系统。第2章了解与快速上手RT-Thread

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

在讲解RT-Thread各部分工作原理之前,首先介绍一下RT-Thread的基础知识。2.1 RT-Thread概述

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

RT-Thread主要采用C语言编写,浅显易懂,方便移植。它把面向对象的设计方法应用到实时系统设计中,使得代码风格优雅、架构清晰、系统模块化,并且可裁剪性非常好。针对资源受限的微控制器(MCU)系统,RT-Thread可通过方便易用的工具,裁剪出仅需要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。2.2 RT-Thread的架构

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

RT-Thread与其他很多RTOS(如FreeRTOS、uC/OS)的主要区别之一是,它不仅仅是一个实时内核,还具备丰富的中间层组件,如图2-1所示,它具体包括以下部分。(1)内核层:RT-Thread内核,是RT-Thread的核心部分,包括内核系统中对象的实现,例如多线程及其调度、信号量、邮箱、消息队列、内存管理、定时器等;libcpu/BSP(芯片移植相关文件/板级支持包)与硬件密切相关,由外设驱动和CPU移植构成。(2)组件和服务层:组件是基于RT-Thread内核之上的上层软件,例如虚拟文件系统、FinSH命令行界面、网络框架、设备框架等。这一层采用模块化设计,做到组件内部高内聚,组件之间低耦合。(3)RT-Thread软件包:运行于RT-Thread物联网操作系统平台上,面向不同应用领域的通用软件组件,由描述信息、源代码或库文件组成。RT-Thread提供了开放的软件包平台,这里存放了官方提供或开发者提供的软件包,该平台为开发者提供了众多可重用软件包的选择,这也是RT-Thread生态的重要组成部分。软件包生态对于操作系统的选择至关重要,因为这些软件包具有很强的可重用性,模块化程度很高,极大地方便了应用开发者在最短时间内打造出自己想要的系统。RT-Thread已经支持的软件包数量已经达到60多个,举例如下。

①物联网相关的软件包:Paho MQTT、WebClient、Mongoose、WebTerminal等。

②脚本语言相关的软件包:目前支持JerryScript、MicroPython。

③多媒体相关的软件包:OpenMV、MuPDF。

④工具类软件包:CmBacktrace、EasyFlash、EasyLogger、SystemView。

⑤系统相关的软件包:RTGUI、Persimmon UI、lwext4、partition、SQLite等。

⑥外设库与驱动类软件包:RealTek RTL8710BN SDK。

⑦其他。

从图2-1中可以看出,RT-Thread涵盖了非常多的功能模块,由于篇幅有限,本书不会涉及所有功能模块,本书主要介绍RT-Thread内核、FinSH控制台、I/O设备管理、DFS虚拟文件系统、网络框架等最为核心和基础的部分,通过这些内容的介绍,带领读者进入RT-Thread的大门。图2-1 RT-Thread软件框架图2.3 RT-Thread的获取

1.许可协议

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

2.源代码与文档下载

官方提供了三个途径来下载RT-Thread源代码:RT-Thread官方网站(https://www.rt-thread.org/)、GitHub网站(https://github.com/RT-Thread/rt-thread)及码云网站(https://gitee.com/rtthread/rt-thread)。在RT-Thread官方网站首页(见图2-2),单击主菜单上的“资源”选项,出现下拉菜单,再单击“下载”,进入下载页面,可选择进入Git库下载或网盘下载:在Git库中下载RT-Thread的最新开发代码,在网盘中下载RT-Thread发布版本,本书使用的RT-Thread发布版本为3.1.0。

同时官方网站首页的文档中心也有很多文档供广大用户下载和学习,在开发过程中遇到的任何问题都可以通过社区寻求帮助或者寻找答案!图2-2 RT-Thread官方网站首页2.4 RT-Thread快速上手

嵌入式操作系统因为它的特殊性,往往和硬件平台密切相关,特定的嵌入式操作系统往往只能在特定的硬件上运行。刚接触RT-Thread操作系统的读者并不容易获得一个和RT-Thread操作系统相配套的硬件平台,因此我们使用了软件的方式去模拟一个能够运行RT-Thread操作系统的硬件平台,如ARM公司的MDK-ARM仿真模拟环境;在软件模拟环境中也能达到和硬件环境几乎相同的效果。

MDK-ARM(MDK-ARM Microcontroller Development Kit)软件是一套完整的集成开发环境(IDE),它出自ARM公司,包括针对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操作系统是如何运行的。2.4.1 准备环境

在运行RT-Thread操作系统前,我们需要安装MDK-ARM 5.24(正式版或评估版,5.14版本及以上版本均可),这个版本也是当前比较新的版本,它能够提供相对完善的调试功能。这里采用了16K编译代码限制的评估版5.24版本,如果要解除16K编译代码限制,请购买MDK-ARM正式版。先从www.keil.com官方网站下载MDK-ARM评估版:http://www.keil.com/download/。

在下载时,需要填写一些个人基本信息,请填写相应的完整信息,然后开始下载。

步骤1 下载完成后,鼠标双击运行,会出现如图2-3所示的软件安装界面,这是MDK-ARM的安装说明,单击“Next”按钮进入下一步骤。图2-3 MDK安装图1

步骤2 出现如图2-4所示的界面,选中“I agree to all the terms of the preceding License Agreement”复选框,并单击“Next”按钮进入下一步。

步骤3 出现如图2-5所示的界面,单击“Browse”按钮选择MDK-ARM的安装目录或者直接在“Destination Folder”下的文本框中输入安装路径,这里我们默认“C:\Keil_v5”即可,然后单击“Next”进入下一步。

步骤4 出现如图2-6所示的界面,在“First Name”文本框中输入你的名字,“Last Name”文本框中输入你的姓,“Company Name”文本框中输入你的公司名称,“E-mail”文本框中输入你的邮箱地址,然后单击“Next”按钮进行安装。图2-4 MDK安装图2图2-5 MDK安装图3

步骤5 出现如图2-7所示的界面,等待一段时间后,安装结束。

步骤6 出现如图2-8所示的界面,图中的默认选择不需改动,在这里可以单击“Finish”按钮完成整个MDK-ARM软件的安装。图2-6 MDK安装图4图2-7 MDK安装图5

有了MDK-ARM这个利器,就可以轻松开始RT-Thread操作系统之旅,探索实时操作系统的奥秘了。图2-8 MDK安装图6

注意:MDK-ARM正式版是收费的,如果希望能够编译出更大体积的二进制文件,请购买MDK-ARM正式版。RT-Thread操作系统也支持自由软件基金会的GNU GCC编译器,这是一款开源的编译器,想要了解如何使用GNU的相关工具,请参考RT-Thread网站上的相关文档。2.4.2 初识RT-Thread

本节开始接触RT-Thread的例程源码,为了方便上手,从一份精简的内核代码开始,代码位于配套资料的chapter1-9目录下,源自RT-Thread 3.1.0发布版,并在3.1.0版的基础上进行了裁剪,可以帮助读者快速上手使用RT-Thread。

本书所用的内核例程源码的目录结构如图2-9所示。图2-9 工程目录

各个目录所包含的文件类型的描述如表2-1所示。表2-1 RT-Thread例程文件夹目录

在目录下,有一个project.uvprojx文件,它是这里所引述的例程中的一个MDK5工程文件,双击project.uvprojx图标,打开此工程文件,如图2-10所示。图2-10 MDK工程图

在工程主窗口左侧的Project栏里可以看到该工程的文件列表,这些文件被分别存放到如表2-2中所示的几个组内。表2-2 RT-Thread例程工程目录

现在我们单击窗口上方工具栏中的按钮,对该工程进行编译,如图2-11所示。图2-11 MDK工程编译图

编译的结果显示在窗口下方的Build Output栏中,若无特殊情况,最后一行会显示“0 Error(s),0 Warning(s).”,即无任何错误和警告。

在编译完RT-Thread/STM32后,我们可以通过MDK-ARM的模拟器来仿真运行RT-Thread。单击窗口右上方的按钮或直接按Ctrl+F5组合键进入仿真环境,单击按钮或直接按F5开始仿真。

然后单击该图工具栏中的按钮或者依次选择菜单栏中的“View→Serial Windows→UART#1”命令,打开串口1窗口,可以看到串口输出了RT-Thread的Logo,其模拟运行的结果如图2-12所示。图2-12 MDK模拟仿真图

RT-Thread提供FinSH功能,用于调试或查看系统信息,图2-12中的msh表示FinSH处于一种传统命令行模式,此模式下可以使用类似于Dos/Bash等传统的Shell命令。

比如,我们可以通过输入“help+回车”组合键或者直接按下Tab

试读结束[说明:试读内容隐藏了图片]

下载完整电子书


相关推荐

最新文章


© 2020 txtepub下载