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

登錄 免費(fèi)注冊(cè) 首頁(yè) | 行業(yè)黑名單 | 幫助
維庫(kù)電子市場(chǎng)網(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

我是新手。想用匯編寫(xiě)一這樣的多任務(wù)OS,不知可行嗎,請(qǐng)大家?guī)兔?/h1>

作者:bausrpgfba 欄目:嵌入式系統(tǒng)
我是新手。想用匯編寫(xiě)一這樣的多任務(wù)OS,不知可行嗎,請(qǐng)大家?guī)兔?br>任務(wù)程序1,2,3,4,5,6,7,8順序排列,最后一個(gè)任務(wù)是CPU休息任務(wù),也是優(yōu)先級(jí)最低的任務(wù)。執(zhí)行任務(wù)程序時(shí)將按任務(wù)程序的排列順序執(zhí)行。直到遇到CPU休息任務(wù)。當(dāng)CPU休息被叫醒時(shí),進(jìn)入系統(tǒng)中斷,CPU判斷出是休息任務(wù)后,不進(jìn)行通用內(nèi)存R01234567,A,B,DPH,DPL,PSW的常規(guī)保存,通過(guò)欠跳轉(zhuǎn)退出中斷后,直接進(jìn)入任務(wù)程序12345678的循環(huán)。假如在執(zhí)行任務(wù)程序5時(shí)發(fā)生了中斷,進(jìn)入系統(tǒng)中斷后判斷出是用戶任務(wù)被中斷了,將任務(wù)5掛起后,保存此任務(wù)的通用內(nèi)存后通過(guò)欠跳轉(zhuǎn)退出中斷后,直接進(jìn)入用戶任務(wù)程序1(最高優(yōu)先級(jí)的用戶任務(wù)),判斷是否滿足執(zhí)行條件,按任務(wù)程序的排列順序向低優(yōu)先級(jí)的用戶方向循環(huán),假如用戶任務(wù)3滿足執(zhí)行條件后,將會(huì)被執(zhí)行,假如在執(zhí)行3時(shí)又發(fā)生了中斷,將會(huì)同用戶5一樣的結(jié)果。當(dāng)再次循環(huán)到用戶任務(wù)3時(shí),發(fā)現(xiàn)有被中斷掛起的標(biāo)志后,會(huì)調(diào)用用戶任務(wù)工作環(huán)境恢復(fù)子程序。通過(guò)RET指令后,將會(huì)跳轉(zhuǎn)到原斷點(diǎn)處,直到用戶任務(wù)被執(zhí)行完后,清除掛起標(biāo)志,進(jìn)入用戶任務(wù)4,假如4不滿足條件。進(jìn)入用戶程序5后,先看是否是被掛起的任務(wù),是被掛起的任務(wù)。將再調(diào)用調(diào)用工作環(huán)境恢復(fù)子程序.........。不知這樣可行嗎。效率高嗎。還有什么好的辦法嗎。請(qǐng)大家多多幫忙。

2樓: >>參與討論
coldra
用匯編寫(xiě)?真有挑戰(zhàn)性
 
3樓: >>參與討論
mohanwei
看得有點(diǎn)頭暈……
如果你能用偽代碼把思想說(shuō)明白,那么你的系統(tǒng)也差不多出來(lái)了——剩下的都是編碼而已。
不過(guò)如果你想把它做的通用一點(diǎn),最好還是用C來(lái)寫(xiě)。盡管嵌入式的C不見(jiàn)得兼容性就很好,但是移植時(shí)所需做的改動(dòng)遠(yuǎn)遠(yuǎn)要少于匯編^_^
而且維護(hù)起來(lái)也相對(duì)容易一些。如果是匯編,恐怕才過(guò)幾天你自己都不認(rèn)識(shí)那些代碼了^_^

建議你先用C來(lái)實(shí)現(xiàn),然后針對(duì)你所用的具體CPU來(lái)做一下匯編級(jí)別的優(yōu)化(如果你是要用到具體產(chǎn)品上的話)。

做出來(lái)肯定沒(méi)問(wèn)題,我支持你!所謂的操作系統(tǒng)并不可怕,在做好架構(gòu)以后剩下的就是編碼的問(wèn)題了,做出來(lái)了會(huì)對(duì)你以后的人生軌跡都有重大影響的,就怕你沒(méi)有持之以恒的決心了^_^

