UCOS系统总运行原理

2024-03-31 06:38
文章标签 系统 运行 原理 ucos

本文主要是介绍UCOS系统总运行原理,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

系统总运行原理

在步进调试时发现,实际上使用OSTaskCreate()在ucos中构建应用的过程,实际上只是创建堆栈,设定应用行为,引导应用函数指针等的数据操作,OSInit()中的设定也是类似,实际都是数据填充,在调试过程中,发现main()中的最后运行函数是

;/**************************************************************************************
;* 函数名称: OSStartHighRdy
;*
;* 功能描述: 使用调度器运行第一个任务
;* 
;* 参    数: None
;*
;* 返 回 值: None
;**************************************************************************************/  OSStartHighRdyLDR     R0, =NVIC_SYSPRI4                                  ; Set the PendSV exception priorityLDR     R1, =NVIC_PENDSV_PRISTRB    R1, [R0]MOVS    R0, #0                                              ; Set the PSP to 0 for initial context switch callMSR     PSP, R0LDR     R0, =OS_CPU_ExceptStkBase                           ; Initialize the MSP to the OS_CPU_ExceptStkBaseLDR     R1, [R0]MSR     MSP, R1    LDR     R0, =NVIC_INT_CTRL                                  ; Trigger the PendSV exception (causes context switch),引发一次任务切换,pensv中断服务程序中跳转任务所需要的参数在运行OSStartHighRdy前就已经设定好LDR     R1, =NVIC_PENDSVSETSTR     R1, [R0]CPSIE   I                                                   ; Enable interrupts at processor levelOSStartHangB       OSStartHang                                         ; Should never get here

OSStart(&err)中调用了OSStartHighRdy(),该函数触发了一次系统任务调度,也就是会转到一个当前最高优先级的任务中(以干预处理器寄存器的方式)参考,理论上应该就是优先级为0的OS_IntQTask(),该任务用于处理来自isr的post请求
在这里插入图片描述
,使用OS_IntQTask,表明使用Deferred Post Method的方式进行ISR的POST处理在这里插入图片描述
,实际上就是在ISR结束后再统一处理POST请求的过程,由于只要在最后一次中进入一次临界区,相对于Direct Post Method,进入临界区的次数更少,让系统运行更快。此外还有很多优点,如POST并发等,这部分不赘述,参考如下
在这里插入图片描述

这是为了减少使用ISR直接操作POST行为带来的系统效率低下而采取的处理方式,而且也更加便于多任务的执行,在该函数中,当暂存post请求的队列处理结束时,会使用OSSched()触发一个系统调度,也就有可能切换到其他任务,这实现了任务的切换,需要注意的是,当系统中没有定义的任务在执行时,系统会进入一个优先级最低的闲置任务IDLETASK
在这里插入图片描述

该任务使用一个loop运行,且执行的代码精简,基本上是用于统计性能的代码,当其他任务在设定时间超时或者悬挂对象接受到时(触发中断),则会暂时跳出该任务去处理,在其他任务空闲时又回到这里,可认为ucos的大部份运行实际上是在该任务中,直到出现比这个更高的任务,系统运行总过程就可以理解了。

这篇关于UCOS系统总运行原理的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/863667

相关文章

Spring Security 单点登录与自动登录机制的实现原理

《SpringSecurity单点登录与自动登录机制的实现原理》本文探讨SpringSecurity实现单点登录(SSO)与自动登录机制,涵盖JWT跨系统认证、RememberMe持久化Token... 目录一、核心概念解析1.1 单点登录(SSO)1.2 自动登录(Remember Me)二、代码分析三、

Linux系统中查询JDK安装目录的几种常用方法

《Linux系统中查询JDK安装目录的几种常用方法》:本文主要介绍Linux系统中查询JDK安装目录的几种常用方法,方法分别是通过update-alternatives、Java命令、环境变量及目... 目录方法 1:通过update-alternatives查询(推荐)方法 2:检查所有已安装的 JDK方

Linux系统之lvcreate命令使用解读

《Linux系统之lvcreate命令使用解读》lvcreate是LVM中创建逻辑卷的核心命令,支持线性、条带化、RAID、镜像、快照、瘦池和缓存池等多种类型,实现灵活存储资源管理,需注意空间分配、R... 目录lvcreate命令详解一、命令概述二、语法格式三、核心功能四、选项详解五、使用示例1. 创建逻

MySQL多实例管理如何在一台主机上运行多个mysql

《MySQL多实例管理如何在一台主机上运行多个mysql》文章详解了在Linux主机上通过二进制方式安装MySQL多实例的步骤,涵盖端口配置、数据目录准备、初始化与启动流程,以及排错方法,适用于构建读... 目录一、什么是mysql多实例二、二进制方式安装MySQL1.获取二进制代码包2.安装基础依赖3.清

在IntelliJ IDEA中高效运行与调试Spring Boot项目的实战步骤

《在IntelliJIDEA中高效运行与调试SpringBoot项目的实战步骤》本章详解SpringBoot项目导入IntelliJIDEA的流程,教授运行与调试技巧,包括断点设置与变量查看,奠定... 目录引言:为良驹配上好鞍一、为何选择IntelliJ IDEA?二、实战:导入并运行你的第一个项目步骤1

在MySQL中实现冷热数据分离的方法及使用场景底层原理解析

《在MySQL中实现冷热数据分离的方法及使用场景底层原理解析》MySQL冷热数据分离通过分表/分区策略、数据归档和索引优化,将频繁访问的热数据与冷数据分开存储,提升查询效率并降低存储成本,适用于高并发... 目录实现冷热数据分离1. 分表策略2. 使用分区表3. 数据归档与迁移在mysql中实现冷热数据分

使用Python构建一个高效的日志处理系统

《使用Python构建一个高效的日志处理系统》这篇文章主要为大家详细讲解了如何使用Python开发一个专业的日志分析工具,能够自动化处理、分析和可视化各类日志文件,大幅提升运维效率,需要的可以了解下... 目录环境准备工具功能概述完整代码实现代码深度解析1. 类设计与初始化2. 日志解析核心逻辑3. 文件处

golang程序打包成脚本部署到Linux系统方式

《golang程序打包成脚本部署到Linux系统方式》Golang程序通过本地编译(设置GOOS为linux生成无后缀二进制文件),上传至Linux服务器后赋权执行,使用nohup命令实现后台运行,完... 目录本地编译golang程序上传Golang二进制文件到linux服务器总结本地编译Golang程序

Linux系统性能检测命令详解

《Linux系统性能检测命令详解》本文介绍了Linux系统常用的监控命令(如top、vmstat、iostat、htop等)及其参数功能,涵盖进程状态、内存使用、磁盘I/O、系统负载等多维度资源监控,... 目录toppsuptimevmstatIOStatiotopslabtophtopdstatnmon

从原理到实战深入理解Java 断言assert

《从原理到实战深入理解Java断言assert》本文深入解析Java断言机制,涵盖语法、工作原理、启用方式及与异常的区别,推荐用于开发阶段的条件检查与状态验证,并强调生产环境应使用参数验证工具类替代... 目录深入理解 Java 断言(assert):从原理到实战引言:为什么需要断言?一、断言基础1.1 语