音影先锋亚洲天堂网|电影世界尽头的爱完整版播放|国产 熟女 91|高清无码免费观看欧美日韩|韩国一区二区三区黄色录像|美女亚洲加勒比在线|亚洲综合网 开心五月|7x成人在线入口|成人网站免费日韩毛片区|国产黄片?一级?二级?三级

登錄 免費(fèi)注冊(cè) 首頁 | 行業(yè)黑名單 | 幫助
維庫電子市場網(wǎng)
技術(shù)交流 | 電路欣賞 | 工控天地 | 數(shù)字廣電 | 通信技術(shù) | 電源技術(shù) | 測(cè)控之家 | EMC技術(shù) | ARM技術(shù) | EDA技術(shù) | PCB技術(shù) | 嵌入式系統(tǒng)
驅(qū)動(dòng)編程 | 集成電路 | 器件替換 | 模擬技術(shù) | 新手園地 | 單 片 機(jī) | DSP技術(shù) | MCU技術(shù) | IC 設(shè)計(jì) | IC 產(chǎn)業(yè) | CAN-bus/DeviceNe

各位好,我的UCOS II的兩個(gè)問題,

作者:mikezhong 欄目:嵌入式系統(tǒng)
各位好,我的UCOS II的兩個(gè)問題,
1)               UC/OS II是一個(gè)占先式內(nèi)核,內(nèi)核始終運(yùn)行優(yōu)先級(jí)最高的任務(wù),而且任務(wù)體現(xiàn)在大程序量編程方便和維護(hù)的優(yōu)越性,內(nèi)核的頻率被推薦為10~100MS,每一個(gè)任務(wù)后部都安排有OSTIMEDLY()的延時(shí)函數(shù),從而能夠給其它的任務(wù)有運(yùn)行的機(jī)會(huì)(另外一個(gè)機(jī)會(huì)是10MS內(nèi)核時(shí)間調(diào)度),我想問的是:如果我的系統(tǒng)中有20個(gè)任務(wù),如果最高優(yōu)先級(jí)任務(wù)延時(shí)10MS,那么次優(yōu)先級(jí)任務(wù)可獲得運(yùn)行的機(jī)會(huì),那是否后面很多的任務(wù)如17,18,將沒有機(jī)會(huì)獲得運(yùn)行?因?yàn)榍懊娴娜蝿?wù)不可能全部同時(shí)進(jìn)入等待狀態(tài)。

2)               任務(wù)的切換調(diào)度是任務(wù)控制塊進(jìn)行傳遞,保存當(dāng)前任務(wù)塊指針,保存最高優(yōu)先級(jí)任務(wù)指針,在進(jìn)行任務(wù)切換時(shí),將被中斷的任務(wù)堆棧指針保存,恢復(fù)中斷任務(wù)的指針,恢復(fù)保存在任務(wù)堆棧中的各種參數(shù),我的問題是:我在中斷切換代碼中并沒有看到程序是如何將各種任務(wù)中的參數(shù)(如任務(wù)中的局部變量)保存到各個(gè)任務(wù)自已的任務(wù)堆棧中的?但無論如何肯定是有,在哪里呢?

各位能否指點(diǎn)一下?謝謝!


2樓: >>參與討論
computer00
re:
1)如果優(yōu)先級(jí)高的任務(wù)處于就緒態(tài),優(yōu)先級(jí)低的任務(wù)肯定不能運(yùn)行。在你的系統(tǒng)中,也許次優(yōu)先級(jí)的任務(wù)獲得使用權(quán)后,并不一定會(huì)用完10ms,這樣的話,剩余的時(shí)間就可以給其它任務(wù)使用。

2)任務(wù)切換時(shí),只保存的是CPU的一些寄存器,例如工作寄存器,程序狀態(tài)字等等。而全局變量和局部變量等,都是不會(huì)保存的。如果局部變量被分配在寄存器中,那么實(shí)際上在保存工作寄存器時(shí),就被保存了。如果局部變量太多,則是直接分配在堆棧中的,所以也不用保存。不過keil c51 不一樣,一般的局部變量可能會(huì)使用地址覆蓋技術(shù),因而在任務(wù)中使用局部變量時(shí)要注意,我以前寫51_00_OS時(shí),為了避免這個(gè)問題,就使用靜態(tài)變量(生存期相當(dāng)于全局變量了)來避免這個(gè)問題。keil for arm中,較多的局部變量會(huì)分配到堆棧中,所以不用擔(dān)心這個(gè)問題。


51_00_OS:http://bbs.21ic.com/club/bbs/list.asp?boardid=11&t=1992145&tp=%5B%u73A9%u5355%u7247%u673A%5D%u57FA%u4E8E51%u7684%u5708%u5708%u64CD%u4F5C%u7CFB%u7EDF%2851_00_OS%29%u51FA%u6765%u62C9%u2026%u2026