4樓: >>參與討論
bausrpgfba
謝謝mohanwei兄弟
謝謝mohanwei兄弟。我有恒心,因?yàn)槲覍?duì)多任務(wù)感興趣,對(duì)智能的東東都感興趣。還因?yàn)槲沂切率,看別人看寫(xiě)的看不懂。學(xué)了一段時(shí)間的C51可是總也是止步不前。所以還是用匯編吧。看了一段時(shí)間別人的多任務(wù)OS的反匯編后,很暈,于是自己琢磨,自己化簡(jiǎn),一步步的來(lái),相信總能理解的。
 我是個(gè)業(yè)余愛(ài)好者。每天工作閑時(shí)總會(huì)有時(shí)間去想一些自己不能理解的東東。手中也只有幾片很基本的單片機(jī),主要是AT89C2051。個(gè)方面資源很有限,所以還是匯編好點(diǎn)吧。等以后也一定會(huì)好好學(xué)學(xué)C的。
  mohanwei兄弟,您說(shuō)的很對(duì)。如果寫(xiě)出了一個(gè)屬于自己的OS,從個(gè)個(gè)方面來(lái)說(shuō)都是對(duì)自己學(xué)識(shí)的肯定和檢閱,當(dāng)然我知道自己很菜。但無(wú)論如何我會(huì)寫(xiě)去來(lái)看看到底可行嗎。希望和mohanwei兄弟交個(gè)朋友,QQ:63699332。
  最后希望得到大家的幫忙。

5樓: >>參與討論
mohanwei
說(shuō)點(diǎn)題外話,我當(dāng)初也跟你差不多,大學(xué)里的計(jì)算機(jī)系統(tǒng)
只講了8031和匯編。所以自己剛開(kāi)始的時(shí)候沒(méi)考慮那么多,直接就用匯編了(我匯編用的很順手,最大編過(guò)2600多行的代碼,調(diào)試起來(lái)也感覺(jué)很輕松)。但是偶然上了C51BBS后,就萌生了學(xué)一下C51的想法,結(jié)果編了一個(gè)流水燈后感覺(jué)一下子就把C51學(xué)到手了(大學(xué)里還學(xué)過(guò)一點(diǎn)TURBOC),之后直接就用C51編了一個(gè)產(chǎn)品的程序代碼(編譯后的bin文件有61K,單片機(jī)是p89c668)。
個(gè)人感覺(jué)只要懂匯編,C51用起來(lái)是很簡(jiǎn)單的。比如在流水燈中操作一個(gè)I/O口,匯編可能是這樣:
SETB P1.0
CALL DELAY_1S
CLR P1.0
……
在C51里就可以這樣:
#include <reg51.h>
sbit led=P1^0;
void main(void)
{
   led=1;
   delay_s();
   led=0;
   ……
}

更多的體會(huì)不做過(guò)很難講明白的……不過(guò)只要用過(guò)C51,你就會(huì)很少重新用匯編的了^_^哪怕有些要求比較嚴(yán)格的地方也可以用嵌入?yún)R編的方法來(lái)解決^_^

先用點(diǎn)時(shí)間熟悉一下C51,相信我,沒(méi)錯(cuò)的^_^

6樓: >>參與討論
bausrpgfba
謝謝,我以后會(huì)學(xué)C的。
我的設(shè)想存在的問(wèn)題。
  1:假如在任務(wù)5時(shí)發(fā)生了系統(tǒng)中斷。假如任務(wù)5之前的任務(wù)都不存在執(zhí)行條件,也得保存任務(wù)環(huán)境,然后再恢復(fù)任務(wù)環(huán)境,浪費(fèi)了很多時(shí)間。有沒(méi)有什么好辦法,讓任務(wù)5之前的判斷更快些(這些判斷條件包括時(shí)間性,IO端口性的)。
  2:這些判斷都在每個(gè)任務(wù)之前,被中斷了是不是不好,是不是應(yīng)該把這些判斷都寫(xiě)在系統(tǒng)中斷里面呢?

7樓: >>參與討論
mohanwei
首先要明確一點(diǎn),你編寫(xiě)的是“軟實(shí)時(shí)”嵌入式操作系統(tǒng)^_^
既然是純粹用軟件實(shí)現(xiàn)任務(wù)的調(diào)度,那在具體到某個(gè)項(xiàng)目的應(yīng)用上,是肯定沒(méi)有
while(1)
{
   task1();
   task2();
   ……
}
這種結(jié)構(gòu)快的了^_^

如果光針對(duì)這個(gè)問(wèn)題,那很簡(jiǎn)單,設(shè)置一個(gè)標(biāo)志就可以了,如果標(biāo)志為真,則保存;反之不保存……

你可以先多想一點(diǎn)……然后找個(gè)現(xiàn)成的來(lái)看看,比如說(shuō)ucos2(雖然最近這段時(shí)間很多網(wǎng)友對(duì)之深感憤慨,但是學(xué)一下它的思想還是不錯(cuò)的^_^)。如果一開(kāi)始就參考,很可能就會(huì)先入為主,最后做出的東東和人家的一樣了。

