|
|||||||||||
| 技術(shù)交流 | 電路欣賞 | 工控天地 | 數(shù)字廣電 | 通信技術(shù) | 電源技術(shù) | 測控之家 | EMC技術(shù) | ARM技術(shù) | EDA技術(shù) | PCB技術(shù) | 嵌入式系統(tǒng) 驅(qū)動編程 | 集成電路 | 器件替換 | 模擬技術(shù) | 新手園地 | 單 片 機(jī) | DSP技術(shù) | MCU技術(shù) | IC 設(shè)計 | IC 產(chǎn)業(yè) | CAN-bus/DeviceNe |
堆棧從什么地方開始怎么堆? |
| 作者:spming 欄目:單片機(jī) |
1.我現(xiàn)在在使用MC68HC908JL8這款MCU現(xiàn)在我發(fā)現(xiàn)我的變量大于大概50個字節(jié)的時候編譯是沒有問題但是連接就不通過。 我后來在PRM文件中把RAM的地址修改了一下: 默認(rèn) Z_RAM 0x60-0xff RAM 0x100-0x15F 我修改后 Z_RAM 0x60-0xff RAM 0xb0-0x15F 這個時候我的連接就沒有問題了,現(xiàn)在我想知道這樣修改是不是可以的,可以的話這是為什么(也就是Z_RAM 和RAM的區(qū)別 )? 2.我想用內(nèi)部的RC振蕩怎么操作? 3.堆棧是從哪里開始的?可不可以改變堆棧的初始地址怎么改變呢? |
| 2樓: | >>參與討論 |
| 作者: 張明峰 于 2007/2/26 16:05:00 發(fā)布:
PRM文件可以修改但不能亂改 Z_RAM和RAM肯定是有區(qū)別的,他們的地址分配一般不能重疊。象上面的改法,這兩個區(qū)域在0xb0-0xff間就重疊了,很容易出問題。 你的這個問題原因是沒有充分利用0x00-0xffRAM空間。在small項目模式下,缺省變量都被放在RAM區(qū)。如果要將變量放到Z_RAM區(qū),必須在定義前特別聲明,例如: //============================================================== // Following data are declared in the direct addressing area // for FAST access (address < 0x100) //============================================================== #pragma DATA_SEG SHORT MY_ZEROPAGE //direct addressing data segment byte hour, minute, second, year, month, day; 普通RAM區(qū)的變量聲明如下: //============================================================== // Following data are declared in the common data area // (address >= 0x100) //============================================================== #pragma DATA_SEG DEFALUT //default data segment volatile byte tempBuff[16]; JL8只能運行在外部晶體振蕩或外部RC振蕩,不能運行在內(nèi)部RC振蕩模式下。其片內(nèi)RC振蕩時鐘源只針對看門狗COP和SIM模塊,不能拿來做程序運行的時鐘源。 堆棧的長度可以自由修改,在PRM文件中有一行“STACKSIZE 0x??”,其中的??代表堆棧長度,按實際需要用戶可以隨意修改。堆棧具體的位置將被在內(nèi)存RAM的最高端。 |
|
| 3樓: | >>參與討論 |
| 作者: JerryBJ 于 2007/2/26 19:19:00 發(fā)布:
一點補充 “堆棧具體的位置將被在內(nèi)存RAM的最高端! ——據(jù)我觀察,棧的安排是這樣的,從RAM_START開始,首先安排全局變量和靜態(tài)變量,緊接著就是?臻g了。比如在small模式下,RAM的起始地址RAM_START=0x0100,程序中有16個全局變量,STACK_SIZE=0x30,則內(nèi)存映射如下: address size 0x0100 0x10 ; GLOBAL 0x0110 0x30 ; stack 0x0140 to RAM_END ; un-used 而不是從RAM最高端倒著往前映射。 |
|
| 4樓: | >>參與討論 |
| 作者: spming 于 2007/2/27 8:46:00 發(fā)布:
謝謝張工和JerryBJ不過還有一個問題 我發(fā)現(xiàn)在JL3E里面只有Z_RAM(因為它的RAM總共只有128字節(jié)),而沒有RAM這一項,這個時候變量是不是就自動在Z_RAM中分配嗎?不需要定義 #pragma DATA_SEG SHORT MY_ZEROPAGE //direct addressing data segment byte hour, minute, second, year, month, day; 利用一個定時器的兩個通道的輸出比較功能能不能產(chǎn)生兩個頻率不同的脈沖信號? |
|
| 5樓: | >>參與討論 |
| 作者: spming 于 2007/2/27 8:57:00 發(fā)布:
small和tiny模式 張工:在small模式下缺省的變量默認(rèn)的被放在RAM下,在什么模式下缺省變量默認(rèn)的放在Z_RAM區(qū)?對于同一款MCU我選擇tiny和small除了缺省變量的默認(rèn)方式不同還有什么區(qū)別? |
|
| 6樓: | >>參與討論 |
| 作者: JerryBJ 于 2007/2/27 9:02:00 發(fā)布:
對的 對于JL3,所有的變量,棧都在僅有的direct page RAM中映射。 可以。只要設(shè)置不同的TCHx值就可以了。 |
|
| 7樓: | >>參與討論 |
| 作者: spming 于 2007/2/27 9:09:00 發(fā)布:
我的qq是373305104我想和你再聊聊 Jerry |
|
| 8樓: | >>參與討論 |
| 作者: mc9s08aw60 于 2007/2/27 9:15:00 發(fā)布:
small和tiny在那些方面不同呢? 是RAM分配嗎? |
|
| 9樓: | >>參與討論 |
| 作者: JerryBJ 于 2007/2/27 9:59:00 發(fā)布:
我沒有QQ,呵呵 有MSN,不過也經(jīng)常不在線。sad_shylion@hotmail.com。 Small和Tiny的區(qū)別其實就是RAM的分配。Small把全局變量和棧(局部變量)都放在0頁以上,而tiny則相反。 還有一點區(qū)別特別值得注意:在Tiny模式下,指針的長度默認(rèn)為8bit。在Small模式下,指針長度默認(rèn)為16bit。 * - 本貼最后修改時間:2007-2-27 10:04:16 修改者:JerryBJ |
|
| 10樓: | >>參與討論 |
| 作者: spming 于 2007/2/27 11:13:00 發(fā)布:
大家看看 利用一個定時器的兩個通道的輸出比較功能能不能產(chǎn)生兩個頻率不同的脈沖信號? Jerry你能告訴我為什么可以嗎?我覺得好像不行呀,定時器只有一個通道的只不過是和定時器的值在比較但我的值當(dāng)它的值和定時器的值一致的時候執(zhí)行動作,但是它的頻率是不好改變的(換句話說兩個通道的頻率取決于定時器的頻率)。 |
|
| 11樓: | >>參與討論 |
| 作者: mc9s08aw60 于 2007/2/27 11:18:00 發(fā)布:
JerryBJ是不是以前經(jīng)常上C51BBS??? 在C51BBS上看到過。 |
|
| 12樓: | >>參與討論 |
| 作者: 張明峰 于 2007/2/27 15:51:00 發(fā)布:
謝謝Jerry的指正 所有變量區(qū)間之外全部是堆棧空間。 |
|
| 13樓: | >>參與討論 |
| 作者: sillboy 于 2007/3/13 13:23:00 發(fā)布:
學(xué)習(xí)了 |
|
| 14樓: | >>參與討論 |
| 作者: totty.ning 于 2007/3/17 13:39:00 發(fā)布:
堆棧地址默認(rèn)是從$0ff開始,在程序中自己可以另外設(shè)定棧底 |
|
| 15樓: | >>參與討論 |
| 作者: yongtree 于 2007/3/21 23:32:00 發(fā)布:
長見識了 |
|
|
|
| 免費注冊為維庫電子開發(fā)網(wǎng)會員,參與電子工程師社區(qū)討論,點此進(jìn)入 |
Copyright © 1998-2006 m.58mhw.cn 浙ICP證030469號 |