專利名稱:數(shù)字信號處理器上多任務(wù)的實現(xiàn)的制作方法
技術(shù)領(lǐng)域:
本發(fā)明涉及按照權(quán)利要求1的在具有硬件棧的數(shù)字信號處理器
上實現(xiàn)多任務(wù)處理的方法、按照權(quán)利要求5的計算機程序產(chǎn)品、按照 權(quán)利要求6的計算機系統(tǒng)和按照權(quán)利要求7的數(shù)據(jù)載體。
背景技術(shù):
今天,多媒體應(yīng)用越來越多地在具有包括多處理器的硬件環(huán)境 的消費產(chǎn)品中實現(xiàn)。作為這些多處理器的一部分,經(jīng)常會使用一個或 多個數(shù)字信號處理器(DSP)來加快計算繁重任務(wù)的速度。傳統(tǒng)上, DSP適合于執(zhí)行一個單一程序。這對可以很容易地在一個單一程序中 描述的靜態(tài)應(yīng)用程序來說是夠用的。不過,新的算法在行為上是動態(tài) 的,例如是與數(shù)據(jù)相關(guān)的,并且因此將應(yīng)用程序開發(fā)成通信任務(wù)的圖 表。任務(wù)必須易于設(shè)計和易于整合,以便實現(xiàn)足夠高的設(shè)計產(chǎn)出率。
對于數(shù)據(jù)交換而言,任務(wù)通過用于任務(wù)間通信的專用函數(shù)彼此 通信。例如,這些函數(shù)可以提供從先入先出(FIFO)緩沖器讀取數(shù)據(jù) 和向先入先出(FIFO)緩沖器寫入數(shù)據(jù)的機制。為此,需要兩種基本 種類的操作,a)同步和b)數(shù)據(jù)傳遞。同步操作檢查是否在緩沖器 中分別有充足的數(shù)據(jù)或空間可用,并且檢查在哪里可應(yīng)用新的數(shù)據(jù)或 空間分別已經(jīng)可用的信號。數(shù)據(jù)傳遞操作向緩沖器內(nèi)移動數(shù)據(jù)/從緩 沖器向外移動數(shù)據(jù)??梢砸远喾N不同的方式將這些操作組合成函數(shù)。
同步操作的語義可以具有不同的種類。主要地,分別檢查數(shù)據(jù) 或空間的同步操作可以是邏輯阻斷,直到數(shù)據(jù)或空間分別可用。不過, 對于處理器硬件的更好的利用來說,如果需要的數(shù)據(jù)或空間對于一個 任務(wù)不可用,則另一個任務(wù)應(yīng)當(dāng)?shù)玫綀?zhí)行的機會。這樣,實現(xiàn)檢查數(shù) 據(jù)或空間的可用性的同步操作的函數(shù)可以直接向該任務(wù)返回真/假 值。如果返回值為假,則需要進行任務(wù)切換。這稱為非阻斷同步。
第一種辦法是,應(yīng)用程序可以包括使用用于任務(wù)間通信的非阻 斷同步的任務(wù),該任務(wù)間通信在非阻斷同步函數(shù)返回假值(即,發(fā)出 例如數(shù)據(jù)或空間分別不可用的信號)的情況下通過從該任務(wù)返回來將 控制權(quán)交還給任務(wù)調(diào)度程序。不過,對于具有與數(shù)據(jù)相關(guān)的通信行為 的任務(wù)來說,這將會導(dǎo)致復(fù)雜的代碼結(jié)構(gòu),因為在下一次安排執(zhí)行該 任務(wù)的時候必須要重新計算執(zhí)行點。
按照第二種辦法,使用阻斷同步函數(shù),代碼結(jié)構(gòu)得到了簡化, 因為任務(wù)會邏輯上一直等待,直到同步函數(shù)調(diào)用返回。較為簡單的代 碼結(jié)構(gòu)意味著,通過使用阻斷同步,任務(wù)較為容易設(shè)計并且從而設(shè)計 產(chǎn)出率增高?,F(xiàn)在的問題是如何實現(xiàn)阻斷同步函數(shù),因為當(dāng)函數(shù)調(diào)用
阻斷時,任務(wù)切換必須發(fā)生,以避免停頓以及實現(xiàn)對DSP的高效使用。 此外,實際的DSP并不支持任務(wù)切換。而且,實際的DSP通常包括硬 件棧,以降低函數(shù)調(diào)用的系統(tǒng)開銷。不過,硬件棧(對于軟件來說, 它是不可見的)的使用阻礙了基于阻斷函數(shù)調(diào)用的受軟件控制的任務(wù) 切換。這個問題將在下面更加詳細(xì)地加以解釋。
硬件棧用在執(zhí)行例如將匯編指令集(AIS)共同地與匯編指令 G0SUB相對應(yīng)的函數(shù)調(diào)用的時候。在所調(diào)用的函數(shù)的第一個指令開始 執(zhí)行之前,將程序計數(shù)器(PC)的當(dāng)前值推到硬件棧上。此外, 一旦 在處理器的各個堆棧寄存器段中沿著向上的方向建立了堆棧,硬件棧 指針就會據(jù)此遞增。只有現(xiàn)在,將所調(diào)用函數(shù)的第一個指令的地址拷 貝到PC中并且能夠取出所調(diào)用函數(shù)的代碼并開始執(zhí)行。在執(zhí)行之后, 調(diào)用函數(shù)返回,這例如將AIS統(tǒng)一地與匯編指令RTS相對應(yīng)。然后, 據(jù)此將堆棧指針減一,并且將函數(shù)調(diào)用之前程序計數(shù)器的值從硬件棧 中上托出來,即,拷貝到PC。隨后,函數(shù)調(diào)用之后的調(diào)代碼繼續(xù)執(zhí) 行。在因為所調(diào)用函數(shù)遭到阻斷而進行任務(wù)切換的情況下,硬件棧的 內(nèi)容可以在幾個任務(wù)之間混雜。
下面,使用有兩個任務(wù)A和B的實例情形來解釋說明這一問題。 開始,假設(shè)正在執(zhí)行任務(wù)A并且硬件棧是空的。由此,堆棧指針為0。 現(xiàn)在,任務(wù)A調(diào)用函數(shù)fl,這使得任務(wù)A的返回地址被推到硬件棧 的位置0上,并且堆棧指針遞增到l?,F(xiàn)在,由于某種原因,所調(diào)用
的函數(shù)fl阻斷。然后,進行到任務(wù)B的任務(wù)切換,給任務(wù)B提供執(zhí) 行的機會。在執(zhí)行任務(wù)B期間,調(diào)用函數(shù)f2,這造成任務(wù)B的返回 地址被推到硬件棧的位置1上,并且由此,堆棧指針遞增到2。由于 某種原因所調(diào)用的函數(shù)f2也遭到了阻斷,因此,進行返回到任務(wù)A 的任務(wù)切換?,F(xiàn)在假設(shè)函數(shù)fl不再阻斷,并且因此得到執(zhí)行。在執(zhí) 行之后,函數(shù)fl返回,即,將堆棧位置2上的值拷貝到PC。不過, 堆棧位置2上的值是任務(wù)B的返回地址而不是任務(wù)A的。這明顯是個 錯誤,因為函數(shù)fl是從任務(wù)A中調(diào)用的。
結(jié)果,已經(jīng)表明任務(wù)切換并非與DSP的硬件棧無關(guān)。在通用處 理器中,所描述的問題并不存在,因為多個任務(wù)典型地是利用阻斷函 數(shù)執(zhí)行的并且沒有硬件棧。不過,在DSP (通常具有硬件棧)中,任 務(wù)切換是有如上所述的問題的。
發(fā)明內(nèi)容
因此,本發(fā)明的目的是提供一種能夠?qū)崿F(xiàn)任務(wù)切換而不會有硬 件棧的數(shù)據(jù)一致性問題的方法。具體來說,本發(fā)明的目的是提供數(shù)字 信號處理器(DSP)上的任務(wù)切換。
本發(fā)明的全部或特定目的是借助權(quán)利要求1中所述的方法解決 的。由此, 一種通過阻斷同步函數(shù)在具有硬件棧的數(shù)字信號處理器上
實現(xiàn)多任務(wù)處理的方法,所述方法包括步驟存儲第一個任務(wù)的各自 的返回地址并且轉(zhuǎn)移到執(zhí)行阻斷函數(shù)的代碼;確定對所述阻斷函數(shù)的 阻斷狀況是否存在;在阻斷狀況的情況下,存儲處理器的共享資源; 以及切換到至少第二個任務(wù)。
本發(fā)明的總體發(fā)明思想在于將阻斷函數(shù)實現(xiàn)為它們并不利用硬 件棧。換句話說,用一段內(nèi)嵌匯編代碼改造各個函數(shù)調(diào)用,這段內(nèi)嵌 匯編代碼主要存儲程序計數(shù)器并且跳轉(zhuǎn)到執(zhí)行所述函數(shù)的正確例程, 艮口,由于使用轉(zhuǎn)移指令代替調(diào)用子例程,因此處理器不使用硬件棧。 現(xiàn)在,如果遇到阻斷狀況,有益地是能夠完成任務(wù)切換,以繼續(xù)進行 另一個任務(wù)。當(dāng)在任務(wù)切換可能必須發(fā)生時沒有使用硬件棧的時候, 前面介紹的由不同任務(wù)進行的函數(shù)調(diào)用中硬件棧的內(nèi)容混雜問題通
過按照本發(fā)明的方法得到了克服。
通過此外還包括步驟在從所述至少第二個任務(wù)切換回來之后, 重新檢查所述阻斷狀況,如果所述阻斷狀況依然存在,則切換到所述 至少第二個任務(wù),有益地是本發(fā)明的方法借助包括所述任務(wù)切換和重
新檢查的循環(huán),在所述第一任務(wù)以及實現(xiàn)該方法的任何任務(wù)中提供了 自給的任務(wù)切換接口。如果所述第一任務(wù)仍然受到所述阻斷函數(shù)的所 述阻斷狀況的阻斷,則進行切換到另一個任務(wù)的另一次任務(wù)切換。如 果所述阻斷狀況不再存在,則恢復(fù)所述第一個任務(wù)的共享資源。然后, 轉(zhuǎn)移到所述第一個任務(wù)的所述返回地址并且繼續(xù)進行所述第一個任 務(wù)的執(zhí)行。
如果在所述確定步驟中,確定了所述阻斷狀況不存在,則轉(zhuǎn)移 到所述第一個任務(wù)的所述返回地址并且繼續(xù)進行所述第一個任務(wù)的 執(zhí)行。
在DSP中,有用于安排多個任務(wù)的調(diào)度程序。所述調(diào)度程序可
以管理多個任務(wù),例如,借助就緒隊列來進行管理。所述多個任務(wù)可 以彼此通信,即,通過用于任務(wù)間通信的專用函數(shù)來交換公共使用的 和/或處理的數(shù)據(jù)。這樣,由所述多個任務(wù)構(gòu)成的應(yīng)用程序的效率可 以在運行在具有帶有硬件棧的數(shù)字信號處理器的計算機系統(tǒng)上時,通 過所述多個任務(wù)之間的任務(wù)切換得到提高。
按照本發(fā)明的方法可以是包括代碼構(gòu)件的計算機程序產(chǎn)品的一 部分或者優(yōu)選地用在包括代碼構(gòu)件的計算機程序產(chǎn)品中,該計算機產(chǎn) 品可以運行在具有帶有對所述代碼構(gòu)件不可見的硬件棧的至少一個 處理器的計算機系統(tǒng)上。這樣,按照本發(fā)明通過利用阻斷函數(shù)的阻斷 同步,可以在這樣的計算機程序中輕松地使用任務(wù)切換。由此,本發(fā) 明可以用在具有處理器和存儲器的計算機系統(tǒng)中,該處理器具有對運 行在所述計算機系統(tǒng)上的代碼構(gòu)件不可見的硬件棧,該處理器能夠執(zhí) 行存儲在所述存儲器中的代碼構(gòu)件。最后,仍然很重要,數(shù)據(jù)載體可 以包含這種代碼構(gòu)件,所述代碼構(gòu)件安排成在具有處理器的計算機系 統(tǒng)上運行時,使用按照本發(fā)明的方法,所述處理器具有對運行在所述 計算機系統(tǒng)上的代碼構(gòu)件不可見的硬件棧,從而所述計算機系統(tǒng)可以
借助多個任務(wù)之間的任務(wù)切換來處理所述多個任務(wù)。
結(jié)合附圖考慮下面本發(fā)明的實施方式的詳細(xì)介紹,本發(fā)明將會 得到更加完整的理解,其中
圖l表示圖解說明按照本發(fā)明的任務(wù)切換的實現(xiàn)方式的流程圖。
具體實施例方式
按照本發(fā)明的優(yōu)選實施方式,所發(fā)明的方法是借助幾種類型的 代碼段來實現(xiàn)的。雖然可以將本發(fā)明修改成各種不同的改造方案和其 它可供選用的形式,但是將要展示的是它的具體實例。不過,要注意, 為一般有效性起見,實施方式的解釋說明使用的是偽代碼。該實施方 式表明了如何按照本發(fā)明在正常使用硬件棧的處理器上實現(xiàn)多任務(wù)
處理,該硬件棧對于軟件是不可見的,類似于DSP。雖然本發(fā)明利用 了幾個代碼段來實現(xiàn)阻斷函數(shù),但是應(yīng)當(dāng)理解,并非意在將本發(fā)明局 限于所介紹的特定實施方式。相反,我們意在覆蓋所有落在由所附權(quán) 利要求定義的本發(fā)明的范圍之內(nèi)的改變方案、等價方案和其它可供選 用的方案。首先,應(yīng)當(dāng)注意,針對阻斷函數(shù)給出的例子是檢查數(shù)據(jù)可 用性的同步函數(shù)。
下面,將會介紹在DSP上實現(xiàn)本發(fā)明的代碼段。首先,在當(dāng)前 任務(wù)的代碼"Current—task"中,使用內(nèi)嵌匯編代碼段代替針對這些 預(yù)定函數(shù)的函數(shù)調(diào)用,這些預(yù)定函數(shù)在阻斷狀況下可以阻斷,可以造 成任務(wù)切換。這里將內(nèi)嵌匯編代碼稱為類型A,或者簡稱為代碼A: "Temp一pc 二 PC+2;
GOTO Check—data—available;
Continue;,,
代碼a是一段內(nèi)嵌匯編代碼,借助這段代碼來進行到各個函數(shù) 代碼的轉(zhuǎn)移,而不是調(diào)用該函數(shù)。這樣,不用說,對于每種分別的預(yù) 定阻斷函數(shù),即,可以阻斷并且在阻斷時應(yīng)該會進行到另一個任務(wù)的 切換的任何函數(shù),都有單獨的代碼類型A。變量"Temp一pc"作為臨時程序計數(shù)器使用,它的值(PC+2)指向"Continue"指令的位置并 且因此將用于跳回到主調(diào)代碼,從而能夠繼續(xù)執(zhí)行主調(diào)代碼。就此而 言,值得指出的是,本發(fā)明人發(fā)現(xiàn),在執(zhí)行指令"Temp—pc = PC+2" 期間禁止中斷是非常有益的??梢栽谠O(shè)定變量"Te即一pc"之后再次 允許中斷。指令"GOTO Check—data—available "是到名為 "Check—data—available,,的代碼的跳轉(zhuǎn),"Check—data—available" 代碼是(原本要調(diào)用的)函數(shù)的實際代碼并且接下來將會對其詳細(xì)解 釋。
代碼"Check—data_available"是執(zhí)行按照現(xiàn)有技術(shù)應(yīng)該已經(jīng) 調(diào)用了的函數(shù)的代碼。這里將"Check—data—available"稱為類型B 的代碼,或者簡稱為代碼B:
"Check—data一available: If (enough tokens) GOTO Temp—pc;
Else
GOSUB Save—state; Current—task->return—point=Re—check—data—available; GOTO Task—switch;" 主要地,通過執(zhí)行代碼B,判斷是否遇到了阻斷狀況。如果沒有, 則通過跳回到"Temp—pc"所指向的位置繼續(xù)執(zhí)行,否則,通過調(diào)用 接下來將要解釋的"SaVe_state"代碼并將變量"Current_task -〉return一point" 設(shè)定成使得它指向各個 "Re—check—data—available"代碼(稍后將會對此進行解釋)來準(zhǔn) 備任務(wù)切換。再次指出,對于每個不同的可能阻斷函數(shù),也有單獨的 代碼B,代碼B可以發(fā)起到另一個任務(wù)的任務(wù)切換。
就代碼"Save—state"而言,它用于將所有寄存器的狀態(tài)保存 在存儲器中。將代碼"Save—state"稱為類型C的代碼,或者簡稱為 代碼C:
"Save—state:
Save all registers in memory;Return;"
代碼C是狀態(tài)保存代碼,它保存處理器共享資源的內(nèi)容,作為 切換到另一個任務(wù)的準(zhǔn)備過程的第一步驟,任務(wù)切換由下面的代碼 "Task—switch"控制。
代碼"Task—switch"為由預(yù)定阻斷函數(shù)造成的停頓任務(wù)之間的 同步任務(wù)切換提供了一種類型的接口。將代碼"Task—switch"稱為 類型D的代碼,或者簡稱為代碼D: "Task—switch:
Current—task-〉parameters 二 parameters; Current—task = scheduler—get—next—task; Parameters = Current—task->parameters; GOTO Current—task-〉return—point;"
主要地,代碼D是任務(wù)切換代碼,該代碼將控制權(quán)交給另一個 任務(wù),例如由調(diào)度程序管理的就緒隊列中的下一個任務(wù)。在任務(wù)切換 之前,將"Current—task"的實際參數(shù)存儲為"Current—task -parameters"。要注意,這些參數(shù)還包括各個Temp—pc值。然后, 可以將"current_task"轉(zhuǎn)換為另一個任務(wù)。從各個"Current—task -parameters "中恢復(fù)出另 一個任務(wù)的參數(shù),即,新的"Current—task" 的參數(shù)。接著,進行跳轉(zhuǎn)至'J各個"Current—task -〉return一point,, 的操作。如上所述,對于"Current一task",己經(jīng)將變量"Current—task -〉ret訓(xùn)—point"設(shè)定為"Re—check—data—available"的地址,接 下來將對此進行解釋說明。
代碼"Re_check—data—available"用于重新檢查阻斷函數(shù)的阻 斷狀況,即,在本實施方式中為函數(shù)"Check—data—available"。將 代碼"Re—check—data—available"稱為類型E的代碼,或者簡稱為 代碼E:
"Re—check—data—available: If (enough tokens)
GOSUB Restore—state; GOTO Temp—pc;
Else
GOTO Task—switch;,, 就是說,代碼E是在發(fā)生了任務(wù)切換回來之后重新檢查各個 "Current—task"的各個阻斷函數(shù)的阻斷狀況的代碼。主要地,它具 有與各個代碼B相同的特點。如果阻斷狀況不再存在,則調(diào)用接下來 將要介紹的代碼"Res t or e__s t at e "并且繼續(xù)執(zhí)行由跳轉(zhuǎn)到"Temp—pc " 所指向的位置而發(fā)起的原始任務(wù),即,類型A的代碼中的"Continue" 指令。如果阻斷條件仍然存在,則有返回代碼D的跳轉(zhuǎn),艮P, "Task—switch",并且可以使另一個任務(wù)再次啟用。這樣,代碼D 和E 二者構(gòu)成了任務(wù)切換與重新檢查各個"Current—task"中的阻斷 原因之間的循環(huán)。
代碼"Restore—state"用于從存儲器中恢復(fù)所有寄存器的狀態(tài)。 將代碼"Restore—state"稱為類型F的代碼,或者簡稱為代碼F: "Restore—state :
Restore all registers from memory; Return ;',
代碼F是狀態(tài)恢復(fù)代碼,該代碼恢復(fù)處理器共享資源的內(nèi)容。 要注意,按照本發(fā)明的代碼C、 D和F可以在所有預(yù)定阻斷函數(shù) 之間共享,即,可以總體上是相同的。只有代碼A、 B和E可以或多 或少地單獨適用于各個阻斷函數(shù)。
下面,將結(jié)合圖1的流程圖介紹前面討論的代碼A、 B、 C、 D、 E 和F的執(zhí)行。當(dāng)在"Current—task" Tl中執(zhí)行代碼A時,由程序計 數(shù)器PC的值設(shè)定的臨時程序計數(shù)器"Te,_pc"遞增2。然后,完成 到相應(yīng)代碼B的跳轉(zhuǎn)。代碼B的結(jié)果可以是a)沒有遇到阻斷狀況, 這意味著圖1中的YES;或者b)遇到了阻斷狀況,這意味著圖l中 的N0。
在a)的情況下,完成返回到臨時程序計數(shù)器"Te即—pc"所指 向的代碼A的末尾的跳轉(zhuǎn),并且任務(wù)繼續(xù)進行,即,執(zhí)行原來調(diào)用的 函數(shù)。在b)的情況下,執(zhí)行代碼C并且將當(dāng)前任務(wù)Tl的所有相關(guān) 值(即,處理器的共享資源)保存在存儲器中。然后,完成到代碼D
的跳轉(zhuǎn)。代碼D還存儲與任務(wù)切換的原因相關(guān)的信息。值得指出的是, "Temp—pc,,的值也屬于存儲在變量"Current—task -〉parameters,, 中的參數(shù)。這之后,代碼D從就緒列表中取出另一個任務(wù)T2并且使 其成為新的"Current—task"。在從另 一個任務(wù)T2或多個任務(wù)切換 回來之后,f^石馬D瑕^轉(zhuǎn)至U "Current—task —〉return point",這個 "Current—task -〉return point"是代碼E并且在本實施方式中是 函數(shù)"re—check—data—available ,,,艮卩,是基于離開原始的 "Current—task" Tl到另一個任務(wù)T2的第一次任務(wù)切換的原因。
代碼E執(zhí)行與代碼B類似的代碼。同樣有兩種可能的結(jié)果,c) 阻斷狀況不再存在,這意味著圖1中YES;或d)仍然存在阻斷狀況, 這意味著圖1中的N0。在c)的情況下,調(diào)用類型F的代碼,該代碼 從存儲器中恢復(fù)共享資源(即,處理器寄存器),并且隨后進行回到 原始的"Current—task"中的原始代碼A的末尾(即,由"Temp_pc" 的值代表的位置)的跳轉(zhuǎn)。原始的"Current—task"能夠得以繼續(xù)進 行。在d)的情況下,針對另一次任務(wù)切換完成到代碼D的跳轉(zhuǎn)。在
這種情況下,不需要恢復(fù)共享資源,因為這些值己經(jīng)被保存在變量 "Current_task -〉parameters" 中了。
本發(fā)明公開了在數(shù)字信號處理器上實現(xiàn)多任務(wù)處理的方法。為 了這個目的,將阻斷函數(shù)安排成它們并不利用處理器的硬件棧。各個 函數(shù)調(diào)用由一段內(nèi)嵌匯編代碼取代,該段內(nèi)嵌匯編代碼取而代之地進 行向執(zhí)行所述函數(shù)的正確例程的轉(zhuǎn)移。如果遇到阻斷函數(shù)的阻斷狀 況,則可以完成任務(wù)切換,以繼續(xù)進行另一個任務(wù)。當(dāng)在任務(wù)切換可 能必須發(fā)生時沒有使用硬件棧的時候,避免了由不同任務(wù)進行的函數(shù) 調(diào)用之間的硬件棧的內(nèi)容混雜。
總地來說,本發(fā)明的能夠在具有硬件棧的數(shù)字信號處理器上實 現(xiàn)多任務(wù)處理的方法可一般性地應(yīng)用于任何在函數(shù)調(diào)用的情況下利 用對軟件不可見的硬件棧的處理器。通過實現(xiàn)按照本發(fā)明的方法,任 務(wù)切換在諸如DSP這樣的處理器(例如,由Philips Semiconductors 出品的處理器Epics7b)上成為可能。仍然值得注意的是,為了確保 硬件棧在任務(wù)關(guān)閉的時候和在任務(wù)再次開啟的時候具有相同的內(nèi)容,
可以僅僅在任務(wù)的主函數(shù)中使用阻斷調(diào)用。
權(quán)利要求
1.一種在具有硬件棧的數(shù)字信號處理器上實現(xiàn)多任務(wù)處理的方法,所述方法包括步驟-存儲第一個任務(wù)的各自的返回地址并且轉(zhuǎn)移到執(zhí)行阻斷函數(shù)的代碼;-確定針對所述阻斷函數(shù)的阻斷狀況是否存在;-如果確定了阻斷狀況,則存儲處理器的共享資源;和-切換到至少第二個任務(wù)。
2. 按照權(quán)利要求1所述的方法,此外還包括步驟在從所述至 少第二個任務(wù)切換回來之后,重新檢查所述阻斷狀況,如果所述阻斷 狀況依然存在,則切換到所述至少第二個任務(wù)。
3. 按照權(quán)利要求2所述的方法,此外還包括步驟如果所述阻 斷狀況不再存在,則恢復(fù)所述共享資源,轉(zhuǎn)移到所述第一個任務(wù)的所 述返回地址,并且繼續(xù)所述第一個任務(wù)的執(zhí)行。
4. 按照權(quán)利要求1到3中任何一項所述的方法,在所述確定步 驟中此外還包括步驟如果所述阻斷狀況不存在,則轉(zhuǎn)移到所述第一 個任務(wù)的所述返回地址并且繼續(xù)所述第一個任務(wù)的執(zhí)行。
5. —種包括代碼構(gòu)件的計算機程序產(chǎn)品,所述代碼構(gòu)件安排成 當(dāng)在具有至少一個處理器的計算機系統(tǒng)上運行時,其使用按照權(quán)利要 求1到4之一的方法來阻斷任務(wù)切換過程中阻斷函數(shù)的同步,所述處 理器具有對所述代碼構(gòu)件不可見的硬件棧。
6. —種計算機系統(tǒng),該計算機系統(tǒng)具有處理器和存儲器,所述處理器具有對運行在所述計算機系統(tǒng)上的代碼構(gòu)件不可見的硬件棧, 所述處理器能夠執(zhí)行存儲在所述存儲器中的代碼構(gòu)件,其中所述代碼構(gòu)件包括多個任務(wù)并且安排成用于利用權(quán)利要求1到4之一的方法來 阻斷所述多個任務(wù)中使用的阻斷函數(shù)的同步。
7. —種包含代碼構(gòu)件的數(shù)據(jù)載體,所述代碼構(gòu)件安排成當(dāng)在具 有處理器的計算機系統(tǒng)上運行時來使用按照權(quán)利要求1到4之一的方法,所述處理器具有對運行在所述計算機系統(tǒng)上的代碼構(gòu)件不可見的 硬件棧。
全文摘要
本發(fā)明涉及在數(shù)字信號處理器上實現(xiàn)多任務(wù)處理的實現(xiàn)方法。為了這個目的,將阻斷函數(shù)安排成它們并不利用處理器的硬件棧。各個函數(shù)調(diào)用由一段內(nèi)嵌匯編代碼取代,該段內(nèi)嵌匯編代碼取而代之地進行向用于執(zhí)行所述函數(shù)的正確例程的轉(zhuǎn)移。如果遇到阻斷函數(shù)的阻斷狀況,則可以完成任務(wù)切換,以繼續(xù)進行另一個任務(wù)。當(dāng)在任務(wù)切換可能必須發(fā)生時沒有使用硬件棧的時候,避免了由不同任務(wù)進行的函數(shù)調(diào)用之間的硬件棧的內(nèi)容混雜。
文檔編號G06F9/42GK101176061SQ200680013495
公開日2008年5月7日 申請日期2006年4月7日 優(yōu)先權(quán)日2005年4月22日
發(fā)明者托馬斯·亨里克松 申請人:Nxp股份有限公司