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
回复
提示