【精品】单片机实时操作系统RT-THREAD及在在STM32移植华工名师详细课件
8.1.2 常用嵌入式操作系统简介
❖ 按照操作系统是否设置了实时响应的机制,可分为 实时操作系统和非实时操作系统。
❖ 按照操作系统的发布方式,嵌入式操作系统可分为 开源和非开源方式。
❖ 大多数嵌入式操作系统对于研究和教学目的的应用 是免费的,而对于商业产品开发,则有免费和需要 购买许可证之分。
❖ 常用的有:
❖ 可靠性:很多情况下,嵌入式系统无人操作,自 动运行。只有高可靠性才能满足需求。
❖ 可裁剪性:嵌入式实时操作系统可能的应用场合 差异很大,所以一个嵌入式操作系统必须能够灵 活配置,根据实际需求进行裁剪,去除冗余,达 到满足要求的最简配置。
3. 嵌入式实时操作系统的特点
❖ 设备编程的灵活性:嵌入式系统通常是为 一个受限制的、定义明确的功能而设计。 没有经过测试的程序很少加到软件中。软 件经配置和测试之后,就应该视为可靠的 [1]。所以用户程序可以直接操作I/O设备 、使用中断程序和自行管理外部设备。
8.1 实时操作系统概述 8.2 RT-THREAD实时操作系统简介 8.3 RT-THREAD实时操作系统的移植
教学目的和要求
❖ 掌握实时操作系统的基本概念; ❖ 了解在RT-Thread操作系统上的编程
方法; ❖ 了解RT-Thread操作系统在不同硬件
平台上的移植步骤。
8.1 实时操作系统概述
❖ Components组件层,核心之上的外围组件 ,包括文件系统,命令行shell,lwIP轻型 TCP/IP协议栈,GUI图形用户界面等。用户 可以根据实际需求选择使用。
入式系统相关的各个组件:实时操作系统内 核,TCP/IP协议栈、文件系统、libc接口、 图形界面等。
❖ Porting底层移植、驱动层,与硬件相关的放 在这一层,如果变更了所使用的单片机和电路 板,需要修改相关代码。
❖ Kernel硬实时内核,是抽象出来,与具体硬 件无关的核心部分,负责多线程及其调度,信 号量,邮箱,消息队列,内存管理,定时器等 功能。
➢ I/O设备管理:一般的计算机系统都配有各 种类型的外部设备,操作系统可以提供相应 的驱动程序,方便用户使用外部设备。
➢ 文件系统管理:当数据量很大或者程序本身 体积很大的时候,就需要以文件的形式存储 在外存上(如FLASH、SD卡、硬盘等)。
2. 实时操作系统
❖ 嵌入式系统与通用的计算机系统不同,是为了完 成某特定功能而设计的,往往需要快速响应外部 事件,如汽车中的防抱死系统。
VxWorks
Embedded Linux
Windows Embedded
VxWorks系统
❖VxWorks 是 风 河 公 司 (WindRiver) 开 发 的一款商用实时操作系统。
❖VxWorks因其良好的可靠性和卓越的实 时性,已广泛应用在通信、军事、航空、 航天等高端技术及实时要求极高的领域 中。
内 存 管 理
文 件 系 统
I/O 设 备 管 理
嵌入式操系统
硬件抽象层/板级支持包
I/O
RAM
A/D
微处理器
ROM
D/A
其他
❖ 通常操作系统提供以下一些服务功能:
➢ 任务管理:操作系统最核心的工作就是每个 用户任务的创建、执行,以及多个任务的调 度工作。
➢ 内存管理:内存是任务生存的空间,为用户 任务分配、管理、释放内存是操作系统的重 要工作。
VxWorks组成
VxWorks组成
• 微内核 • I/O系统 • 文件系统 • 完全的TCP/IP协议栈(基于BSD4.4) • 板极支持包(Board Support Packag
e, BSP) • 目标代理(Target Agent)
VxWorks系统开发环境
Embedded Linux
❖操作系统是一种系统软件,是控制应 用程序执行的程序,并充当应用程序 和计算机硬件之间的接口。
❖嵌入式系统是面向特定应用的计算机 系统,其数量远远超过通用的计算机 系统,应用范围非常广泛。
8.1.1 嵌入式实时操作系统的概念 1. 操作系统的功能
❖ 操作系统处于应用程序和计算机硬件之间
应用程序
任 务 管 理
❖相比于ucos,它功能更强大而且是免费的; 相比于ecos,它可以支持linux的GCC编译 和windows的IDE环境而且也相对要简单, 利于我们学习。除了以上的两点我选择它的 另一个一个重要原因是,它有2440的完善的 bsp并且自带原生的GUI。
❖RT-Thread是一款由中国开源社区主导开发 的开源嵌入式实时操作系统,它包含实时嵌
Windows CE嵌入式操作系统的界面显示大多 数在Windows里出现的标准部件,包括桌面、 任务栏、窗口、图标和控件等等。
这样只要是对PC机上的Windows比较熟悉的 用户,可以很快地使用基于Windows CE嵌入 式操作系统的嵌入式设备。
8.2 RT-THREAD实时操作系统简介
❖ 实时操作系统对处理结果的正确性和处理过程的 及时性都有严格要求。
❖ 分为硬实时和软实时两种。硬实时系统是要求处 理过程必须在规定时间内完成。软实时系统可以 允许在一定时间内得到处理结果。
3. 嵌入式实时操作系统的特点
❖ 实时性:在许多嵌入式系统应用中,对响应时间 有具体的要求,操作系统应该保证实时性需求。
❖嵌入式Linux是一种开放源代码、软实时、 多任务的嵌入式操作系统。
❖它是在标准Linux的基础上针对嵌入式系 统进行内核裁剪和优化后形成的。这使 它体积更小、性能更高。
将Linux嵌入到各种设备中
Windows Embedded家族
WinCE操作系统
Windows CE嵌入式操作系统最大的特点是能 提供与PC机类似的图形界面和主要的应用程 序。
stm32跑RT-thread之串口操作简介
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);打开串口设备通过设备句柄,应用程序可以打开和关闭设备,打开设备时,会检测设备 是否已经初始化,没有初始化则会默认调用初始化接口初始化设备。
【华工名师精品课件】单片机实时操作系统RT-THREAD及在在STM32移植22页PPT
31、园日涉以成趣,门虽设而常关。 32、鼓腹无所思。朝起暮归眠。 33、倾壶绝余沥,窥灶不见烟。
34、春秋满四泽,夏云多奇峰,秋月 扬明辉 ,冬岭 秀孤松 。 35、丈夫志四海,我愿不知老。
▪
26、要使整个人生都过得舒适、愉快,这是不可能的,因为人类必须具备一种能应付逆境的态度。——卢梭
▪
27、只有把抱怨环境的心情,化为上进的力量,才是成功的保证。——罗曼·罗兰
▪
28、知之者不如好之者,好之者不如乐之者。——孔子
ቤተ መጻሕፍቲ ባይዱ
▪
29、勇猛、大胆和坚定的决心能够抵得上武器的精良。——达·芬奇
▪
30、意志是一个强壮的盲人,倚靠在明眼的跛子肩上。——叔本华
谢谢!
22
基于STM32单片机的uCOS-II操作系统移植
第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文件结构示意图并以足够快的速度响应,其处理的结果又能够在规定的时间内输出,并控制所有实时任务协调、一致运行。
在STM32中移植FreeRTOS(纯净版)
因为我们使用 startup 文件夹下的启动代码。 下面使用图片说明:
及 ..\FreeRTOSV7.2.0\FreeRTOS\Source\portable\MemMang 下 heap_2.c 到 自 建 的
E:\STM32\PROJ\FreeRTOS\src 下。
3、 复 制
..\FreeRTOSV7.2.0\FreeRTOS\Source\include 下 所 有 .h 文 件
a._htmresc:ST 的 LOGO,对开发无用; b.Libraries:关键文件夹,也就是 STM32 的库文件,包含外设驱动源文件和头文件; c.Project:包含外设例程和工程模板,本文不用; d.Utilities:评估版文件夹,本文不用; e.Release_Notes.html:固件库版本发布说明,不用理会; f.stm32f10x_stdperiph_lib_um.chm:类似 MSDN,开发中经常会查看,本文
跳转到 080 行,将 DCD SysTick_Handler 修改为 DCD xPortSysTickHandler 6、 在 main.c 文件头部#include 一下头文件: FreeRTOS.h、task.h、queue.h
至此,FreeRTOS 在 STM32 上的移植完毕。在 main 中创建任务后启动任务调度器就可 以运行了。
文件夹分别命名为 inc 和 src。复制 ..\FreeRTOSV7.2.0\FreeRTOS\Source 下 croutine.c、
RT-Thread 应用篇 — 在STM32L051上使用 (四、无线温湿度传感器 之 串口通讯)
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中移植的研究
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及在在STM32移植共22页PPT
植
51、山气日夕佳,飞鸟相与还。 52、木欣欣以向荣,泉涓涓而始流。
53、富贵非吾愿,帝乡不可期。 54、雄发指危冠,猛气冲长缨。 55、土地平旷,屋舍俨然,有良田美 池桑竹 之属, 阡陌交 通,鸡 犬相闻 。
Hale Waihona Puke 6、最大的骄傲于最大的自卑都表示心灵的最软弱无力。——斯宾诺莎 7、自知之明是最难得的知识。——西班牙 8、勇气通往天堂,怯懦通往地狱。——塞内加 9、有时候读书是一种巧妙地避开思考的方法。——赫尔普斯 10、阅读一切好书如同和过去最杰出的人谈话。——笛卡儿
Thank you
RT-Thread STM32 说明
; void rt_hw_interrupt_enable(rt_base_t level); ; 恢复中断 rt_hw_interrupt_enable PROC EXPORT rt_hw_interrupt_enable MSR PRIMASK, r0 ; 恢复R0寄存器的值到PRIMASK中
RT-Thread 网站:
Cortex M3 微处理器是 ARM 公司于 2004 年推出的基于 ARMv7 架构的新一代微处理器,它 的速度比目前广泛使用的 ARM7 快三分之一,功耗则低四分之三,并且能实现更小芯片面 积,利于将更多功能整合在更小的芯片尺寸中。 Cortex-M3 微处理器包含了一个 ARM core,内置了嵌套向量中断控制器、存储器保护等系 统外设。ARM core 内核基于哈佛架构,3 级流水线,指令和数据分别使用一条总线,由于 指令和数据可以从存储器中同时读取,所以 Cortex-M3 处理器对多个操作并行执行,加快 了应用程序的执行速度。
swtich_to_thread LDR r1, =rt_interrupt_to_thread LDR r1, [r1] LDR r1, [r1] ; 载入切换到线程的栈指针到R1寄存器 LDMFD MSR ORR BX ENDP r1!, {r4 - r11} psp, r1 lr, lr, #0x04 lr ; 恢复R4 – R11寄存器 ; 更新程序栈指针寄存器 ; 构造LR以返回到Thread模式 ; 从PendSV异常中返回
Handler 模式 R4 ... R11 图 D - 1 正常模式下的线程上下文切换 当要进行切换时 (假设从 Thread [from] 切换到 Thread [to]) , 通过 rt_hw_context_switch 函数触发一个 PenSV 异常。异常产生时,Cortex M3 会把 PSR,PC,LR,R0 – R3,R12 压入当前线程的栈中,然后切换到 PenSV 异常。到 PenSV 异常后,Cortex M3 工作模式 切换到 Handler 模式,由函数 rt_hw_pend_sv 进行处理。rt_hw_pend_sv 函数会载 入切换出线程和切换到线程的栈指针,如果切换出线程的栈指针是 0 那么表示这是第一次 线程上下文切换,不需要对切换出线程做压栈动作。如果切换出线程栈指针非零,则把剩余 未压栈的 R4 – R11 寄存器依次压栈;然后从切换到线程栈中恢复 R4 – R11 寄存器。当 从 PendSV 异常返回时,PSR,PC,LR,R0 – R3,R12 等寄存器由 Cortex M3 自动恢 复。 因为中断而导致的线程切换可用图 D - 2 中断中线程上下文切换表示。 R4 ... R11
RT-Thread 应用篇 — 在STM32L051上使用 (一、无线温湿度传感器 之 新建项目)
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步骤与注意事项
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的源码核心部分是和,其余的几个文件功能都是可选的,例如软件定时器、队列、协程等等,小灯就不介绍了,有兴趣的话可以到官网上看介绍。
