RTOSck-软中断调度器
来源:互联网 发布:网络视频推广方案 编辑:程序博客网 时间:2024/06/14 18:32
一、背景介绍
RTOSck是中软欧拉开发部自研的一款嵌入式实时操作系统。主要面向中低端嵌入式环境,具有体积小、效率高、易维测等特定。为了实现无上下文及栈切换的高效业务处理,RTOSck支持一种称为软中断的线程机制。软中断具有与中断类似的特性,支持优先级及优先级抢占,处理过程不能挂起。与硬中断通过硬件激活不同,软中断需要通过主动调用软中断激活函数进行激活。
二、题目描述
请模拟实现一个简单软中断调度器。该软中断调度器支持32个优先级(0~31,数值越小,优先级越高)。并支持如下调度行为:1、在低优先级软中断中激活高优先级软中断,高优先级软中断将立即抢占执行;
2、在高优先级软中断中激活低优先级软中断,需要在高优先级软中断执行完成后才能得到调度;
3、低优先级软中断需要在所有直接或间接抢占的所有高优先级软中断执行完成后,再次恢复执行;
4、同优先级软中断按照先入先出顺序进行调度;
5、同一软中断可以连续多次激活,并响应同样多次。
三、代码
#include<map>#include<queue>#include<iostream>using namespace std;class process{public:int swiId;int prio;void (*proc)(void);friend bool operator <(process proc1,process proc2){return proc1.prio>proc2.prio;}};map<int,process> processsavemap;//存储所有中断priority_queue<process> prqueue;//优先队列中的process按照prio比较int currentID=100;//设置当前中断id/*************************************************************************************************函数说明:创建软中断输入参数: swiId: 创建软中断ID; prio: 创建软中断优先级; proc: 创建软中断处理函数。输出参数:无返回值 :成功返回0, 其它情况返回-1**************************************************************************************************/int SwiCreate(unsigned int swiId, unsigned int prio, void (* proc)(void)){//TODO: 添加代码... if(swiId>99 || prio>31 || prio<0 || proc==NULL) return -1;process add;add.swiId=swiId;add.prio=prio;add.proc=proc;if(processsavemap.count(add.swiId)!=0)//判断里面是不是存在着这个idreturn -1;elseprocesssavemap[add.swiId]=add;// 如果符合条件则添加进mapreturn 0;}/*************************************************************************************************函数说明:软中断激活输入参数:swiId: 待激活软中断ID输出参数:无返回值 :成功返回0, 其它情况返回-1**************************************************************************************************/int SwiActivate(unsigned int swiId){//TODO: 添加代码...if(processsavemap.count(swiId)==0)return -1;prqueue.push(processsavemap[swiId]);//按照优先级放入优先队列while(!prqueue.empty()){process topprocess=prqueue.top();if(currentID != topprocess.swiId){ int tmp=currentID; currentID=topprocess.swiId; topprocess.proc(); currentID=tmp; prqueue.pop();//出队列}else{break;//是同一个的时候继续}}return 0;}/*************************************************************************************************函数说明:清空所有的信息输入参数:无输出参数:无返回值 :无**************************************************************************************************/void Clear(void){//TODO: 添加代码...currentID=100;processsavemap.clear();while(!prqueue.empty()){prqueue.pop();}}
0 0
- RTOSck-软中断调度器
- RTOSck-软中断调度器
- 华为OJ RTOSck-软中断调度器 自定义优先级
- 软中断调度器 c/c++实现(vs2008)
- 进程调度 中断
- Linux kernel tick发起调度软中断函数调用图
- centos 7配置系统调度isolcpus(软中断绑定)
- 深度解剖~ FreeRtos阅读笔记3 freertos调度器启动、中断优先级管理、中断优先级分组
- VxWorks任务调度与中断
- 时钟中断是rt-thread的线程调度器的驱动力
- 时钟中断是rt-thread的线程调度器的驱动力
- 关于Free-RTOS调度器启动前API调用造成中断关闭问题
- RT-Thread 03任务间同步及通讯 -中断关闭、调度器锁、信号量
- ucosii_中断服务中的任务调度
- 关中断是否禁止任务调度?
- 关于ucosII中断中任务调度
- 中断不能睡眠/调度的原因
- ucos 任务调度与中断的关系
- 二叉搜索树(BST)的常用操作:建树、插入、查询、删除、排序打印
- SQL Server 错误日志收缩(ERRORLOG)
- 周工作汇报分解
- 贪心算法入门(杭电2037)
- 禁用共享jar包上传,加快任务启动
- RTOSck-软中断调度器
- Linux如何查找软件的安装路径
- 初步认识DWR框架
- SQL Server 重置Identity标识列的值(INT爆了)
- Linux下文件的压缩与打包
- 百度地图的设计
- SQL Server 置疑、可疑、正在恢复
- Duilib开发手机助手基础教程
- uboot的bootcmd 和bootargs的分析