|
|||||||||||
| 技術(shù)交流 | 電路欣賞 | 工控天地 | 數(shù)字廣電 | 通信技術(shù) | 電源技術(shù) | 測控之家 | EMC技術(shù) | ARM技術(shù) | EDA技術(shù) | PCB技術(shù) | 嵌入式系統(tǒng) 驅(qū)動編程 | 集成電路 | 器件替換 | 模擬技術(shù) | 新手園地 | 單 片 機 | DSP技術(shù) | MCU技術(shù) | IC 設(shè)計 | IC 產(chǎn)業(yè) | CAN-bus/DeviceNe |
請教C51中一個指針的問題 |
| 作者:pq113_6 欄目:單片機 |
在看SMALL RTOS時看到這行程序:*((uint8 data * data *)SP) = Ret;兩個data *是什么意思啊? |
| 2樓: | >>參與討論 |
| 作者: coke 于 2005/3/20 9:43:00 發(fā)布:
re *((uint8 data * data *)SP) = Ret 這是給一個指針式指針賦值. 指針變量的定義﹕ 數(shù)據(jù)類型[存儲類型1] * [存儲類型2] 標識符 現(xiàn)在應(yīng)該知道了吧. uint8是指針變量所指向變量的類型. 第一個data是表示該指針指向data空間. 第二各DATA是表示該指針位于data空間 |
|
| 3樓: | >>參與討論 |
| 作者: pq113_6 于 2005/3/21 8:25:00 發(fā)布:
謝謝,不過我還看過另一個版本 定義一個指向xdata空間的變量,unsigned CHAR xdata * data px;這里面沒有兩個“*”? |
|
| 4樓: | >>參與討論 |
| 作者: coke 于 2005/3/21 10:11:00 發(fā)布:
后一個*應(yīng)該是強制轉(zhuǎn)換吧﹗ |
|
| 5樓: | >>參與討論 |
| 作者: pq113_6 于 2005/3/21 17:08:00 發(fā)布:
? 整個是這樣: SP++; *((uint8 data * data *)SP) = Ret; 它的過程應(yīng)該是壓棧,SP已經(jīng)是堆棧指針了?要不就是一個地址?我沒找到SP定義的地方,也可能就是一個void型數(shù)據(jù),在使用時在重新分配空間?不知道我理解的對不對? |
|
| 6樓: | >>參與討論 |
| 作者: 農(nóng)民講習所 于 2005/3/21 19:38:00 發(fā)布:
疑問? SP應(yīng)該是idata指針才對,這樣所有51系列都可以用。如果只是data,只能51以下才可以,256字節(jié)的就不行了。是不是BUG? |
|
| 7樓: | >>參與討論 |
| 作者: pq113_6 于 2005/3/22 8:28:00 發(fā)布:
不可能是BUG吧? 我是在small_rtos1.12.1源代碼中看到的。里面好多這樣的處理,注釋是“使用堆棧是為了使函數(shù)具有重入性”。不是很明白為什么這樣處理,呵呵。 |
|
| 8樓: | >>參與討論 |
| 作者: 農(nóng)民講習所 于 2005/3/22 9:25:00 發(fā)布:
SP就是51堆棧指針寄存器,REG51.H中有 該用*( unsigned CHAR data * idata *)SP = Ret才對。Ret是個8位指針。 用*( unsigned CHAR idata *)SP = (unsigned CHAR)Ret;更好,對后面進行強制轉(zhuǎn)換才符合理念,前面描述也符合51硬件設(shè)備描述。 還是該用idata描述SP指針! |
|
| 9樓: | >>參與討論 |
| 作者: coke 于 2005/3/22 14:02:00 發(fā)布:
re small rtos沒搞過。不過在uc/os ii中. 每個任務(wù)都有自己的堆棧區(qū). 所以當任務(wù)切換時候.堆棧區(qū)也要改哦。 |
|
| 10樓: | >>參與討論 |
| 作者: pq113_6 于 2005/3/22 16:58:00 發(fā)布:
我是這樣理解的 SP中的內(nèi)容就相當于一個指針,*( unsigned CHAR data * data *)SP是將該內(nèi)容強制轉(zhuǎn)化為指向data區(qū)的指針,并且該內(nèi)容應(yīng)該小于0x80。而農(nóng)民講習所講的*( unsigned CHAR data * idata *)SP = Ret也應(yīng)該是這樣,這樣堆棧深度更深。不過small_rtos可能更多得考慮那些小于256字節(jié)RAM的單片機(如51)。還有Ret不是指針吧?至于*( unsigned CHAR idata *)SP = (unsigned CHAR)Ret更好,我有點不明白了,這樣豈不讓SP指向idata區(qū)了嗎? |
|
| 11樓: | >>參與討論 |
| 作者: 12864 于 2005/3/22 19:58:00 發(fā)布:
指向idata區(qū)更好一些,因為idata區(qū)包含了data區(qū) 但是這樣做的意義何在呢? |
|
| 12樓: | >>參與討論 |
| 作者: pq113_6 于 2005/3/23 9:18:00 發(fā)布:
可能是為了更好的兼容性 對于那些只有128字節(jié)RAM的單片機來說,這樣做兼容性更好。(我是這樣理解的)。 |
|
| 13樓: | >>參與討論 |
| 作者: 林鳳 于 2005/3/24 9:20:00 發(fā)布:
暈,云里霧里! 看書不是更好么? |
|
| 14樓: | >>參與討論 |
| 作者: pq113_6 于 2005/3/24 9:34:00 發(fā)布:
你指的是看哪本書啊? 怎么是云里霧里呢?那本書有這么詳細地介紹指針的用法? |
|
|
|
| 免費注冊為維庫電子開發(fā)網(wǎng)會員,參與電子工程師社區(qū)討論,點此進入 |
Copyright © 1998-2006 m.58mhw.cn 浙ICP證030469號 |