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