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

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

今天本人現(xiàn)場技術(shù)支持,在線解答所有人的有關(guān)操作系統(tǒng)問題。

作者:caluova 欄目:嵌入式系統(tǒng)
今天本人現(xiàn)場技術(shù)支持,在線解答所有人的有關(guān)操作系統(tǒng)問題。
哥哥今天高興,在線解答所有人的問題,有需要支持的請跟貼,或發(fā)新貼。

2樓: >>參與討論
coolJoe
感謝幫忙!
呵呵!先謝謝了!
我還是想問一下昨天發(fā)的那個smallRTOS的問題!
那段源程序在我發(fā)的下面那個帖子上!
我想問TaskFunction[i]為什么要強制轉(zhuǎn)換為uint16類型的變量!
還有這樣轉(zhuǎn)換后%256和/256得到的數(shù)據(jù)是什么意義?
初始化堆棧前*cp--=0的意義是什么?
再謝謝了!

3樓: >>參與討論
lczsx2000
牛B!
樓主大蝦,我對linux內(nèi)核關(guān)于SMP處理的技術(shù)一直比較模糊,請給我說說。
1:說說我沒有操作系統(tǒng)的時候我應該怎么實現(xiàn)多處理器執(zhí)行同一段函數(shù)代碼?
2:處理器應該具有哪些硬件電路才能真正支持SMP的操作系統(tǒng)?

4樓: >>參與討論
caluova
RE:coolJoe
就你這段程序回答你上述兩個問題:
    *cp++ = ((uint16)(TaskFuction[0])) % 256;
    SP = (uint8) cp;
    *cp = ((uint16)(TaskFuction[0])) / 256

%256和/256分別是求除法的余數(shù)和除法的得數(shù),
用任何一個16位數(shù)%256,得到的是余數(shù),也就是舍棄了16位數(shù)的高8位獲得低8位,
同樣的道理,用16位數(shù)/0x256,得到的是除法的得數(shù),也就是16位數(shù)的高8位。
強制轉(zhuǎn)換是為了上述計算。

用在你這里,第一句表示獲得TaskFuction[0]的低8個字節(jié),第三句表示獲得高8個字節(jié),
其最終目的是把TaskFuction[0]的低8字節(jié)存在8位指針*cp++的地方,高8字節(jié)存在*cp的地方

你這個堆棧是向下生長的,一般地講,除了數(shù)據(jù)指針,堆棧指針之外還要對有傳遞寄存器初始化,*cp--=0應該是對參數(shù)傳遞寄存器的初始化,具體還要看你用的處理器和進程控制塊的數(shù)據(jù)結(jié)構(gòu)。

5樓: >>參與討論
caluova
re :lczsx2000
    linux中SMP是以進程為單位進行處理的,只有當系統(tǒng)中有多個進程時,分別分配給不同的處理器進行處理,這種技術(shù)才有意義。
    因為進程的空間是相互獨立的,所以理論上可以在多CPU上同時處理多個進程,需要解決的僅僅是對內(nèi)存硬件訪問的互斥、緩存和內(nèi)存的一致性等問題。簡單講就是這樣。
    若你不跑操作系統(tǒng),則表明你所處理的事情本質(zhì)上還是單線程的,雖然邏輯上你可能會做多件事情。所以應用SMP也就沒有什么意義。
    若你的目的是做冗余備份系統(tǒng),則完全不能套用到SMP中來,因為SMP系統(tǒng)和冗余系統(tǒng)的區(qū)別是SMP是多CPU共享內(nèi)存,而冗余系統(tǒng)是多CPU,多內(nèi)存,相互之間可以獨立同步運行。
    處理器至少要具備cache和MMU才能支持SMP的操作系統(tǒng),硬件上,總線要求能并在一起。

6樓: >>參與討論
coolJoe
有個地方問一下!
*cp++是不是應該是先*cp,再++,所以我覺得應該是TaskFuction[0]的低8字節(jié)存在8位指針*cp的地方,高8字節(jié)存在*cp++的地方!
不知道是不是這個樣子的!實際SP指向的是高8字節(jié)的地方!


7樓: >>參與討論
caluova
RE
你說的沒錯,*cp++是CP所指地址的下兩個字節(jié),這個我在上面已經(jīng)說過了,不知道你還有什么不明確的?

8樓: >>參與討論
coolJoe
剛才忘加一句了!
那我認為這個堆棧應該是一個向上增長型的。
不知是不是!

9樓: >>參與討論
terrence
同受益了
 
10樓: >>參與討論
yewuyi
不懂OS,問一個菜問題
假設使用ARM,用芯片的兩個IO口,電路結(jié)構(gòu)如下:

       IO1————電阻————電容————GND
                         |
                         |
                        IO2

要求:當IO1輸出高電平的時候,對電容充電,然后不斷的讀IO2管腳狀態(tài),當IO2從低電平向高電平跳變的時候,ARM準確計算出電容此時的充電時間。

簡單說應當是一個獨占的任務(充電計時),如果用OS調(diào)度,以保證別的任務多線程執(zhí)行的時候,該任務能正確執(zhí)行???

11樓: >>參與討論
DaytoDay
請看看陳明計的這個例子
#include "config.h"
#include "display.h"

void TaskA(void);
void TaskB(void);
void TaskC(void);