8樓: >>參與討論
bausrpgfba
謝謝mohanwei
光設(shè)置標(biāo)志應(yīng)該不行,因?yàn)樵谶M(jìn)行任務(wù)的判斷時(shí)很有可能會(huì)用到工作內(nèi)存。如果不進(jìn)行保護(hù)就會(huì)破壞被中斷任務(wù)的工作內(nèi)存。
   又發(fā)現(xiàn)了一個(gè)問(wèn)題,假如在執(zhí)行任務(wù)4時(shí)調(diào)用了一個(gè)子程序,執(zhí)行這個(gè)子程序時(shí)又調(diào)用了一個(gè)子程序,正執(zhí)行時(shí)發(fā)生了中斷,這時(shí)保護(hù)的內(nèi)容是不是只可以讓被中斷的這個(gè)子程序返回到調(diào)用它的子程序呢。而這個(gè)子程序可不可以返回到調(diào)用它的任務(wù)4呢,應(yīng)該可以吧。
   我買(mǎi)了本陳明計(jì)老師的SMALL RTOS51一書(shū),可是還是看不懂。更不敢去看USOS2了,

9樓: >>參與討論
terrence
可以,以前Unix就是用匯編寫(xiě)的

ADS編譯器手冊(cè)中的ADS developer manual中有Context SWITCH的ARM 匯編例子,我想可以幫樓主起步哈!

只要實(shí)現(xiàn)了Context SWITCH,以后就好辦了。想當(dāng)初Linus在X86上用匯編實(shí)現(xiàn)了兩個(gè)任務(wù)的Context SWITCH,然后加上定時(shí)器幫助后就成了Linux操作系統(tǒng)的最初雛形,這大大鼓舞了Linus做下去的決心,所以樓主加油!

10樓: >>參與討論
我是一只魚(yú)
佩服
此學(xué)術(shù)性問(wèn)題,我在精神上支持哈:)

我想,在學(xué)習(xí)OS上,我們是不是應(yīng)該更注重從算法上來(lái)研究好一點(diǎn)呢?而不必要把大部分時(shí)間花在設(shè)計(jì)代碼安排上.

個(gè)人見(jiàn)解哈^_^

11樓: >>參與討論
zxwwwwcom
其實(shí)可以看看UCOS的電子版的書(shū)。
其實(shí)可以看看UCOS的電子版的書(shū)。說(shuō)不定對(duì)你有幫助,SMALL RTOS51的堆棧結(jié)構(gòu)比較復(fù)雜,USOS2的結(jié)構(gòu)要簡(jiǎn)單些,www.netmcu.com有電子版的UCOS的書(shū),我在看了UCOS后也寫(xiě)了個(gè)任務(wù)管理器,看看可能對(duì)你有幫助。

12樓: >>參與討論
bausrpgfba
謝謝大家。
我再看看您們介紹的資料。

13樓: >>參與討論
mxp1122
挺好, 從無(wú)到有, 才真正鍛煉人
 
14樓: >>參與討論
buyihome
呵呵
 
15樓: >>參與討論
bausrpgfba
遇到了很多困難!
比如支持16個(gè)用戶任務(wù)。就會(huì)用掉2BYTE內(nèi)存。而且我想用支持位訪問(wèn)的字節(jié),可哪樣子,堆欠空間就會(huì)少了一些。哪人家支持255個(gè)用戶任務(wù)是怎么弄的呀?任務(wù)ID號(hào)用1BYTE應(yīng)該可以吧。
  假如任務(wù)4剛執(zhí)行完,主動(dòng)放棄CPU控制權(quán)。檢測(cè)任務(wù)5時(shí)發(fā)現(xiàn)5是一個(gè)被掛起的任務(wù),然后進(jìn)行5的任務(wù)環(huán)境恢復(fù)。在進(jìn)行恢復(fù)時(shí)發(fā)生了系統(tǒng)中斷,此時(shí)是繼續(xù)執(zhí)行任務(wù)5呢,還是進(jìn)行檢測(cè)比它優(yōu)先級(jí)高的任務(wù)呢。
  還有如何讓CPU知道哪些任務(wù)已經(jīng)被超時(shí)了呢。
  最后,關(guān)于任務(wù)的定時(shí)時(shí)間進(jìn)行檢測(cè),是怎么弄的呢。我的辦法是只要系統(tǒng)中斷節(jié)拍除以任務(wù)定時(shí)時(shí)間為整倍數(shù),就認(rèn)為此任務(wù)定時(shí)到了。可是很麻煩。
  請(qǐng)大家?guī)兔。?duì)于您的幫助我是不會(huì)忘記的。謝謝!

16樓: >>參與討論
husteiraul
挺好
 
參與討論
昵稱:
討論內(nèi)容:
 
 
相關(guān)帖子
想學(xué)嵌入式的請(qǐng)進(jìn)!
做過(guò)MIDI轉(zhuǎn)USB的大大進(jìn)來(lái)看看
求救:各位大蝦,誰(shuí)有BC4.5的編譯器
請(qǐng)教,Linux2.6.15內(nèi)核支持s3c2410液晶驅(qū)動(dòng)嗎
有沒(méi)有誰(shuí)用過(guò)AEDK5196仿真機(jī)?這個(gè)牌子是不是很古老?
免費(fèi)注冊(cè)為維庫(kù)電子開(kāi)發(fā)網(wǎng)會(huì)員,參與電子工程師社區(qū)討論,點(diǎn)此進(jìn)入


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