ARM_00_OS:http://bbs.21ic.com/club/bbs/list.asp?boardid=35&t=2089994&tp=%u770B%u770BARM%u83DC%u9E1F%u5728ARM7%u4E0A%u5199%u7684%u64CD%u4F5C%u7CFB%u7EDF%u2014%u2014ARM%u5708%u5708%u64CD%u4F5C%u7CFB%u7EDF



3樓: >>參與討論
lgxygcg
我的看法
1.不是每一個(gè)任務(wù)都要加OSTIMEDLY()的延時(shí)函數(shù),也可以是等待消息,信號(hào)等等函數(shù)。所謂搶占式操作系統(tǒng)就是說,高優(yōu)先級(jí)任務(wù)先于低優(yōu)先級(jí)任務(wù)。如果說你的高優(yōu)先級(jí)任務(wù)占用所有cpu時(shí)間都無法運(yùn)行完,就是沒有低優(yōu)先級(jí)任務(wù)運(yùn)行的可能性。但事實(shí)上在任務(wù)分配的時(shí)候,是不允許一個(gè)任務(wù)會(huì)占用所有的cpu時(shí)間的,(比如任務(wù)中不允許“while(1);”,當(dāng)然如果放在最低優(yōu)先級(jí)還是可以的,空閑任務(wù)(os idle task)就沒有運(yùn)行的份了,哈哈)。

2.任務(wù)現(xiàn)場保存在移植代碼os_cpu.s中實(shí)現(xiàn)。

4樓: >>參與討論
zhuph
讓其它任務(wù)運(yùn)行,需要一點(diǎn)技巧
1、uc/os是占先式調(diào)度,因此你如果有18個(gè)任務(wù),那也就意味著第18個(gè)任務(wù)優(yōu)先級(jí)很低,換句話說,這個(gè)任務(wù)很不重要,比方Idle任務(wù)。但是你如果想讓Idle任務(wù)運(yùn)行,就必須得把所有其它任務(wù)都給掛起才行?梢圆捎玫募记墒,延遲長一些,使用信號(hào)量等。
2、現(xiàn)場保存在os_cpu_c.c和os_cpu_a.asm中。具體你可參考computer00的說法,他這方面功底不錯(cuò)。

5樓: >>參與討論
mikezhong
THANKS
謝謝各位啦,我先再去分析一下那個(gè)OS_CPU_A。ASM的程序。

6樓: >>參與討論
computer00
在我寫的ARM_00_OS中,可以設(shè)置成同等優(yōu)先級(jí),
這樣任務(wù)會(huì)輪流切換,每個(gè)任務(wù)運(yùn)行一個(gè)時(shí)鐘節(jié)拍。

任務(wù)可以有不同的優(yōu)先級(jí),優(yōu)先級(jí)高的先運(yùn)行。而每個(gè)不同的優(yōu)先級(jí)又可以有很多個(gè)同等的優(yōu)先級(jí),
這樣可以多個(gè)任務(wù)同時(shí)運(yùn)行而不用管對(duì)方是否有時(shí)間運(yùn)行。但優(yōu)先級(jí)比他們高的任何任務(wù)都可以打斷
他們。他們也可以打斷任何優(yōu)先級(jí)比他們低的任務(wù)。

7樓: >>參與討論
mikezhong
謝謝
00,

   你系統(tǒng)的這種方式我認(rèn)為是可值得學(xué)習(xí)的,有時(shí)間要研究一下,但是我驚呀于你如何搞得這么快,不久前才看你搞ARM,如今就搞了一個(gè)多任務(wù)系統(tǒng)。

   我只是在學(xué)習(xí)UCOSII,它花費(fèi)了我很多的時(shí)間,對(duì)于ARM的匯編我總是感覺非常頭痛,請(qǐng)問有什么好的方法學(xué)習(xí)?

8樓: >>參與討論
computer00
沒有什么妙法,就是先把書看完,然后開始寫程序。
寫不出來時(shí),再去書上找找,慢慢的就記住了。

參與討論
昵稱:
討論內(nèi)容:
 
 
相關(guān)帖子
幫朋友忙:求購X86板子,要求帶vxworks 下bsp
跪求232的解決方法
好書預(yù)告《嵌入式系統(tǒng)接口設(shè)計(jì)與Linux驅(qū)動(dòng)程序開發(fā)》
求數(shù)字顯示接口解決方案
S3C2410 神奇的啟動(dòng)問題
免費(fèi)注冊(cè)為維庫電子開發(fā)網(wǎng)會(huì)員,參與電子工程師社區(qū)討論,點(diǎn)此進(jìn)入


Copyright © 1998-2006 m.58mhw.cn 浙ICP證030469號(hào)