void main(void)
{
    OSInit();

    PC_DispClrScr(DISP_FGND_WHITE + DISP_BGND_BLACK);
    PC_DispStr(15,  0, "Small RTOS(51), the Real-Time Kernel(For Keil c51)", DISP_FGND_WHITE + DISP_BGND_RED + DISP_BLINK);
    PC_DispStr(35,  1, "ChenMingJi", DISP_FGND_WHITE);
    PC_DispStr(35,  3, "EXAMPLE #3", DISP_FGND_WHITE);

    TMOD = (TMOD & 0XF0) | 0X01;
    TL0 = 0x0;
    TH0 = 0x0;
    TR0 = 1;
    ET0 = 1;
    TF0 = 0;

    OSTaskCreate(TaskA, NULL, 0);
    OSTaskCreate(TaskB, NULL, 1);
    OSTaskCreate(TaskB, NULL, 2);
    OSTaskCreate(TaskB, NULL, 3);
    OSTaskCreate(TaskB, NULL, 4);
    OSTaskCreate(TaskB, NULL, 5);
    OSTaskCreate(TaskB, NULL, 6);
    OSTaskCreate(TaskB, NULL, 7);
    OSTaskCreate(TaskB, NULL, 8);
    OSTaskCreate(TaskB, NULL, 9);

    while(1)
    {
        PCON = PCON | 0x01;                     /* CPU進入休眠狀態(tài) */
    }
}

uint8 ShowChar;

void TaskA(void)
{
    uint8 x,y;
    
    while (1)
    {
        OSWait(K_SIG,0);
        x = random(80);
        y = random(20);
        PC_DispChar(x, y + 5, ShowChar, DISP_FGND_LIGHT_GRAY);    
    }    
}


void TaskB(void)
{
    while (1)
    {
        ShowChar = OSRunningTaskID()+'0';
        OSSendSignal(0);
        OSWait(K_TMO,1);
    }    
}
/*
void TaskC(void)
{
    uint8 x,y;
    while (1)
    {
        x = random(80);
        y = random(20);
                PC_DispClrScr(DISP_FGND_WHITE + DISP_BGND_BLACK);

    }
}
我把最后一個任務該成TASKC,任務數(shù)沒增加,只是最后一個任務變了變,結(jié)果單步執(zhí)行的時候,到建立最后一個任務的時候就開始運行了,請分析以下原因

12樓: >>參與討論
老狼
我想問一個問題
您認為對于arm,linux or wince那個更有前途。
如果做工控,哪個實時操作系統(tǒng)比較適合,rtlinux,vxwork,ucos or threadx?

13樓: >>參與討論
老狼
目前您都用過那些操作系統(tǒng)
做過什么樣的設備,能夠舉例說明一下,如何選擇不同的操作系統(tǒng)!

14樓: >>參與討論
caluova
RE
不好意思,白天上班,晚上繼續(xù)解答各位的問題!

首先回復yewuyi:

    你這實際上是模仿西格碼-德爾塔AD轉(zhuǎn)換的土辦法,早年我用51的定時器做過,當電容電阻參數(shù)設的比較大時,誤差基本能夠接受,若用OS的TIMER來做,是有些問題的,因為OSTimer通常是以1ms為基本單位,基本上你要采集1000個單位,也就是1秒以上,你的數(shù)據(jù)才有些意義,而這樣以來電容要很大。前面講的單片機定時器則精度遠高于此,故可以勝任。
    如果實在要做可以試試,計數(shù)器不要放在普通的進程里,要放在OS的TICK里即可,可以做到?jīng)]有誤差。但TICK的間隔要計算準確,因為有時候說是1ms實際卻是1.00幾ms。
        

15樓: >>參與討論
caluova
RE:DaytoDay
RE:DaytoDay

你這里只有一部分代碼,創(chuàng)建任務的函數(shù)實現(xiàn)你沒有列出來,因此我只能猜測:

在你的 OSTaskCreate里面,在初始化進程堆棧,初始化進程控制塊之后,應該有Hook這一操作,也就是講進程暫時掛起,你檢查看看有沒有,確保你創(chuàng)建的所有進程都先掛起。

16樓: >>參與討論
lczsx2000
樓主還是沒有講出來啊
    你講的這些我都知道,而且自認為精通了C。我現(xiàn)在要在雙core的DSP上做視頻信號處理,我們知道做視頻是不能上操作系統(tǒng)的(你偏要上我也沒辦法),有的人這樣做:一個core跑uclinux,一個跑編解碼,但是這樣的話,效率提不上來。所以我們這樣做:兩個都跑視頻編解碼,一個做奇場,一個做偶場。但是這樣以來開發(fā)難度很大,我想問你有什么好的原則建議沒有?
    我現(xiàn)在已經(jīng)看了三個os的源碼了,到現(xiàn)在為止看了一年多的linux源碼,前面兩個不是多用戶的,你也可以向我提一些操作系統(tǒng)的問題!如果我不知道的話,我還可以繼續(xù)看下去來回復你。

17樓: >>參與討論
terrence
牛啊~~
 
18樓: >>參與討論
thinkey
pv操作
用來做同步的話需要保持其原語性質(zhì)嗎?

參與討論
昵稱:
討論內(nèi)容:
 
 
相關(guān)帖子
Altera下載線
轉(zhuǎn)讓:DOC,M-system 288M
請各位幫忙!使用46R23時遇到很頭痛的問題.
請問ATMEGA8L-8PI,可以用什么燒錄器編譯?
再次強烈建議21ic取消highend的版主資格
免費注冊為維庫電子開發(fā)網(wǎng)會員,參與電子工程師社區(qū)討論,點此進入


Copyright © 1998-2006 m.58mhw.cn 浙ICP證030469號