tqOS的PendSV抢占式任务调度

2024-04-20 22:38

本文主要是介绍tqOS的PendSV抢占式任务调度,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

参考文献为:
1、Cortex-M3权威指南
2、 http://www.cnblogs.com/sky1991/p/stepbystep_stm32_os_3.html
3、 http://www.openedv.com/posts/list/64274.htm
4、tqOS V1.2
其实PendSV的原理就是软中断,将PendSV的中断优先级设置为最低,不可以打断任何其他中断服务程序。为什么这样呢?因为其他中断服务程序种必定用到了R0-R3、LR、PC、SP,如果在其他中断执行了一半的时候PendSV中断将其打断,则在PendSV中断处理函数中入栈的寄存器不是原始的线程留下来的寄存器的值了,而是被那个被打断的中断处理函数所修改过的值了。所以PendSV中断优先级必须是最低的,这样在所有其他中断都执行完并返回之后(返回的时候自动恢复寄存器R0-R3、LR、PC、SP)再执行PendSV异常时就可以完整的将线程的上下文保存到栈之中。
这里有几点说明一下,Cortex-M3处理器进入中断的时候只对R0-R3、LR、PC、SP进行自动压栈处理,而不对R4-R11寄存器进行处理。在中断返回的时候也弹出R0-R3、LR、PC、SP。PendSV也是一种中断,所以要完整的保存任务环境就要在PendSV中断中将R4-R11寄存器压栈,并且出栈的时候要先弹出R4-R11,然后再返回,中断返回过程中自动将剩余的R0-R3、LR、PC、SP寄存器组弹出。
移植的时候不要忘了在startup头文件中对PendSV进行初始化并设置中断优先级为最低优先级。

这篇关于tqOS的PendSV抢占式任务调度的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



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

相关文章

XXL-JOB实践:从零开始构建你的任务调度系统

目录 一、序言1、系统组成2、架构图 二、部署调度中心1、下载源码2、执行数据库脚本3、修改application.properties配置文件4、启动调度中心 三、部署执行器1、引入依赖2、执行器配置2.1 XxlJobProperties属性文件2.2 XxlJobConfig配置类2.3 XxlJobHanlder作业处理器2.4 application.yml 3、启动执行器 四、调

XXL-JOB分布式任务调度教程(持续更新~)

先大致声明一下流程(具体细节在下面哦~)  步骤: 1.下载xxl-job并配置以及启动 2.导入对应maven坐标 3.配置对应的配置文件以及编写对应的配置类config 4.编写要触发的方法并且给方法打上@XXlJob("")注解 5.设置xxl-Job平台上的任务    5.1创建执行器  5.2创建任务,5,3配置任务具体细节(比如  (1触发执行器,(2执行时间,(3运行模式,(4以

Linux操作系统学习笔记(七)任务调度

一. 前言   在前文中,我们分析了内核中进程和线程的统一结构体task_struct,并分析进程、线程的创建和派生的过程。在本文中,我们会对任务间调度进行详细剖析,了解其原理和整个执行过程。由此,进程、线程部分的大体框架就算是介绍完了。本节主要分为三个部分:Linux内核中常见的调度策略,调度的基本结构体以及调度发生的整个流程。下面将详细展开说明。 二. 调度策略   Linux的调度策略主

Linux基础 -- pthread之线程池任务调度

线程池任务依赖设计方案 1. 设计目标 为了在多线程环境中支持任务间的依赖关系,我们设计了一个基于 pthread_create 封装的线程池,任务之间可以设置依赖,只有在依赖的任务完成后,依赖任务才会被执行。该设计目标是简化任务调度的逻辑,让开发者可以专注于任务的编写,而不必关注复杂的线程管理和任务依赖的执行顺序。 2. 核心概念 2.1 任务(Task) 任务是线程池中执行的最小单位

【华为笔试】抢占式任务调度

/**************************************************************************** 问题描述: //抢占式任务调度 //输入: 第一行 :n任务数 //接下来n行是任务信息 时间单位为 秒 //任务号 优先级 开始时间 运行时间 //输出:前200s 任务调度顺序 **************************

探索Java中的分布式任务调度:从理论到实践

引言 在现代企业级应用中,定时任务调度是一项至关重要的功能。无论是数据备份、日志清理还是批处理任务,都离不开任务调度系统。随着系统的规模和复杂度的增加,传统的单机任务调度已经无法满足需求。因此,分布式任务调度应运而生。本篇博文将详细介绍Java中的分布式任务调度,从基本概念到实际代码实现,带你全面了解这一技术领域。 目录 分布式任务调度概述常见的分布式任务调度框架Quartz Schedul

SpringBoot整合自定义quartz实现任务调度

在不引入quartz相关表的情况下,自定义任务调度存储表,实现SpringBoot项目启动后自动执行自定义任务调度类。 1、建立自定义任务调度存储表 DROP TABLE IF EXISTS `bmd_flow_schedule`;CREATE TABLE `bmd_flow_schedule` (`taskID` char(20) NOT NULL,`taskName` varchar(3

Quartz任务调度框架

文章目录 前言一、介绍二、使用步骤1.创建maven工程,添加依赖2.创建任务3.启动任务 三、基本实现原理1. Scheduler任务调度器2. Triggers触发器2.1 SimpleTrigger2.2 CronTirgger 3. Misfire策略4 任务Job4.1 Job4.2 JobDetail4.3 JobDataMap 前言 最近跟的一个系统需要实时

推荐一款灵活,可靠和快速的开源分布式任务调度平台

今天给大家推荐一款灵活,可靠和快速的开源分布式任务调度平台——SnailJob。 前言 什么是任务调度? 任务调度,是指在多任务的环境下,合理地分配系统资源,调度各个任务在什么时候,由哪一个处理器处理,以达到满足用户需求、提高系统资源利用率、提高系统吞吐量的目的。 分布式任务调度有哪些应用场景? 定时任务: 在特定时间执行某项任务,例如每天晚上12点备份数据库。 周期性任务: 周期性

P0.9/P1.25全倒装共阴节能COB超微小间距LED显示屏已抢占C位

COB(Chip on Board)技术最早发源于上世纪60年代,是将LED芯片直接封装在PCB电路板上,并用特种树脂做整体覆盖。COB实现“点” 光源到“面” 光源的转换。点间距有P0.3、P0.4、P0.5、P0.6、P0.7、P0.9、P1.25、P1.538、P1.5625、P1.86、P1.875等。 COB封装有正装COB封装与倒装COB封装。正装COB的发光角度与打线距离,从技术路线