|
|||||||||||
| 技術(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 |
請(qǐng)教keil 51上移植UCOS的重入堆棧問(wèn)題? |
| 作者:lucidmask 欄目:單片機(jī) |
有一件事不明白,就是關(guān)于重入堆棧。我的理解是整個(gè)程序只有一個(gè)重入堆棧 也就是說(shuō)所有任務(wù)共用一個(gè)重入堆棧。不知是不是這樣?如果是這樣會(huì)不會(huì)發(fā)生任務(wù)間的堆棧覆蓋?比如,task1中調(diào)用的可重入函數(shù)fuc1(...)在往重入堆棧中保存參數(shù)過(guò)程中被中斷,中斷后task2為當(dāng)前任務(wù)開始執(zhí)行,task2中的可重入函數(shù)fuc2(...)在在往重入堆棧中存參數(shù)過(guò)程中也被中斷,中斷后task1為當(dāng)前任務(wù)繼續(xù)執(zhí)行,這樣的話fuc1()繼續(xù)保存參數(shù),不就覆蓋了fuc2()的參數(shù)了嗎? 不知道我說(shuō)的明白不明白? 請(qǐng)各位指點(diǎn)一下!謝謝! |
| 2樓: | >>參與討論 |
| 作者: puwlive 于 2005/7/7 8:53:00 發(fā)布:
不懂! |
|
| 3樓: | >>參與討論 |
| 作者: xwj 于 2005/7/7 10:10:00 發(fā)布:
所謂“堆!本褪遣煌5耐厦娑,把舊的放在下面,踩在腳底下 隨便上面的人擺弄什么都不會(huì)影響下面的 等上面的人走了下面的才會(huì)彈出來(lái),這時(shí)又輪到舊的表演了 整個(gè)程序只有一個(gè)重入堆棧,這個(gè)重入堆棧是一段RAM啊,由堆棧指針確定訪問(wèn)的到底是那個(gè)字節(jié) 堆棧的每次壓棧出棧都會(huì)修改堆棧指針,所以是雖然相同的語(yǔ)句操作的卻是不同的RAM “task1中調(diào)用的可重入函數(shù)fuc1(...)在往重入堆棧中保存參數(shù)過(guò)程中被中斷” 操作系統(tǒng)不會(huì)讓這種現(xiàn)象發(fā)生的,實(shí)際的中斷過(guò)程是:新的中斷發(fā)生--保存現(xiàn)場(chǎng)(壓棧)--執(zhí)行中斷程序--恢復(fù)現(xiàn)場(chǎng)(出棧),在中斷中是不會(huì)影響到原來(lái)的數(shù)據(jù)的 由于每次重入都會(huì)占用堆?臻g,所以程序不能無(wú)限制的嵌套,否則到一定程度堆棧溢出,程序就亂套了(程序跑飛了) |
|
| 4樓: | >>參與討論 |
| 作者: lucidmask 于 2005/7/8 13:19:00 發(fā)布:
謝謝xwj 你說(shuō)的我都明白了,但我還是認(rèn)為會(huì)有問(wèn)題.我看的是楊屹的代碼,不知你看過(guò)沒(méi)有,代碼中是保存模擬棧指針(?C_XBP)到任務(wù)棧中的,并提到每個(gè)任務(wù)一個(gè)模擬棧,由KEIL自動(dòng)處理。我不明白的是,Keil不是只有一個(gè)模擬棧嗎?怎么會(huì)每個(gè)任務(wù)(一個(gè)函數(shù))一個(gè)呢? http://www.startmcu.com/freeresource/51_ucosii.htm |
|
| 5樓: | >>參與討論 |
| 作者: lucidmask 于 2005/7/8 17:16:00 發(fā)布:
終于明白了 |
|
| 免費(fèi)注冊(cè)為維庫(kù)電子開發(fā)網(wǎng)會(huì)員,參與電子工程師社區(qū)討論,點(diǎn)此進(jìn)入 |
Copyright © 1998-2006 m.58mhw.cn 浙ICP證030469號(hào) |