1、小弟現(xiàn)在在學(xué)習(xí)C8051單片機(jī),芯片是C8051cF310,用KEIL C51開發(fā).現(xiàn)在很奇怪C程序編譯后main()的地址分配從0x0003開始,書上說中斷入口的地址從0x0003到0x00AB,這樣就把中斷向量地址占去了.需要怎么設(shè)置嗎?
2、還有51工作寄存器的問題,資料說函數(shù)的參數(shù)、返回值、局部變量地址都會保存在工作寄存器組,還有函數(shù)跳轉(zhuǎn)的時候也是把局部變量保存在工作寄存器組,而很多函數(shù)可以共用一個工作寄存器組,這樣空間不夠怎么辦?
3、函數(shù)跳轉(zhuǎn)的時候局部變量的保存一般會用軟堆棧作入棧出棧,C8051是否用寄存器保存局部變量?
4、如果是從函數(shù)跳轉(zhuǎn)到中斷,因?yàn)椴淮_定是從哪個函數(shù)跳轉(zhuǎn),怎么寫局部變量的保存?
C8051高手幫我看看這個問題
全部回復(fù)(8)
正序查看
倒序查看
@gugu_1982
匯編會自動分配地址嗎?這些我還真不懂,勞您指教了
我想第六貼應(yīng)指C編譯器.
不知何時我已把匯編忘得差不多了,為何還要用匯編?有這個心要不?
如果需要一個變量"i",我們不需要關(guān)心這個變量存在那個地方,只知道有這個變量就行了.
如:
{
unsigned char i,j,k; //定義三個變量
i=read_adc(0);
j=reda_adc(1);
k=i+j;
out(k);
}
在程序中我們不需要知道變量存在的地址在哪,就算知道了也用不著,我們只需要結(jié)果就可以了.
匯編我認(rèn)為最適合初學(xué)單片機(jī)并且是沒學(xué)過C語言與自學(xué)的人.
不知何時我已把匯編忘得差不多了,為何還要用匯編?有這個心要不?
如果需要一個變量"i",我們不需要關(guān)心這個變量存在那個地方,只知道有這個變量就行了.
如:
{
unsigned char i,j,k; //定義三個變量
i=read_adc(0);
j=reda_adc(1);
k=i+j;
out(k);
}
在程序中我們不需要知道變量存在的地址在哪,就算知道了也用不著,我們只需要結(jié)果就可以了.
匯編我認(rèn)為最適合初學(xué)單片機(jī)并且是沒學(xué)過C語言與自學(xué)的人.
0
回復(fù)
@abing
我想第六貼應(yīng)指C編譯器.不知何時我已把匯編忘得差不多了,為何還要用匯編?有這個心要不?如果需要一個變量"i",我們不需要關(guān)心這個變量存在那個地方,只知道有這個變量就行了.如:{unsignedchari,j,k; //定義三個變量i=read_adc(0);j=reda_adc(1);k=i+j;out(k);}在程序中我們不需要知道變量存在的地址在哪,就算知道了也用不著,我們只需要結(jié)果就可以了.匯編我認(rèn)為最適合初學(xué)單片機(jī)并且是沒學(xué)過C語言與自學(xué)的人.
謝謝樓上的解釋,支持一下,樓主的主題是C.現(xiàn)在8位單片機(jī)的ROM和RAM已經(jīng)做得很大,并且可以選擇的型號也很多.在8位機(jī)能應(yīng)用的領(lǐng)域,基本上資源都夠用.在能用C的情況下極少再用匯編,這是我的個人看法,有不當(dāng)之處海函.
0
回復(fù)