一种嵌入51系列单片机的多任务实时操作系统的实现方法技术方案

技术编号:5992371 阅读:286 留言:0更新日期:2012-04-11 18:40
一种嵌入51系列单片机的多任务实时操作系统的实现方法,涉及一种嵌入单片机内部的操作系统。本发明专利技术解决了现有嵌入单片机内部的操作系统的代码量大、以及任务单一的问题。它采用基于keil的C51编程语言编辑、采用keil编译器编译实现,并采用_task_关键字区别不同的任务,该操作系统的多任务切换过程为:在接收到新任务信号之后,关中断、启动任务切换模块进行任务切换:首先判断当前任务是不是空闲任务,如是,则不保存堆栈信息,否,则保存;然后判断当前任务是不是最高优先级任务,如是,则不做堆栈调整,否,则做堆栈调整;最后把最高优先级的任务设置为当前任务,如该当前任务是空闲任务,则直接返回,否,则需要判断是否需要出栈操作然后才能返回。

【技术实现步骤摘要】

本专利技术涉及到嵌入式编程技术,具体涉及一种嵌入单片机内部的操作系统。
技术介绍
随着软件技术的发展,现有嵌入式实时操作系统已经获得了广泛的应用。在单片 机中植入嵌入式操作系统,能够实现单片机产品的智能化。但,由于一般的操作系统的代码 量都比较长,使得所需要的存储空间比较大,不适用于内存空间有限的单片机。现有技术中,嵌入单片机内部的操作系统有ucosii、small rtos 51和 rtX51-tiny,其中ucosii可移植到许多类型的单片机内,但由于51系列单片机的内存比较 小,该种操作系统不适用于51系列单片机。small rtos 51是针对51单片机而开发的一 种操作系统,该操作系统的优点是内核针对51单片机设计,内核更为优化,同时提供了与 ucosii比较相近的、比较丰富的系统任务,但该系统有以下缺点没有充分利用针对keil 的C51编程语言的_task_中的关键字进行设计,因此不能利用keil编译器的代码优化功 能,甚至是需要人为的编译器内设置,使其阻止代码优化;另外,该系统的代码对于51系列 单片机来说还是有点长。rtx51-tiny 是keil公司开发的针对51单片机的操作系统,该系 统有效地克服了 smallrtos 51系统的缺点,但是,该系统没有small rtos 51的优点。
技术实现思路
为了解决现有嵌入单片机内部的操作系统的代码量大不适于51系列单片机使 用,以及现有迁入51系列单片机的操作系统的代码长、任务单一的问题,本专利技术提出一种 嵌入51系列单片机的多任务实时操作系统的实现方法。本专利技术的嵌入51系列单片机的多任务实时操作系统的实现方法是采用基于keil 的C51编程语言编辑、并采用keil编译器编译实现,并采用_task_关键字区别不同的任 务,该操作系统的多任务切换过程为在接收到新任务信号之后,关中断,然后启动任务切换模块,该模块实现切换的过 程为首先,发生任务切换的时候,它首先判断当前正在运行的任务是不是空闲任务,如 果是空闲任务,则不保存堆栈信息,否则保存堆栈信息;然后,判断当前任务是不是最高优先级任务,如果当前任务就是最高优先级任务, 则不做堆栈调整,否则做堆栈调整;最后,当堆栈调整结束之后,把最高优先级的任务设置为当前任务,然后观察当前 任务是不是空闲任务,如果是空闲任务,就直接返回,否则需要判断是否需要出栈操作然后 才能返回。所述保存堆栈信息的过程为步骤Q1、判断当前任务是否是空闲任务,如果是,则执行步骤Q2,否则执行步骤Q3 ;步骤Q2、从任务堆栈数组中加载栈顶指针到SP ;然后执行步骤Q4 ;步骤Q3、保存堆栈信息SP到任务堆栈数组。所述堆栈调整的过程为步骤Q4、从任务就绪表IqRdyTbl中找出就绪表中的最高优先级的任务;然后执行步骤Q5 ;步骤Q5、判断就绪表中的最高优先级任务是否是当前任务,如果判断结果为是,执 行当前任务;否则执行步骤Q6,进行堆栈调整;步骤Q6、获取就绪表中的最高优先级任务的栈顶位置;步骤Q7、判断当前任务的优先级是否高于就绪表中的最高优先级任务的优先级, 如果判断结果为是,则执行步骤QlO ;否则执行步骤Q8 ;步骤Q8、根据任务堆栈数组中加载栈顶的地址与最高优先级任务的栈顶地址之间 的差值,获得移动的空间长度,并把位于任务堆栈数组中加载栈顶的地址与就绪表中的最 高优先级任务的栈顶地址之间的存储器中所存储的数据转移到当前任务的栈底地址处;步骤Q9、根据当前任务的栈底地址与任务堆栈数组中加载栈顶地址之间的差值, 调整堆栈数组中的所有任务的ID号对应的任务堆栈栈底值,使得所有任务的ID号对应的 任务堆栈栈底值都在就绪表中的最高优先级任务ID号对应的任务堆栈栈底值到当前任务 的ID号对应的任务堆栈栈底值之间;堆栈调整结束;步骤Q10、根据就绪表中的最高优先级任务的栈顶地址与当前任务的栈底地址之 间的差值,获得移动的空间长度,并把位于就绪表中的最高优先级任务的栈顶地址与当前 任务的栈底地址之间的存储器中的所有数据移动到任务堆栈数组中加载栈顶的地址处;步骤Q11、根据当前任务的栈底地址与任务堆栈数组中加载栈顶地址之间的差值, 调整堆栈数组中的所有任务的ID号对应的任务堆栈栈底值,使得所有任务的ID号对应的 任务堆栈栈底值都在就绪表中的最高优先级任务ID号对应的任务堆栈栈底值到当前任务 的ID对应的任务堆栈栈底值号之间;堆栈调整结束。所述把最高优先级的任务设置为当前任务,然后观察当前任务是不是空闲任务, 如果是空闲任务,就直接返回,否则需要判断是否需要出栈操作然后才能返回的具体过程 为步骤Q12、将就绪表中的最高优先级的任务作为当前任务;步骤Q13、判断当前任务是否为空闲任务,如果判断结果为是,则执行步骤Q16 ;否 则执行步骤Q14 ;步骤Q14、判断当前任务是否被中断切换,如果判断结果为是,则执行步骤Q15,否 则执行步骤Q16 ;步骤Q15、将任务切换类型设置为非中断切换类型,并执行寄存器出栈操作;步骤Q16、开中断,完成任务调用。本专利技术的操作系统同时具有small rtos 51系统与rtx51-tiny系统的优点,该操 作系统充分利用了 keil的C51编程环境中的_task_的关键字进行设计,充分发挥了 keil 编译器的代码优化功能,使编译后的代码量少,该操作系统的系统任务丰富。具体实施例方式具体实施方式一本实施方式所述一种嵌入51系列单片机的多任务实时操作系 统的实现方法,是采用基于keil的C51编程语言编辑、并采用keil编译器编译实现,并采关键字区别不同的任务,该操作系统的任务切换过程为在接收到新任务信号之后,关中断,然后启动任务切换模块,该模块实现切换的过 程为首先,发生任务切换的时候,它首先判断当前正在运行的任务是不是空闲任务,如 果是空闲任务,则不保存堆栈信息,否则保存堆栈信息;然后,判断当前任务是不是最高优先级任务,如果当前任务就是最高优先级任务, 则不做堆栈调整,否则做堆栈调整;最后,当堆栈调整结束之后,把最高优先级的任务设置为当前任务,然后观察当前 任务是不是空闲任务,如果是空闲任务,就直接返回,否则需要判断是否需要出栈操作然后 才能返回。具体实施方式二 本实施方式是对具体实施方式一所述的一种嵌入51系列单片 机的多任务实时操作系统的实现方法的进一步限定,本实施方式中所述的保存堆栈信息的 过程采用下述过程实现步骤Q1、判断当前任务是否是空闲任务,如果是,则执行步骤Q2,否则执行步骤 Q3 ;由于空闲任务堆栈内的数据全是无用数据,所以空闲任务不需要保存堆栈信息; 如果不是空闲任务,堆栈内的数据为有用信息,在任务切换时必须保存堆栈信息。步骤Q2、从任务堆栈数组中加载栈顶指针到SP ;然后执行步骤Q4步骤Q3、保存堆栈信息SP到任务堆栈数组。该步骤完成的动作是保存堆栈信息。具体实施方式三本实施方式是对具体实施方式一所述的一种嵌入51系列单片 机的多任务实时操作系统的实现方法的进一步限定,本实施方式中所述的堆栈调整的过程 采用下述过程实现步骤Q4、从任务就绪表IqRdyTbl中找出就绪表中的最高优先级的任务;然后执行 步骤Q5 ;步骤Q5、判断就绪表中的最高优先级任务是否是当前任务,如果判断结果本文档来自技高网...

【技术保护点】
一种嵌入51系列单片机的多任务实时操作系统的实现方法,其特征在于,它是采用基于keil的C51编程语言编辑、并采用keil编译器编译实现,并采用task关键字区别不同的任务,该操作系统的多任务切换过程为:在接收到新任务信号之后,关中断,然后启动任务切换模块,该模块实现切换的过程为:首先,发生任务切换的时候,它首先判断当前正在运行的任务是不是空闲任务,如果是空闲任务,则不保存堆栈信息,否则保存堆栈信息;然后,判断当前任务是不是最高优先级任务,如果当前任务就是最高优先级任务,则不做堆栈调整,否则做堆栈调整;最后,当堆栈调整结束之后,把最高优先级的任务设置为当前任务,然后观察当前任务是不是空闲任务,如果是空闲任务,就直接返回,否则需要判断是否需要出栈操作然后才能返回。

【技术特征摘要】

【专利技术属性】
技术研发人员:彭宇陈叶富刘大同
申请(专利权)人:哈尔滨工业大学
类型:发明
国别省市:93

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1