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

登錄 免費注冊 首頁 | 行業(yè)黑名單 | 幫助
維庫電子市場網(wǎng)
技術(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樓: >>參與討論
張明峰
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
一點補充
“堆棧具體的位置將被在內(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
謝謝張工和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
small和tiny模式
張工:在small模式下缺省的變量默認(rèn)的被放在RAM下,在什么模式下缺省變量默認(rèn)的放在Z_RAM區(qū)?對于同一款MCU我選擇tiny和small除了缺省變量的默認(rèn)方式不同還有什么區(qū)別?


6樓: >>參與討論
JerryBJ
對的
對于JL3,所有的變量,棧都在僅有的direct page RAM中映射。

可以。只要設(shè)置不同的TCHx值就可以了。

7樓: >>參與討論
spming
我的qq是373305104我想和你再聊聊
Jerry

8樓: >>參與討論
mc9s08aw60
small和tiny在那些方面不同呢?
是RAM分配嗎?

9樓: >>參與討論
JerryBJ
我沒有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
大家看看
利用一個定時器的兩個通道的輸出比較功能能不能產(chǎn)生兩個頻率不同的脈沖信號?


Jerry你能告訴我為什么可以嗎?我覺得好像不行呀,定時器只有一個通道的只不過是和定時器的值在比較但我的值當(dāng)它的值和定時器的值一致的時候執(zhí)行動作,但是它的頻率是不好改變的(換句話說兩個通道的頻率取決于定時器的頻率)。


11樓: >>參與討論
mc9s08aw60
JerryBJ是不是以前經(jīng)常上C51BBS???
在C51BBS上看到過。

12樓: >>參與討論
張明峰
謝謝Jerry的指正
所有變量區(qū)間之外全部是堆棧空間。

13樓: >>參與討論
sillboy
學(xué)習(xí)了
 
14樓: >>參與討論
totty.ning
堆棧地址默認(rèn)是從$0ff開始,在程序中自己可以另外設(shè)定棧底
 
15樓: >>參與討論
yongtree
長見識了
 
參與討論
昵稱:
討論內(nèi)容:
 
 
相關(guān)帖子
求codewarrior 3.0 的 licence
誠拓科技Freescale MPC8247/8248開發(fā)套件
freescale單片機(jī)中斷號是怎么定的?
請高手幫幫我看看這個ad小程序片段.
code warrior 3.0中預(yù)編譯的KEY WORD 是什么
免費注冊為維庫電子開發(fā)網(wǎng)會員,參與電子工程師社區(qū)討論,點此進(jìn)入


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