【精品】单片机实时操作系统RT-THREAD及在在STM32移植华工名师详细课件
- 格式:pptx
- 大小:484.09 KB
- 文档页数:20
UART 设备 UART 简介UART( Uni versal Asynchronous Receiver/Tra nsmitter)通用异步收发传输器,UART 作为异步串口通信协议的一种,工作原理是将传输数据的每个字符 一位接一位地传输。
是在应用程序开发过程中使用频率最高的数据总线。
UART 串口的特点是将数据一位一位地顺序传送,只要 实现双向通信,一根线发送数据的同时用另一根线接收数据。
几个重要的参数,分别是波特率、起始位、数据位、停止位和奇偶检验位,对 于两个使用UART 串口通信的端口,这些参数必须匹配,否则通信将无法正常 完成。
UART 串口传输的数据格式如下图所示:2根传输线就可以UART 串口通信有? 起始位:表示数据传输的开始,电平逻辑为 “0 。
?数据位:可能值有5、6、7、8、9,表示传输这几个bit 取值为8,因为一个ASCII 字符值为8位。
?奇偶校验位:用于接收方对接收到的数据进行校验,校验 为偶数(偶校验)或奇数(奇校验),以此来校验数据传送的正确性, 要此位也可以。
? 停止位:表示一帧数据的结束。
电平逻辑为“ 1”。
?波特率:串口通信时的速率,它用单位时间内传输的二进制代码的有效位(bit)数来表示,其单位为每秒比特数 bit/s(bps)4800、9600、14400、38400、115200 等, 115200表示每秒钟传输115200位数据。
访问串口设备应用程序通过RT-Thread 提供的I 关接口如下所示:I/O 位数据。
一般 “ 1 ”的位数使用时不需。
常见的波特率值有 数值越大数据传输的越快,波特率为设备管理接口来访问串口硬件,相查找串口设备应用程序根据串口设备名称获取设备句柄,进而可以操作串口设备,查找 设备函数如下所示,rt_device_t rt_device_find( const char* name);描述返回©找到对应设备将返回相应的S 备句柄/*接收模式参数*/narrc设备名称IRT NULL没有找到拾应的设笛对觀一般情况下,注册到系统的串口设备名称为 uart0 如下所示: ,uartl 等,使用示例#defi ne SAMP LE_UART_NAME "uart2"/*串口设备名称*/static rt device t serial; /*串口设备句柄*//*查找串口设备*/serial = rt_device_fi nd(SA MP LE_UART_NAME);打开串口设备通过设备句柄,应用程序可以打开和关闭设备,打开设备时,会检测设备 是否已经初始化,没有初始化则会默认调用初始化接口初始化设备。
第6期2020年12月机电元件ELECTROMECHANICALCOMPONENTSVol 40No 6Dec 2020收稿日期:2020-10-20基于STM32单片机的uC/OS-II操作系统移植张中前(贵州航天电器股份有限公司,贵州贵阳,550009) 摘要:网络技术和信息技术的发展,嵌入式系统应用越来越普及,嵌入式设备的应用也越来越多。
uC/OS-II广泛应用于路由器、飞行器及工业控制等。
uC/OS-II操作系统执行效率高,占用存储空间少,具有实时性及可扩展性等优点,在小型嵌入式设备中具有广泛应用。
本文介绍了基于ARMCORTEXM3系列单片机上的uC/OS-II移植,对电子控制组件的设计具有参考作用。
关键词:实时操作系统;uC/OS-II;内存管理;任务管理;STM32;移植Doi:10.3969/j.issn.1000-6133.2020.06.015中图分类号:TN784 文献标识码:A 文章编号:1000-6133(2020)06-0057-051 引言操作系统是裸机的第一层软件,操作系统直接运行在硬件上,上层软件通过提供应用程序接口(API函数),实现对底层硬件的访问,同时,通过操作系统实现对多个上层应用软件(任务)管理,实现对硬件CPU管理、存储管理、I/O接口管理及文件管理,如图1所示。
图1 操作系统功能组成示意图 STM32系列单片机以其优良的价格,大容量的FLASH及RAM存储空间,极易用于较为复杂的控制系统;在STM32单片机上进行uC/OS-II实时操作系统的移植,提高了产品的设计灵活性,实现较为复杂的系统功能;通过将开源的uC/OS-II移植在STM32单片机上,以其较为低廉的硬件成本获得较高的使用性能,具有良好的应用前景。
2 uC/OS-II操作系统2.1 uC/OS-II操作系统的基本特征uC/OS-II是一个完整的、可移植、可固化、可剪裁的基于优先级调度的抢占式实时多任务操作系统;它能够在外界事件或数据产生时,能够接收图2 uC/OS-II文件结构示意图并以足够快的速度响应,其处理的结果又能够在规定的时间内输出,并控制所有实时任务协调、一致运行。
RT-Thread 应用篇—在STM32L051上使用 RT-Thread (四、无线温湿度传感器之串口通讯)•前言•一、设计思路说明•二、驱动移植•三、信号量的处理▪ 3.1 释放信号量▪ 3.2 获取信号量•四、基本测试▪ 4.1 接收测试▪ 4.2 串口通讯细节问题▪ 4.3 发送测试•五、时刻关注占RAM大小•结语前言在上一篇文章,我们实现了温湿度驱动移植,根据我们最初的基本设计思路,还有必须要实现的无线模块串口通讯,本文就来移植一下无线模块的串口通讯驱动。
再次说明一下,本应用篇重点在于理解在 RT-Thread 上的设计思路以及在小内存芯片上的注意事项,所以基础的驱动代码的实现并不会详细的分析说明,但是博主在把本系列更新完以后会把最后的整个项目上传,所以实在想看驱动实现的朋友到时候也可以去下载。
在STM32L051C8 上使用 RT-Thread 应用篇系列博文连接:RT-Thread 应用篇—在STM32L051上使用 RT-Thread (一、无线温湿度传感器之新建项目)RT-Thread 应用篇—在STM32L051上使用 RT-Thread (二、无线温湿度传感器之 CubeMX配置)RT-Thread 应用篇—在STM32L051上使用 RT-Thread (三、无线温湿度传感器之 I2C通讯)一、设计思路说明我们STM32L051C8与无线模块通讯的串口是LPUART1(对应pin to pin 的STM32F103C8 是串口3),使用的是中断方式接收,所以当时在CubeMX 设置的时候我们就需要使能中断。
STM32串口中断接收是很基础问题,本文的目的不在于说明STM32如何进行串口通讯,所以并不会详细阐述如何使用串口接收,我们只做简单说明:对于STM32 的串口接收中断,我们一般会使能UART_IT_RXNE或者UART_IT_IDLE。
简单说明一下,如果串口收到一个字节就会产生RXNE中断,如果接收完成一帧数据,就会产生IDLE中断。
RT—Thread操作系统在STM32中移植的研究作者:朱志国来源:《计算机光盘软件与应用》2012年第22期摘要:介绍了RT-Thread操作系统在STM32F107VC上的移植,简要说明了具体的移植过程和使用的方法,并分析了RT-Thread操作系统内核代码的各个功能,给出了移植环境的如何搭建,及编写应用程序如何修改代码的方法。
最后通过一个实例成功实现RT-Thread在STM32F107VC上的移植,证明了移植是可行的。
关键词:RT-Thread;STM32;嵌入式操作系统;Keil中图分类号:TP311.52 文献标识码:A 文章编号:1007-9599 (2012) 22-0000-02RT-Thread属于第二代微内核操作系统,最突出的优势就是其支持处理器平台广泛,最低要求8k ROM,4k RAM空间就可以了。
STM32是基于Cortex-M3内核的处理器,也是一款性能优越的32位单片机,在工业控制方面的应用大有取代传统16位单片机之势。
1 RT-Thread操作系统介绍RT-Thread主要优点是:实时、小型、可裁剪。
它不仅仅是一个实时内核,也是一个功能丰富的软件平台,可以搭建POSIX环境,运行独立的应用程序,这是传统的实时操作系统所不具备的。
RT-Thread具有32~256可选优先级抢占式调度,线程度不限,相同优先级线程时间片轮转调度,支持动态创建、销毁线程,任务等待可按优先级进行排队。
RT-Thread内核大致可分为对象管理、实时调度器、线程管理、线程间通信、时钟管理、设备驱动6个部分。
(1)对象管理(object.c):定义了对象容器的种类,包括线程、信号量、互斥量、事件、邮箱、消息队列、内存池、设备、定时器、组件。
此部分主要完成各模块的创建,系统对象的初始化。
(2)实时调度器(schedule.c):定义了优先级。
该部分完成优先级的创建及调度算法的定义,对线程的初始化、创建、插入、移动进行了描述。
RT-Thread 应用篇—在STM32L051上使用 RT-Thread (一、无线温湿度传感器之新建项目)•前言•一、使用 RT-Thread Studio 新建项目•二、初始项目代码分析▪ 2.1 内存堆▪ 2.2 main 线程初始化▪ 2.3 软件定时器▪ 2.4 rtconfig.h•三、初始项目占RAM大小•四、时刻保持查看测试结果•结语前言RT-Thread 专栏更新到今天,已经把内核基础全部讲完,还没有一个使用 RT-Thread Studio 完整的项目实例,我在第一篇文章中介绍版本的时候就说过,在一般普通的应用项目上,Nano估计用起来还更多,内存就是成本!既然我们把 RT-Thread Nano 内容大都过了一遍,那就来使用它实现一个传感器小项目。
看过我博文的朋友都知道为什么我会使用 STM32L051,我在前面文章已经提到过原因,满足应用要求,替换成本低。
本文完全从 0 开始新建工程,工程代码分析,修改,移植,测试,步步为营,最终完成一个完整的应用。
一、使用 RT-Thread Studio 新建项目首先,我们还是使用 RT-Thread Studio 新建工程,我们选择 Nano 项目,如下图:然后进入项目创建页面,项目基于芯片,然后在系列中选择 STM32L0 系列,如果没有需要添加,如下图:在这里插入图片描述在上面图点击添加更多,然后在 SDK 管理器中,安装 STM32L0 的资源包,选中,点击安装即可,如下图:完成上述步骤,再回过头来重新新建项目,整个选项如下图所示:新建完成工程以后,会直接在资源管理器出现,以前的项目不会被关闭:二、初始项目代码分析最初我们学习使用的开发板是自己画的 STM32F103VGT6,有着 96KB 的 RAM,已经是很大的内存了,而目前博主实际项目上很多产品使用的是 STM32L051C8 只有 8KB 的RAM,在使用 FreeRTOS 的时候我遇到的一个大问题就是 RAM 空间不足的问题。
FreeRTOS移植到STM32F103步骤与注意事项转载2017年05月29日 11:16:361496原文地址:前言:由于之前听过太多人抱怨移植FreeRTOS到STM32有各种各样的问题,小灯经过一年多对FreeRTOS的研究并在公司产品中应用,多少有些心得,接下来就由小灯以最新版的FreeRTOS为例一步一步移植到STM32F103上,并提醒大家某些需要注意的事项。
本文档为非正式技术文档,故排版会有些凌乱,希望大家能提供宝贵意见以供小灯参考改进。
下面先以IAR移植为例,说明移植过程中的诸多注意事项,最后再以MDK移植时不再重复说明,所以还是建议大家先花些时间看IAR的移植过程,哪怕你不使用IAR,最好也注意下那一大堆注意事项!一、从官网下载最新版的FreeRTOS源码下面的网址是官方最新源码的下载地址:projects/freertos/files/latest/downloadsource=files目前官方提供的最新版本是, FreeRTOS源码在解压目录下的路径为FreeRTOS组织为了抢用户也是拼了命的,不信你打开Demo文件夹看看,里面提供了FreeRTOS在各种单片机上已经移植好的工程,如果建工程时遇到什么问题,可以参考下这些Demo。
不过小灯现在着重于自己动手移植FreeRTOS,考虑到原子哥@正点原子的用户比较多,绝大多数习惯了使用MDK来开发STM32,因此小灯分别以IAR和MDK两种使用比较广泛的开发环境来移植FreeRTOS。
说到IAR和MDK,不得不提的是小灯自从用了IAR之后就果断放弃了MDK,相信很多人有这个经历,哈哈!在开始移植FreeRTOS之前,先介绍下FreeRTOS的源码:FreeRTOS的源码比较少,源文件也远没有UCOS多,不过麻雀虽小五脏俱全,FreeRTOS 的短小精悍也是最令小灯着迷的,虽然缺少了很多组成部分,例如GUI、网络协议栈、文件系统等,不过这些统统都不是问题,因为完全可以移植第三方的组件!一不小心牛逼又吹大了,哈哈!回归正题,FreeRTOS的源码核心部分是和,其余的几个文件功能都是可选的,例如软件定时器、队列、协程等等,小灯就不介绍了,有兴趣的话可以到官网上看介绍。
实时操作系统R T T h r e a d在C K520上的移植邹子鱼,毛新农(中国电子科技集团公司第三十研究所,成都610041)摘要:基于实时操作系统R T T h r e a d和嵌入式处理器C K520,建立了一套完全国产化的嵌入式控制系统㊂首先介绍了整个系统的构成,然后阐述了将R T T h r e a d移植到C K520处理器上的过程,并重点总结了C P U架构移植的方法,最后编写了多线程应用程序对系统进行测试,系统能够稳定可靠地运行㊂该测试结果验证了移植的可行性㊂关键词:R T T h r e a d;C K520;实时操作系统中图分类号:T P316.2文献标识码:AP o r t R e a l-t i m e O p e r a t i n g S y s t e m R T-T h r e a d t o C K520Z o u Z i y u,M a o X i n n o n g(N o.30I n s t i t u t e o f C E T C,C h e n g d u610041,C h i n a)A b s t r a c t:A c o m p l e t e l y h o m e m a d e e m b e d d e d r e a l-t i m e c o n t r o l s y s t e m i s e s t a b l i s h e d i n t h e p a p e r,w h i c h i s b a s e d o n r e a l-t i m e o p e r a t i o n s y s t e m R T-T h r e a d a n d e m b e d d e d p r o c e s s o r C K520.I n t h e p a p e r,t h e s y s t e m c o n s t i t u t i o n a n d t h e p r o c e s s o f p o r t i n g R T-T h r e a d t o C K520p r o c e s s o r a r e i n t r o d u c e d,a n d p u t s e m p h a s i s o n s u mm a r i z i n g t h e m e t h o d o f p o r t i n g C P U a r c h i t e c t u r e.F i n a l l y,a m u l t i t h r e a d i n g a p p l i c a t i o n h a s b e e n w r i t t e n t o t e s t t h e s y s t e m,a n d t h e s y s t e m c a n w o r k s t a b l y a n d r e l i a b l y.T h e t e s t r e s u l t v e r i f i e s t h e f e a s i b i l i t y o f p o r t i n g. K e y w o r d s:R T-T h r e a d;C K520;r e a l-t i m e o p e r a t i n g s y s t e m引言随着物联网产业的迅速发展,人们在处理精度㊁处理速度㊁实时性等方面对嵌入式系统提出了更高的要求,使得嵌入式系统主要朝着实时操作系统(R e a l T i m e O p e r a t-i n g S y s t e m,R T O S)的方向发展㊂R T T h r e a d作为一款完全由国内团队开发维护的开源R T O S,经过十多年的发展,正逐步变成一个组件丰富㊁功能强大的嵌入式实时操作系统㊂目前,国内在嵌入式领域的开发研究多是基于A R M 等国外芯片,操作系统也多选择L i n u x㊁F r e e R T O S㊁μC/ O S I I等国外操作系统,将国产C P U与国产操作系统相结合的研究相对较少㊂随着 棱镜门 等事件的曝光,关键领域使用的嵌入式系统的安全问题已引起国内用户的重视㊂在关键领域避开国外产品,发展自主可控㊁安全可靠的嵌入式实时控制系统显得尤为重要[1]㊂本文选用的C K520属于C S K Y系列嵌入式处理器(下称C K C P U),该系列处理器是由杭州中天微系统有限公司(下称中天微)研制完成,并具有自主知识产权的国产嵌入式处理器㊂本文将C K520与R T T h r e a d相结合,旨在建立一套完全国产化的嵌入式实时控制系统,并更好地支持国产嵌入式C P U的发展,带动C S K Y体系下生态环境的建立㊂1系统构成本文构建的嵌入式实时控制系统主要由R T T h r e a d操作系统和搭载C K520处理器的硬件平台构成㊂1.1R T T h r e a d操作系统R T T h r e a d遵循G P L V2+和A p a c h e L i c e n s e2.0开源许可协议,用户可以将系统免费用于商业产品中,且不需要公开私有代码㊂相较于国外一些常见的R T O S(如V x W o r k s㊁F r e e R T O S㊁μC/O S I I),R T T h r e a d在内存管理㊁系统框架和使用成本等方面具有明显的优势和特点[2]㊂R T T h r e a d不仅具有一个实时内核,还具备丰富的中间层组件,如图1所示㊂其中,内核层是R T T h r e a d 的核心部分,主要包括内核系统中对象的实现,例如线程管理㊁时钟管理㊁内存管理㊁线程间通信等,以及l i b c p u/ B S P(芯片移植有关文件/板级支持包);组件与服务层包括基于R T T h r e a d内核之上的上层软件,例如F i n S H命令行界面㊁虚拟文件系统㊁设备框架㊁网络框架等;R T T h r e a d软件包是运行于R T T h r e a d物联网操作系统平台上㊁针对不同应用领域的通用软件组件,由源代码㊁库文件和描述信息组成㊂图1 R T T h r e a d 软件框架图[3]1.2 C K 520处理器C K 520是面向嵌入式系统和S o C 应用领域的32位高性能低功耗嵌入式C P U 核,属于第一代C K C P U 的产品,拥有自主知识产权㊂C K 520采用16位指令系统和32位数据通路,基于先进的七级流水线结构㊁两级跳转预测和无序执行机制设计,实现了哈佛结构的片上高速暂存和高速缓存㊂C K 520设计了普通用户和超级用户两种编程模式㊂其中普通用户编程模式仅能访问通用寄存器㊁程序计数器和条件位C 三类硬件资源,而超级用户编程模式为操作系统等底层软件提供运行环境,除了访问上述三类资源外,还能访问控制寄存器,实现对C P U 状态的全面控制㊂2 R T T h r e a d 移植R T T h r e a d 的源代码可以直接在官方网站上获取,本文使用的是R T T h r e a d 4.0.0版本㊂打开R TT h r e a d 源代码文件包,可以看到按不同功能用途分类的文件夹:①b s p :板级支持包(B o a r d S u p p o r t P a c k a ge ,简称B S P),包含支持不同型号的芯片及其配套的外设驱动㊂②c o m po n e n t s :系统组件,主要是各类设备的驱动模型,可以根据需求进行裁剪㊂③d o c u m e n t a t i o n:系统的说明文档㊂④e x a m p l e s :官方提供的应用例程,主要用于测试组件功能㊂⑤i n c l u d e :系统所需的头文件㊂⑥l i b c pu :包含不同C P U 的内核代码,主要采用汇编语言编写㊂⑦s r c :R T T h r e a d 的内核层代码㊂⑧t o o l s :S c o n s 构建环境的脚本文件㊂R T T h r e a d 的移植包括C P U 架构移植和B S P 移植两部分,涉及到l i b c p u 和b s p 两个文件夹,除此之外其他文件夹里的文件不应被改动㊂官方提供的源码包里已经支持多种芯片,如果包里没有想要移植的芯片,用户可以选择与目标芯片同一系列的芯片作为移植基础[4]㊂2.1 工程建立本文所使用的开发环境为中天微提供的C S k y D e v e l o pm e n t S u i t (简称C D S )㊂C D S 是一个基于E c l i ps e ㊁用于C K C P U 架构交叉开发的可视化集成软件开发环境㊂在C D S 环境下,软件开发用户可以方便地进行项目工程管理㊁编写代码㊁设置编译链接参数㊁编译链接目标程序等操作,并且能够通过I C E 在目标板上进行C /C ++语言级调试㊂[5]打开C D S 建立新的工程,命名为 r t t h r e a d ,并将源码包中的相关文件复制到项目工程中,并在r t t h r e a d \l i b c p u \c s k y 以及r t t h r e a d \b s p 目录下创建名为ck 520的文件夹,同时创建相应的代码文件,得到如图2所示的工程目录,其中a r c h 文件夹中存放板卡启动代码和中断处理代码㊂图2 工程目录结构2.2 C P U 架构移植为了适配不同的C P U架构,R T T h r e a d 提供了一个l i b c p u 抽象层㊂该层向上为系统内核提供了统一的接口,包括全局中断的开关㊁上下文的切换以及线程栈的初始化等;向下为处理器提供了一套统一的C P U 架构移植接口,这部分接口包括全局中断开关函数㊁线程上下文切换函数㊁中断函数等内容㊂实现C P U 架构移植主要就是完成上述内容的移植㊂2.2.1 线程栈初始化函数实现在C K 520上进行系统移植时,主要关注以下寄存器:16个32位通用寄存器(R 0~R 15)㊁处理器状态寄存器(P S R )㊁程序计数器(P C )㊁异常保留处理器状态寄存器(E P S R )㊁异常保留程序计数寄存器(E P C )㊁快速中断保留处理器状态寄存器(F P S R )和快速中断保留程序计数寄存器(F P C )[6]㊂本文使用的编程模型如表1所列㊂表1 C K 520的编程模型图3 线程栈线程栈初始化函数位于r t t h r e a d \l i b c p u \c s k y\c k 520目录下的s t a c k _c k 520.c 文件中,函数名为r t _h w _s t a c k _i n i t ()㊂内核在线程创建和线程初始化时会调用该函数,为线程手动构造一个上下文内容,作为线程首次运行的初始值㊂本文构建的线程栈如图3所示㊂2.2.2 全局中断开关函数实现C K 520的中断控制需要对处理器状态寄存器P S R 中的中断有效控制位I E 进行操作㊂当I E 为0时,中断无效,即实现了关中断;当I E 为1时,中断有效,即实现了开中断㊂该部分代码位于r t t h r e a d \l i b c p u \c s k y \c k 520目录下的c o n t e x _c k 520_g c c .S 文件中,采用汇编语言编写,对应的函数为r t _h w _i n t e r r u pt _d i s a b l e 和r t _h w _i n t e r -r u pt _e n a b l e ,具体代码如下: r t _h w _i n t e r r u p t _d i s a b l e : m f c r r 2,ps r p s r c l r i er t sr t _h w _i n t e r r u p t _e n a b l e : m t c r r 2,ps r r t s2.2.3 上下文切换函数实现上下文切换函数主要用于发生线程调度时,保存来源线程的上下文,并切换至目标线程的上下文,完成线程运行环境的切换,其代码同样位于c o n t e x _c k 520_g c c .S 文件中,采用汇编语言编写,主要包括无来源线程的上下文切换函数㊁线程环境下的上下文切换函数和中断环境下的上下文切换函数㊂(1)无来源线程的上下文切换对应的函数名为r t _h w _c o n t e x t _s wi t c h _t o,该函数只涉及目标线程,实现切换到指定线程的功能,在调度器启动第一个线程的时候调用,完成首次上下文切换㊂其主要实现过程如图4所示㊂(2)线程环境下的上下文切换对应的函数名为r t _h w _c o n t e x t _s w i t c h,用于线程环境下从当前线程切换到目标线程,包含两个参数线程f r o m 和线程t o,其实现过程如图5所示㊂需要注意的是,保存f r o m 线程的上下文时,R 15作为线程退出点,需要保存在线程栈中的t e n t r y 处,目的是在切回f r o m 线程时能够从上次退出的位置继续执行f r o m 线程的任务㊂图4 r t _h w _c o n t e x t _s w i t c h _t o实现过程图5 r t _h w _c o n t e x t _s w i t c h实现过程(3)中断环境下的上下文切换对应的函数名为r t _h w _c o n t e x t _s w i t c h _i n t e r r u pt ,用于中断环境下实现当前线程到目标线程的切换,其实现过程如图6所示㊂与线程环境下的上下文切换不同的是,中断环境下的上下文切换实际是在中断处理函数中完成的㊂2.2.4 中断处理函数实现中断处理函数位于r t t h r e a d \a r c h 目录下的e n t r y.S 文件中,采用汇编语言编写,主要包括了普通中断处理函数㊁快速中断处理函数,在触发相应中断异常时会调用,对应的函数名依次为h w _v s r _a u t o v e c 和h w _v s r _f a s t a u -t o v e c ㊂中断环境下的上下文切换调用的是普通中断处理图6r t_h w_c o n t e x t_s w i t c h_i n t e r r u p t实现过程函数,其主要实现过程如图7所示㊂2.3B S P移植如果希望在一个板卡上运行R T T h r e a d 系统,除了完成相应的芯片架构的移植外,还需要针对板卡的移植,即实现板级支持包的移植㊂B S P移植的主要目的是建立能让操作系统运行的基本环境,需要完成的主要工作有:图7普通中断处理函数实现过程①初始化C P U的内部寄存器㊁C a c h e等内容,设定R AM工作时序㊂②实现时钟驱动㊂③实现中断控制器的驱动,完善中断管理㊂④实现串口等I/O设备的驱动㊂⑤初始化动态内存堆,实现动态堆内存管理㊂3移植结果及测试上述移植工作完成之后,使用r t_t h r e a d_c r e a t e函数编写两个测试线程,命名为l e d500m s 和 l e d200m s ,其功能是让板卡上的测试灯分别以500m s和200m s的间隔闪烁㊂编写完成之后使用C D S对整个工程进行编译,生成二进制文件r t t h r e a d.e l f㊂将板卡上的串口与P C相连,并挂载仿真器,使用C D S进行调试㊂通过上位机的串口通信工具和R T T h r e a d提供的s h e l l组件进行交互操作,可以观察到串口工具上已成功打印出系统l o g o及初始化信息,表明系统已成功运行㊂调用相应指令运行上述测试线程可以观察到测试灯按照指定频率交替闪烁㊂具体过程如图8所示㊂该结果表明R T T h r e a d已能在C K520处理器上稳定运行㊂图8R T T h r e a d的S h e l l交互界面结语本文在C K520处理器上移植了R T T h r e a d操作系统,并介绍了移植的过程㊂经过测试,R T T h r e a d系统能够在C K520处理器上稳定可靠地运行㊂通过本文的研究,为国产操作系统R T T h r e a d和国产C P U的发展贡献了一份力量,为关键领域的嵌入式系统应用提供了一个可行的方案,并为系统后期配套的功能开发奠定了基础㊂参考文献[1]吕华溢,谢政.一种软硬件自主可控的嵌入式实时控制系统[J].单片机与嵌入式系统应用,2017(3):2731. [2]涂撰,赵标.R T T h r e a d在L P C2378上的移植与应用[J].上海船舶运输科学研究所学报,2013,36(1):4449.[3]R T T h r e a d编程指南,2019.[4]褚越强,梁宇,张长生.基于匿名领航者飞控的R T T h r e a d 操作系统的移植[J].北华航天工业学院学报,2017,37(5): 1417.[5]张锋,刘光耀,王剑非.基于C K C o r e的安全芯片B o o t l o a d e r 开发与应用[J].现代电子技术,2013,36(22):137142. [6]毛新农,史建,王才能.C K520处理器的μC/O S I I移植与中断嵌套优化[J].单片机与嵌入式系统应用,2019(6): 3740.邹子鱼(研究生),主要研究方向为嵌入式系统开发与应用;毛新农(工程师),主要研究方向为移动通信㊁信息安全㊁嵌入式系统㊂(责任编辑:薛士然收稿日期:2019-07-05)。
第一章 RT-THREAD 简介RT-Thread 是一款来自中国的开放源代码实时操作系统,并且是一款商业许可证非常宽松的实时操作系统。
下图是RT-Thread 及外围组件的基本框架图:RT-Thread Kernel 内核部分包括了RT-Thread 的核心代码,包括对象管理器,线程管理及调度,线程间通信等的微小内核实现(最小能够到达 2.5k ROM ,1k RAM 体积占用)。
内核库是为了保证内核能够独立运作的一套小型类似C 库实现(这部分根据编译器自带C 库的情况会有些不同,使用GCC 编译器时,携带更多的标准C 库实现)。
CPU 及板级支持包包含了RT-Thread 支持的各个平台移植代码,通常会包含两个汇编文件,一个是系统启动初始化文件,一个是线程进行上下文切换的文件,其他的都是C 源文件。
1.1 实时内核1.1.1 任务/线程调度在RT-Thread 中线程是最小的调度单位,线程调度算法是基于优先级的全抢占式多线程调度算法,支持256个线程优先级(也能通过配置文件更改为最大支持32个或8个线程优先级,针对STM32通常配置是32个线程优先级),0优先级代表最高优先级,255优先级留给空闲线程使用;支持创建相同优先级线程,相同优先级的线程采用可设置时间片的轮转调度算法;调度器寻找下一个最高优先级就绪线程的时间是恒定的(时间复杂度是1,即O(1))。
系统不限制线程数量的多少,只和硬件平台的具体内存相关。
1.1.2 任务同步机制Hardware 硬件, CPU/SRAM/Flash/UART/EMAC etcKernel Library内核: kservice.c RT-Thread Kernel 实时内核: src Object Management 对象管理: object.c Real time Scheduler 实时调度器: schedule.c Thread Management 线程管理: thread.cInternal Thread Communication 线程间通信: ipc.cClock Management 时钟管理: clock.c timer.cDevice Driver IO 设备驱动: device.cCPU Architecture 芯片移植: libcpuBoard Support Package 板级支持包: bspFinSH Shell RT-Device FilesystemRT-虚拟文件系统 LwIP轻型TCP/IP 协议栈 RT-Thread/GUI 图形用户界面系统支持信号量、互斥锁作为线程间同步机制。
RT-Thread 应用篇—在STM32L051上使用 RT-Thread (五、无线温湿度传感器之完结篇)•前言•一、按键操作▪ 1.1 按键驱动移植▪ 1.2 按键测试•二、定时器操作▪ 2.1 定时器逻辑添加▪ 2.2 定时器测试•三、时刻关注占RAM大小•最后大小说明•结语前言在完成基本的传感器采集,串口通讯移植修改后,其实作为一个单品传感器已经是正常的工作起来了,但是如果我们在使用产品的时候有特殊情况,比如需要发送特定的无线报文,或者设置不同的工作模式之类的操作,我们就可以通过按键操作进行一定的配置。
所以本文会移植一个按键驱动,能够支持按键短按,固定时间的长按等操作,同时周期执行的程序改成使用定时器来控制。
本文是《RT-Thread 应用篇—在STM32L051上使用RT-Thread》完结篇一个简单的应用:无线温湿度传感器一个小内存的芯片:STM32L051C8T6一个小而美丽的物联网操作系统:RT-Thread在STM32L051C8 上使用 RT-Thread 应用篇系列博文连接:RT-Thread 应用篇—在STM32L051上使用 RT-Thread (一、无线温湿度传感器之新建项目)RT-Thread 应用篇—在STM32L051上使用 RT-Thread (二、无线温湿度传感器之 CubeMX配置)RT-Thread 应用篇—在STM32L051上使用 RT-Thread (三、无线温湿度传感器之 I2C通讯)RT-Thread 应用篇—在STM32L051上使用 RT-Thread (四、无线温湿度传感器之串口通讯)一、按键操作在初步的测试框架中,我当时使用的是简单的按键处理方式,这里也上一下源码做测试备份:static void key_thread_entry(void *par){while(1){if(key1_read == 0){rt_thread_mdelay(10); //去抖动if(key1_read == 0){//按键按下,do somethingwhile(key1_read == 0){rt_thread_mdelay(10);}}}if(key2_read == 0){rt_thread_mdelay(10); //去抖动if(key2_read == 0){//按键按下,do somethingwhile(key2_read == 0){rt_thread_mdelay(10);}}}rt_thread_mdelay(1);}}但是在实际中,如果要实现长按,组合按之类的方式,还是需要一个适用的按键驱动。
FreeRTOS在STM32F103VCT6上的移植与应用张春红;王永法【期刊名称】《工业控制计算机》【年(卷),期】2014(000)012【摘要】以STM32F103VCT6及相关外围电路为基础搭建硬件平台,详细、系统地分析了FreeRTOS的体系结构,主要介绍了移植的工作,并以远程抄表系统的设计为对象,阐述了此系统中的功能与多任务的关系,证实了FreeRTOS移植的实行性,开源性,有效性,易用性。
%Based on the STM32F103VCT6 and related peripheral circuits set up a hardware platform,detailed and systematic anal-ysis of the architecture of the FreeRTOS,this paper introduces the work of transplantation and targeted at the remote meter reading system design,spel ed out in this system's functional relationship between multi-tasking and confirms the FreeRTOS transplant of sexual,open source,availability,and ease of use.【总页数】3页(P22-24)【作者】张春红;王永法【作者单位】黑龙江科技大学信息网络中心,黑龙江哈尔滨 150022;哈尔滨汇鑫科技有限公司,黑龙江哈尔滨 150000【正文语种】中文【相关文献】1.FATFS在嵌入式操作系统FreeRTOS中的移植与应用 [J], 高兆强;王绍举;徐伟;代书博;李治根2.带内存保护的FreeRTOS在TMS570上的移植 [J], 胡丽辉;张建泉;李楠;席隆3.SDCC编译器和FreeRTOS 在C8051F上的开发应用 [J], 王晓;黄鹤松;薛琳4.FreeRTOS在Coldfire上的实现和应用 [J], 王慧明;王宜怀;严健5.RISC-V MCU的FreeRTOS移植与应用开发 [J], 付元斌;张爱华;何小庆因版权原因,仅展示原文概要,查看原文内容请购买。