嵌入式实时操作系统原理与创新实践 课件 第一章-概述_第1页
嵌入式实时操作系统原理与创新实践 课件 第一章-概述_第2页
嵌入式实时操作系统原理与创新实践 课件 第一章-概述_第3页
嵌入式实时操作系统原理与创新实践 课件 第一章-概述_第4页
嵌入式实时操作系统原理与创新实践 课件 第一章-概述_第5页
已阅读5页,还剩25页未读 继续免费阅读

下载本文档

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

文档简介

嵌入式实时操作系统基础与RT-Thread入门第1章概述1、基本概念2、常见RTOS3、RT-Thread实例4、小结与思考目录CONTENTS常见RTOS实例实践总结思考基本概念嵌入式实时操作系统03基本概念面对外界事件或数据,系统必须在规定时间内完成处理并作出响应,同时协调各项实时任务运行。操作系统通用桌面系统Windows、macOS嵌入式操作系统实时操作系统本书的学习对象非实时操作系统Android、iOS等常见RTOS实例实践总结思考基本概念嵌入式设备的两类约束04基本概念资源预算面向具体场景进行紧凑设计体积和成本受到严格控制STM32片内RAM与Flash往往只有几十至几百KBRTOS必须控制自身存储占用实时性与可靠性控制系统不能容忍长时间停顿输入采样到控制输出的时间间隔必须足够短系统需要长期稳定运行程序无响应和明显卡顿应尽量避免常见RTOS实例实践总结思考基本概念嵌入式软件系统的分层05基本概念01应用程序调用驱动和操作系统API,实现具体业务功能02操作系统统一分配和调度软硬件资源03底层驱动BSP/HAL封装硬件接口与通信。更换硬件平台时,主要调整这一层常见RTOS实例实践总结思考基本概念实时操作系统的主要功能06基本概念01任务调度把应用任务组织为线程,按优先级和任务队列切换运行02线程间通信在线程之间传递信息,例如信号量和消息队列03存储管理管理内存堆与内存池,提高内存使用效率04时钟与中断管理接管系统滴答、PendSV、中断函数和中断栈等资源常见RTOS实例实践总结思考基本概念线程调度与上下文切换07基本概念线程状态挂起就绪运行在抢占式系统中,就绪线程里优先级最高者获得CPU。每个线程拥有独立线程栈,切回原线程时可以从上次停止的位置继续执行。01调度器确定目标线程02保存当前线程的运行环境和位置03从目标线程栈取出并恢复上下文04目标线程继续执行常见RTOS实例实践总结思考基本概念三种常见嵌入式实时操作系统08常见RTOSuC/OS可移植、可裁剪的抢占式实时内核面向8位、16位和32位MCU或DSP原稿所述版本最多管理64个任务任务优先级不同,不支持时间片轮转FreeRTOS轻量级,内核通常占用4KB到9KB支持任务、信号量、队列和软件定时器支持优先级调度与轮转调度具有执行跟踪与堆栈溢出检测RT-Thread国产开源实时操作系统组件丰富,架构模块化且可裁剪Nano最小内核约需1.2KBRAM、3KBFlash标准版、Nano和Smart面向不同芯片常见RTOS实例实践总结思考基本概念本书选择RT-Thread09常见RTOS开源并允许在商业产品中使用资源占用低,并针对超低功耗场景设计服务层组件和软件包生态丰富架构松耦合、模块化,便于裁剪和扩展Nano最小配置1.2KBRAM3KBFlashNano最小内核,适合资源紧张的MCU标准版具备更丰富的服务层组件Smart面向带MMU的中高端芯片,如Cortex-A常见RTOS实例实践总结思考基本概念开发平台与工具10实例实践STM32CubeMX图形化配置时钟树、芯片引脚与组件,并导出含寄存器初始化代码的HAL/LL工程。STM32从SPL转向HAL/LL;CubeMX进一步降低了配置难度。KeilMDK基于uVision的ARM处理器开发环境支持断点仿真、执行分析和性能分析提供项目例程与多种中间件软件包通过厂商支持包开发多种ARMMCU常见RTOS实例实践总结思考基本概念CubeMX移植RT-Thread的总体流程11实例实践01获取RT-Thread软件包并导入CubeMX02创建工程,选择RTOSKernel并完成关键配置03生成工程,在MDK中调整串口并编写第一个应用两个关键配置中断处理函数取消HAL生成的HardFault与PendSV,并取消SysTick处理函数,避免与RT-Thread重复定义。HAL时间基准将TimebaseSource改为SysTick之外的定时器,避免HAL_Delay()受系统滴答抢占影响。常见RTOS实例实践总结思考基本概念进入软件包管理器12实例实践图1.1进入软件包管理图1.2新建用户软件包地址从Help打开Manageembeddedsoftwarepackages,在管理窗口选择FromURL,再单击New。常见RTOS实例实践总结思考基本概念添加并启用RT-Thread软件源13实例实践图1.3输入软件包地址并检查图1.4选择新增的软件源软件包地址/download/cube/RealThread.RT-Thread.pdscCheck通过后单击OK,并在上一级窗口选中新条目。常见RTOS实例实践总结思考基本概念下载并安装所需版本14实例实践图1.5选择版本并开始安装图1.6接受许可并完成安装等待包描述文件加载完成,进入RealThread选项卡选择需要的RT-Thread版本,原稿建议3.1.5单击InstallNow,勾选许可声明后完成安装常见RTOS实例实践总结思考基本概念确认软件包安装完成15实例实践图1.7检查版本状态完成标志对应版本前的方框出现填充颜色,表示软件包安装完成。随后即可进入工程创建和组件配置。常见RTOS实例实践总结思考基本概念选择RT-Thread组件16实例实践图1.8进入组件选择图1.9选择内核组件打开SelectComponents并展开RT-Thread。RTOSKernel为必选项,初次实例暂不启用shell和device。常见RTOS实例实践总结思考基本概念使能内核并释放系统中断入口17实例实践图1.10使能RTOSKernel图1.11取消HAL生成系统处理函数关键配置在NVIC中取消Hardfaultinterrupt、Pendablerequestforservice和TimebaseSystemticktimer的GenerateIRQhandler。常见RTOS实例实践总结思考基本概念调整HAL时间基准并启用串口18实例实践图1.12将HAL时间基准移出SysTick图1.13开启所需串口选择SysTick之外的定时器,避免HAL_Delay()因系统滴答优先级和抢占而卡顿。按开发板引脚开启对应USART,为RTOS串口类型和控制台输出提供基础。常见RTOS实例实践总结思考基本概念在board.c中匹配实际串口19实例实践图1.14修改RTOS使用的串口生成工程后01打开board.c02找到RT-Thread定义的串口实例03改为CubeMX中启用的USART编号常见RTOS实例实践总结思考基本概念第一个应用在main线程中运行20实例实践图1.15LED闪烁程序main函数由系统自动创建为线程应用可以直接写在main线程中,无需手动创建该线程rt_thread_mdelay()挂起当前线程并让出CPU调度器可在延时期间运行其他就绪线程函数声明位于rtthread.h延时不再持续占用CPU。常见RTOS实例实践总结思考基本概念直接在MDK中移植RT-Thread21实例实践适用场景已有第三方工程,或项目并非由CubeMX创建时,可通过MDK软件包机制直接加入RT-Thread。完成内核与工程启动流程的衔接01通过PackInstaller下载RT-Thread02在ManageRun-TimeEnvironment中加入内核03清理冲突的中断处理函数04把HAL、SysTick和BSP初始化放入最早的板级初始化位置常见RTOS实例实践总结思考基本概念通过PackInstaller获取RT-Thread22实例实践图1.16打开PackInstaller图1.17下载所需版本操作要点单击工具栏中的PackInstaller在列表中定位RT-Thread下载工程所需的版本常见RTOS实例实践总结思考基本概念把RT-Thread内核加入工程23实例实践图1.18打开运行环境管理器图1.19选择RTOSKernel第一次配置先加入内核单击ManageRun-TimeEnvironment,在对话框中选中RT-Thread内核组件并确认。后续可按应用需要逐步加入其他组件。常见RTOS实例实践总结思考基本概念检查并处理冲突的中断函数24实例实践图1.20查找处理函数图1.20处理重复定义使用Ctrl+F的FindinFiles查找HardFault_Handler与PendSV_Handler注释非RTOS内核文件中的同名函数,或为其添加__weak修饰符同样检查SysTick_Handler,确保由RTOS内核接管常见RTOS实例实践总结思考基本概念把系统初始化放入板级启动位置25实例实践图1.21修改初始化函数最早初始化区域放入HAL库初始化按RT_TICK_PER_SECOND配置SysTick需要时加入BSP初始化完成后,RT-Thread内核即可衔接原工程的启动过程。常见RTOS实例实践总结思考基本概念RT-Thread程序启动流程26实例实践图1.22程序启动流程关键问题初始化为什么能够不写在main()中?MDK先进入$Sub$$main()扩展入口,完成RT-Thread启动与板级初始化。随后通过$Super$$main()回到原main()。常见RTOS实例实践总结思考基本概念main线程的创建与入口27实例实践图1.23main扩展程序的位置和内容图1.24main线程入口函数rtthread_startup()调用rt_hw_board_init()完成系统初始化。rt_application_init()创建并初始化main线程。main_thread_entry()最终进入用户main()。常见RTOS实例实践总结思考基本概念rt_kprintf()与自定义串口28实例实践RT-Thread使用rt_kprintf()发送控制台信息。未启用设备框架时,可在rt_hw_console_output()中调用开发板串口发送函数。#defineRT_USING_CONSOLEstaticintuart_init(void){return0;}INIT_BOARD_EXPORT(uart_init);voidrt_hw_console_output(constchar*str){printf(str);}01打开RT_USING_CONSOLE02在board.c中找到uart_init()与rt

温馨提示

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

评论

0/150

提交评论