CN105786597A - uCOS-III操作系统实现任务切换的方法及装置 - Google Patents
uCOS-III操作系统实现任务切换的方法及装置 Download PDFInfo
- Publication number
- CN105786597A CN105786597A CN201410785577.8A CN201410785577A CN105786597A CN 105786597 A CN105786597 A CN 105786597A CN 201410785577 A CN201410785577 A CN 201410785577A CN 105786597 A CN105786597 A CN 105786597A
- Authority
- CN
- China
- Prior art keywords
- register
- task
- value
- tsp
- switching
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Pending
Links
Abstract
本发明公开了一种uCOS‑III操作系统实现任务切换的方法及装置,其中方法包括:在中断发生时,将当前任务的其他寄存器的值压栈保存到当前任务的堆栈空间中;将TSP寄存器的值取出保存到当前任务的进程信息表中;同时将要切换的任务进程信息表中TSP寄存器的值恢复到TSP寄存器;将要切换的任务的其他寄存器的值从要切换的任务的堆栈空间中弹出恢复到各对应的其他寄存器;将要切换的任务的PC和SR寄存器的值通过PUSH指令压栈保存到ESP寄存器所指向的中断堆栈空间中;执行RTE指令,将要切换的任务的PC和SR寄存器的值从ESP寄存器所指向的中断堆栈空间中取出,以使程序从要切换的任务的当前位置开始执行。
Description
技术领域
本发明涉及通信技术,特别涉及一种uCOS-III操作系统实现任务切换的方法及装置。
背景技术
uCOS-III是一个可扩展的,可固化的,抢占式的嵌入式实时操作系统,提供了嵌入式实时操作系统所期望的所有功能包括资源管理、同步、内部任务通信等。uCOS-III根据ANSI-C标准编写,代码量在6K到20K之间,适合移植到各种嵌入式芯片上使用。但目前uCOS-III都是应用在ARM等各种CPU上,基本没有在双堆栈指针(SP)寄存器构架的数字信号处理器(DSP)上应用的案例。
双堆栈指针(SP)寄存器构架的数字信号处理器(DSP)指的是在DSP核上有2个SP寄存器,一个是非中断时的SP寄存器:任务堆栈指针(TSP,Task SP)寄存器,又可以称作正常堆栈指针(NSP,Normal SP)寄存器,程序在非中断场景下使用TSP寄存器;一个是中断时的SP寄存器:异常堆栈指针(ESP,Exception SP)寄存器,程序在中断场景下使用ESP寄存器。
目前适用于双SP寄存器构架的DSP上的嵌入式实时操作系统不多,而且都是商业化产品,源代码不公开,对使用中出现的问题很难定位,也无法扩展一些操作系统层面的功能。uCOS-III是一个开源的嵌入式实时操作系统,代码量小,非常适合应用在DSP上,因此,uCOS-III的任务切换方法在双SP寄存器构架的DSP上如何实现,是目前有待解决的关键问题。
发明内容
有鉴于此,本发明提供了一种uCOS-III操作系统实现任务切换的方法及装置,能够基于双SP寄存器构架的DSP,实现uCOS-III操作系统的任务切换。
为达到上述目的,本发明的技术方案具体是这样实现的:
本发明公开了一种uCOS-III操作系统实现任务切换的方法,该方法应用于包括任务堆栈指针TSP寄存器和异常堆栈指针ESP寄存器的双堆栈指针寄存器的数字信号处理器DSP中,该方法包括:
在中断发生时,将当前任务的其他寄存器的值压栈保存到当前任务的堆栈空间中;
将TSP寄存器的值取出保存到当前任务的进程信息表中;同时将要切换的任务进程信息表中TSP寄存器的值恢复到TSP寄存器;
将要切换的任务的其他寄存器的值从要切换的任务的堆栈空间中弹出恢复到各对应的其他寄存器;
将要切换的任务的程序指针PC寄存器和状态寄存器SR的值通过PUSH指令压栈保存到ESP寄存器所指向的中断堆栈空间中;
执行RTE指令,将要切换的任务的PC和SR寄存器的值从ESP寄存器所指向的中断堆栈空间中取出,以使程序从要切换的任务的当前位置开始执行。
优选地,通过PUSHC或PUSHN指令,将当前任务的其他寄存器的值压栈保存到当前任务的堆栈空间中。
优选地,通过POPC或POPN指令,将要切换的任务的其他寄存器的值从要切换的任务的堆栈空间中弹出恢复到各对应的其他寄存器。
其中,DSP执行TRAP指令,或者,DSP接收到其他硬件发送的中断信号,以使DSP进入中断状态。
所述硬件包括增强型可编程中断控制器EPIC。
所述其他寄存器包括:程序指针PC寄存器、状态寄存器SR、地址寄存器、数据寄存器和控制寄存器。
本发明还公开了一种uCOS-III操作系统实现任务切换的装置,该装置应用于包括任务堆栈指针TSP寄存器和异常堆栈指针ESP寄存器的双堆栈指针寄存器的数字信号处理器DSP中,该装置包括:
任务切换单元,用于在中断发生时,将当前任务的其他寄存器的值压栈保存到当前任务的堆栈空间中;将TSP寄存器的值取出保存到当前任务的进程信息表中;同时将要切换的任务进程信息表中TSP寄存器的值恢复到TSP寄存器;将要切换的任务的其他寄存器的值从要切换的任务的堆栈空间中弹出恢复到各对应的其他寄存器;
程序执行跳转单元,用于将要切换的任务的程序指针PC寄存器和状态寄存器SR的值通过PUSH指令压栈保存到ESP寄存器所指向的中断堆栈空间中;执行RTE指令,将要切换的任务的PC和SR寄存器的值从ESP寄存器所指向的中断堆栈空间中取出,以使程序从要切换的任务的当前位置开始执行。
由上述的技术方案可见,本发明提供了一种uCOS-III操作系统实现任务切换的方法,该方法应用于包括TSP寄存器和ESP寄存器的双堆栈指针寄存器的DSP中,在中断发生时,先将当前任务各通用寄存器的值保存到当前任务相应的内存中,然后将之前保存到内存中的要切换的任务的各通用寄存器的值恢复到相应寄存器中,最后将要切换的任务的PC寄存器和SR寄存器的值放到ESP寄存器所指向的中断堆栈空间的顶部,然后执行RTE指令,此时DSP会从ESP寄存器所指向的中断堆栈空间中取出PC寄存器和SR寄存器的值进行恢复。如此,uCOS-III操作系统的任务切换方法在双SP寄存器构架的DSP上得到实现,从而实现本发明的目的。
附图说明
图1为本发明一实施例提供了一种uCOS-III操作系统实现任务切换的方法流程示意图。
图2为本发明一种uCOS-III操作系统实现任务切换的装置结构示意图。
具体实施方式
为使本发明的目的、技术方案、及优点更加清楚明白,以下参照附图并举实施例,对本发明进一步详细说明。
uCOS-III操作系统中任务切换分两种,一种是非中断时任务切换,一种是中断时任务切换。非中断时任务切换指的是在没有外部干扰的情况下,由于任务之间的通信,导致高优先级任务被触发而进行的任务切换。中断时任务切换指的是硬件触发高优先级任务而进行的任务切换。同时,如上所述,本发明DSP核上有2个SP寄存器,一个是非中断时的SP寄存器:任务堆栈指针(TSP,Task SP)寄存器,又可以称作正常堆栈指针(NSP,NormalSP)寄存器,程序在非中断场景下使用TSP寄存器;一个是中断时的SP寄存器:异常堆栈指针(ESP,Exception SP)寄存器,程序在中断场景下使用ESP寄存器。根据uCOS-III操作系统的任务切换种类,非中断时任务切换是操作的是TSP寄存器,中断时任务切换操作的是TSP寄存器和ESP寄存器。为了实现简单,本发明使非中断时任务切换和中断时任务切换操作SP寄存器流程一致,在非中断时任务切换时使用TRAP指令,使DSP产生一个中断,在中断中完成任务切换,这样非中断时任务切换和中断时任务切换实现流程是一致的。
如图1所示,本发明一实施例提供了一种uCOS-III操作系统实现任务切换的方法,该方法应用于包括TSP寄存器和ESP寄存器的双堆栈指针寄存器的DSP中,该方法包括以下步骤:
步骤11、在中断发生时,将当前任务的其他寄存器的值压栈保存到当前任务的堆栈空间中;
其中,中断的发生,可以是DSP执行TRAP指令,产生一个陷阱中断,使DSP进入中断状态;也可以是DSP接收到其他硬件,例如增强型可编程中断控制器(EPIC,Enhanced Programmable Interrupt Controller)发送的中断信号,使DSP进入中断状态。DSP执行TRAP指令,使DSP主动进入中断状态,然后进行的任务切换是非中断时任务切换;DSP接收到EPIC发送的中断信号,使DSP进入中断状态,然后进行的任务切换是中断时任务切换。
其他寄存器包括:程序指针(PC)寄存器、状态寄存器(SR)、地址寄存器、数据寄存器和控制寄存器。
本步骤中,具体可以通过PUSHC或PUSHN指令,将当前任务的其他寄存器的值压栈保存到当前任务的堆栈空间中。因为,此时DSP使用的是ESP寄存器,但本步骤需要操作TSP寄存器,所以需要使用TSP压栈指令,PUSHC或PUSHN。具体采用PUSHC,还是PUSHN,还是其他TSP压栈指令,根据DSP核版本的不同而进行相应的选择。
步骤12、将TSP寄存器的值取出保存到当前任务的进程信息表中;同时将要切换的任务进程信息表中TSP寄存器的值恢复到TSP寄存器;
步骤13、将要切换的任务的其他寄存器的值从要切换的任务的堆栈空间中弹出恢复到各对应的其他寄存器;
本步骤中,具体可以通过POPC或POPN指令,将要切换的任务的其他寄存器的值从要切换的任务的堆栈空间中弹出恢复到各对应的其他寄存器。因为,此时DSP使用的是ESP寄存器,但本步骤需要操作TSP寄存器,所以需要使用TSP出栈指令,POPC或POPN。具体采用POPC,还是POPN,还是其他TSP出栈指令,根据DSP核版本的不同而进行相应的选择。
步骤14、将要切换的任务的程序指针PC寄存器和状态寄存器SR的值通过PUSH指令压栈保存到ESP寄存器所指向的中断堆栈空间中;
步骤15、执行RTE指令,将要切换的任务的PC和SR寄存器的值从ESP寄存器所指向的中断堆栈空间中取出,以使程序从要切换的任务的当前位置开始执行。
为清楚说明本发明,下面列举具体场景,以非中断时任务切换为例进行说明。本实施例中uCOS-III操作系统的任务(Task)0到Task1的任务切换流程如下:
1)Task0运行时,DSP使用的是TSP寄存器,调用OSCtxSw函数表明发生了任务切换,此时,DSP执行TRAP指令,产生一个陷阱中断,使DSP进入中断状态。
2)DSP处于中断状态,DSP使用的是ESP寄存器,此时需要将Task0的PC,SR,R0~R63,D0~D63寄存器的值保存到Task0的堆栈空间中,即需要操作TSP寄存器,但此时DSP使用的是ESP寄存器,所以不能使用PUSH指令,需使用TSP专用指令PUSHC,将需要保存的寄存器压入Task0的堆栈空间中。
3)DSP处于中断状态,将压完栈的TSP寄存器的值存入到Task0的进程信息表中,同时将Task1的进程信息表中的TSP寄存器的值存入TSP寄存器中,这样就完成的Task0和Task1的堆栈指针的切换。
4)DSP处于中断状态,将Task1的PC:SR,R0~R63,D0~D63寄存器的值从Task1的堆栈空间中恢复,由于操作的还是TSP寄存器,所以不能使用POP指令,需使用TSP专用指令POPC。
5)DSP处于中断状态,在中断处理完成时,需要执行RTE指令,此时DSP会从ESP寄存器所指向的中断堆栈空间中取出PC寄存器和SR寄存器的值进行恢复,所以,需要将Task1的PC寄存器和SR寄存器的值放到ESP寄存器所指向的中断堆栈空间的顶部,即使用PUSH指令压入PC寄存器和SR寄存器的值到ESP寄存器所指向的中断堆栈空间即可。
综上所述,上述场景中,为实现Task0到Task1的任务切换,在Task0正常运行的时候,DSP主动执行TRAP指令,使自身进入中断状态。然后,将当前Task0各通用寄存器的值保存到Task0相应的内存中,具体地,先将PC,SR,R0~R63,D0~D63寄存器的值保存到Task0的堆栈空间中,在这个过程中,TSP寄存器需要记录PC,SR,R0~R63,D0~D63寄存器的值保存到Task0的堆栈空间中所占用的地址空间,所以TSP寄存器的值一直在变化,当PC,SR,R0~R63,D0~D63寄存器的值都依次保存到Task0的堆栈空间中后,才将稳定后的TSP寄存器的值保存到Task0的进程信息表中。如此,就完成了对任务切换之前的Task0各寄存器值的保存。接下来,需要将之前保存到内存中的Task1各通用寄存器的值恢复到相应寄存器中,具体地,先将Task1的进程信息表中的TSP寄存器的值存入TSP寄存器中,然后再将Task1的PC,SR,R0~R63,D0~D63寄存器的值从Task1的堆栈空间中恢复。最后,因为任务切换到Task1后,DSP需要跳转到Task1上次执行程序的位置进行处理,所以DSP将Task1的PC寄存器和SR寄存器的值放到ESP寄存器所指向的中断堆栈空间的顶部,然后执行RTE指令,此时DSP会从ESP寄存器所指向的中断堆栈空间中取出PC寄存器和SR寄存器的值进行恢复,从而完成任务的切换。
需要说明的是,本发明非中断时任务切换和中断时任务切换,都是在中断中完成任务切换,只不过中断时任务切换,进入中断的条件不是TRAP主动产生的中断,而是硬件本身发生的中断。本发明基于DSP上的双SP寄存器架构,实现uCOS-III操作系统的任务切换,使uCOS-III操作系统能成功地应用到双SP寄存器构架的DSP上,方便实际应用中操作系统功能的扩展和使用。
基于同样的发明构思,本发明还提出一种uCOS-III操作系统实现任务切换的装置,该装置应用于包括TSP寄存器和ESP寄存器的双堆栈指针寄存器的DSP中,参见图2,该装置包括:
任务切换单元201,用于在中断发生时,将当前任务的其他寄存器的值压栈保存到当前任务的堆栈空间中;将TSP寄存器的值取出保存到当前任务的进程信息表中;同时将要切换的任务进程信息表中TSP寄存器的值恢复到TSP寄存器;将要切换的任务的其他寄存器的值从要切换的任务的堆栈空间中弹出恢复到各对应的其他寄存器;
程序执行跳转单元202,用于将要切换的任务的程序指针PC寄存器和状态寄存器SR的值通过PUSH指令压栈保存到ESP寄存器所指向的中断堆栈空间中;执行RTE指令,将要切换的任务的PC和SR寄存器的值从ESP寄存器所指向的中断堆栈空间中取出,以使程序从要切换的任务的当前位置开始执行。
以上所述,仅为本发明的较佳实施例而已,并非用于限定本发明的保护范围。凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。
Claims (7)
1.一种uCOS-III操作系统实现任务切换的方法,该方法应用于包括任务堆栈指针TSP寄存器和异常堆栈指针ESP寄存器的双堆栈指针寄存器的数字信号处理器DSP中,该方法包括:
在中断发生时,将当前任务的其他寄存器的值压栈保存到当前任务的堆栈空间中;
将TSP寄存器的值取出保存到当前任务的进程信息表中;同时将要切换的任务进程信息表中TSP寄存器的值恢复到TSP寄存器;
将要切换的任务的其他寄存器的值从要切换的任务的堆栈空间中弹出恢复到各对应的其他寄存器;
将要切换的任务的程序指针PC寄存器和状态寄存器SR的值通过PUSH指令压栈保存到ESP寄存器所指向的中断堆栈空间中;
执行RTE指令,将要切换的任务的PC和SR寄存器的值从ESP寄存器所指向的中断堆栈空间中取出,以使程序从要切换的任务的当前位置开始执行。
2.如权利要求1所述的方法,其特征在于,通过PUSHC或PUSHN指令,将当前任务的其他寄存器的值压栈保存到当前任务的堆栈空间中。
3.如权利要求1所述的方法,其特征在于,通过POPC或POPN指令,将要切换的任务的其他寄存器的值从要切换的任务的堆栈空间中弹出恢复到各对应的其他寄存器。
4.如权利要求1所述的方法,其特征在于,DSP执行TRAP指令,或者,DSP接收到其他硬件发送的中断信号,以使DSP进入中断状态。
5.如权利要求4所述的方法,其特征在于,所述硬件包括增强型可编程中断控制器EPIC。
6.如权利要求1所述的方法,其特征在于,所述其他寄存器包括:程序指针PC寄存器、状态寄存器SR、地址寄存器、数据寄存器和控制寄存器。
7.一种uCOS-III操作系统实现任务切换的装置,该装置应用于包括任务堆栈指针TSP寄存器和异常堆栈指针ESP寄存器的双堆栈指针寄存器的数字信号处理器DSP中,该装置包括:
任务切换单元,用于在中断发生时,将当前任务的其他寄存器的值压栈保存到当前任务的堆栈空间中;将TSP寄存器的值取出保存到当前任务的进程信息表中;同时将要切换的任务进程信息表中TSP寄存器的值恢复到TSP寄存器;将要切换的任务的其他寄存器的值从要切换的任务的堆栈空间中弹出恢复到各对应的其他寄存器;
程序执行跳转单元,用于将要切换的任务的程序指针PC寄存器和状态寄存器SR的值通过PUSH指令压栈保存到ESP寄存器所指向的中断堆栈空间中;执行RTE指令,将要切换的任务的PC和SR寄存器的值从ESP寄存器所指向的中断堆栈空间中取出,以使程序从要切换的任务的当前位置开始执行。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201410785577.8A CN105786597A (zh) | 2014-12-17 | 2014-12-17 | uCOS-III操作系统实现任务切换的方法及装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201410785577.8A CN105786597A (zh) | 2014-12-17 | 2014-12-17 | uCOS-III操作系统实现任务切换的方法及装置 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN105786597A true CN105786597A (zh) | 2016-07-20 |
Family
ID=56373443
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201410785577.8A Pending CN105786597A (zh) | 2014-12-17 | 2014-12-17 | uCOS-III操作系统实现任务切换的方法及装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN105786597A (zh) |
Cited By (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN111538579A (zh) * | 2020-04-23 | 2020-08-14 | 山东华芯半导体有限公司 | 一种嵌入式平台下的多任务运行方法 |
CN112631762A (zh) * | 2020-12-31 | 2021-04-09 | 东软睿驰汽车技术(沈阳)有限公司 | 一种车辆任务切换的方法和装置 |
CN117193979A (zh) * | 2023-09-08 | 2023-12-08 | 上海合芯数字科技有限公司 | 基于独立中断栈的任务处理方法、装置、终端设备及介质 |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5634046A (en) * | 1994-09-30 | 1997-05-27 | Microsoft Corporation | General purpose use of a stack pointer register |
CN101819539A (zh) * | 2010-04-28 | 2010-09-01 | 中国航天科技集团公司第五研究院第五一三研究所 | 一种μCOS-Ⅱ移植到ARM7的中断嵌套方法 |
CN103778009A (zh) * | 2012-10-18 | 2014-05-07 | 深圳市中兴微电子技术有限公司 | 中断处理方法及装置 |
-
2014
- 2014-12-17 CN CN201410785577.8A patent/CN105786597A/zh active Pending
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5634046A (en) * | 1994-09-30 | 1997-05-27 | Microsoft Corporation | General purpose use of a stack pointer register |
CN101819539A (zh) * | 2010-04-28 | 2010-09-01 | 中国航天科技集团公司第五研究院第五一三研究所 | 一种μCOS-Ⅱ移植到ARM7的中断嵌套方法 |
CN103778009A (zh) * | 2012-10-18 | 2014-05-07 | 深圳市中兴微电子技术有限公司 | 中断处理方法及装置 |
Cited By (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN111538579A (zh) * | 2020-04-23 | 2020-08-14 | 山东华芯半导体有限公司 | 一种嵌入式平台下的多任务运行方法 |
CN111538579B (zh) * | 2020-04-23 | 2023-02-03 | 山东华芯半导体有限公司 | 一种嵌入式平台下的多任务运行方法 |
CN112631762A (zh) * | 2020-12-31 | 2021-04-09 | 东软睿驰汽车技术(沈阳)有限公司 | 一种车辆任务切换的方法和装置 |
CN112631762B (zh) * | 2020-12-31 | 2023-10-27 | 东软睿驰汽车技术(沈阳)有限公司 | 一种车辆任务切换的方法和装置 |
CN117193979A (zh) * | 2023-09-08 | 2023-12-08 | 上海合芯数字科技有限公司 | 基于独立中断栈的任务处理方法、装置、终端设备及介质 |
CN117193979B (zh) * | 2023-09-08 | 2024-02-23 | 上海合芯数字科技有限公司 | 基于独立中断栈的任务处理方法、装置、终端设备及介质 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN104115154B (zh) | 当在域之间切换时维持安全数据与不安全访问相隔离 | |
CN104115155A (zh) | 在具有安全域和次安全域的数据处理设备中的异常处理 | |
CN103778009A (zh) | 中断处理方法及装置 | |
CN108139903B (zh) | 依dmb操作用加载/存储操作实施加载撷取/存储释放指令 | |
WO2006006084A3 (en) | Establishing command order in an out of order dma command queue | |
CN106462451B (zh) | 虚拟化平台处理中断方法和相关设备 | |
WO2020106779A8 (en) | Testing as a service for cloud gaming | |
CN103810072A (zh) | 保障多线程任务有序执行的装置及方法 | |
US10922785B2 (en) | Processor and method for scaling image | |
CN103699512A (zh) | 多线程处理器中的内核间线程备用 | |
CN105786597A (zh) | uCOS-III操作系统实现任务切换的方法及装置 | |
CN106528065A (zh) | 一种线程获取方法及设备 | |
CN104391754A (zh) | 一种任务异常的处理方法及装置 | |
CN107526622A (zh) | Linux的快速异常处理方法及装置 | |
CN102426546A (zh) | 多窗口并发显示方法 | |
CN107391283A (zh) | 一种消息处理方法及装置 | |
CN107085532A (zh) | 任务监听方法和装置 | |
CN103745017B (zh) | 信息抓取装置和方法 | |
CN111124519A (zh) | 基于输入响应优化安卓应用程序启动速度的方法及系统 | |
CN103593606B (zh) | 上下文信息管理方法及系统 | |
CN105551500B (zh) | 一种音频信号处理方法及装置 | |
CN101349975A (zh) | 实现中断底半部机制的方法及嵌入式系统 | |
CN106209403B (zh) | 一种调试方法以及调试装置 | |
CN109960601A (zh) | 一种业务数据的恢复方法、装置和电子设备 | |
CN104978208A (zh) | 一种热重启方法及其装置 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
WD01 | Invention patent application deemed withdrawn after publication | ||
WD01 | Invention patent application deemed withdrawn after publication |
Application publication date: 20160720 |