|
|||||||||||
| 技術(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) |
| 2樓: | >>參與討論 |
| 作者: coldra 于 2006/4/15 19:14:00 發(fā)布:
用匯編寫(xiě)?真有挑戰(zhàn)性 |
|
| 3樓: | >>參與討論 |
| 作者: mohanwei 于 2006/4/15 19:34:00 發(fā)布:
看得有點(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 于 2006/4/15 20:32:00 發(fā)布:
謝謝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 于 2006/4/15 21:29:00 發(fā)布:
說(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 于 2006/4/18 11:24:00 發(fā)布:
謝謝,我以后會(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 于 2006/4/18 17:49:00 發(fā)布:
首先要明確一點(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 于 2006/4/18 21:39:00 發(fā)布:
謝謝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 于 2006/4/19 19:57:00 發(fā)布:
可以,以前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ú) 于 2006/4/19 20:45:00 發(fā)布:
佩服 此學(xué)術(shù)性問(wèn)題,我在精神上支持哈:) 我想,在學(xué)習(xí)OS上,我們是不是應(yīng)該更注重從算法上來(lái)研究好一點(diǎn)呢?而不必要把大部分時(shí)間花在設(shè)計(jì)代碼安排上. 個(gè)人見(jiàn)解哈^_^ |
|
| 11樓: | >>參與討論 |
| 作者: zxwwwwcom 于 2006/4/20 9:23:00 發(fā)布:
其實(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 于 2006/4/20 11:42:00 發(fā)布:
謝謝大家。 我再看看您們介紹的資料。 |
|
| 13樓: | >>參與討論 |
| 作者: mxp1122 于 2006/4/25 12:20:00 發(fā)布:
挺好, 從無(wú)到有, 才真正鍛煉人 |
|
| 14樓: | >>參與討論 |
| 作者: buyihome 于 2006/4/29 16:53:00 發(fā)布:
呵呵 |
|
| 15樓: | >>參與討論 |
| 作者: bausrpgfba 于 2006/5/3 15:33:00 發(fā)布:
遇到了很多困難! 比如支持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 于 2007/1/18 12:53:00 發(fā)布:
挺好 |
|
| 免費(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) |