为什么一般用keil写51程序不用设置堆栈信息,默认是什么样的?

为什么一般用keil写51程序不用设置堆栈信息,默认是什么样的?,第1张

1 系统复位默认 SP = 0x07\x0d\x0a2 在写C51程序时,有个STARTUP.A51启动文件,文件后面有一句 MOV SP,#?STACK-1\x0d\x0a 这句就是根据你的静态内存使用量来把SP定位到你所有全局或局部变量的最后面\x0d\x0a3 ?STACK是个数据段的段名,因为这个段名很特殊,所以这个段始终被连接器最后定位,也就是 说你的所有变量的存储地址都被确定好了以后,这个段的存储才最后被确定,自然#?STACK也就在最后了,又因为SP是先加后用,所以就有 #?STACK-1而不会有问题,地址#?STACK-1里面存的就是你的某个变量信息\x0d\x0a4 当发生第一次函数调用时,16位地址会存在#?STACK和#?STACK+1里,此时SP = #?STACK+1

#include<reg51.h>

#include<intrins.h>

#define uchar unsigned char

void delay(void)

{

uchar i,j

for(i=0i<150i++)

for(j=0j<240j++)

}

main()

{

uchar led,i,j

while(1)

{

for(i=0i<8i++)

{

led=0xfe<<i

for(j=0j<8-ij++)

{

P0=led

led=_crol_(led,1)

delay()

}

}

}

}

相信很多初学者都有同样的疑问,也有同样的希望。就是用C++语言来写单片机程序的源代码。现在我来解释一下单片机的源代码程序几乎没有人用C++来写的。\x0d\x0a1. 假设一下你现在用C++写完了一个程序代码。那么你要让单片机认识必须要编译吧,对吧 。请问你有合适的编译软件来编译你的代码吗?\x0d\x0a2. 就算有编译器能编译,你能保证它的代码效率一定能给单片机用吗?\x0d\x0a单片机的ROM是K级的水平,执行指令的速度也远远小于PC。绝对不能和PC机相比的。这个就决定了单片机编程时很多时候要考虑它的代码效率和代码大小问题。所以一般情况下对于单片机编程我们之用汇编语言或者C语言。就算是用C写程序也要注意代码的效率等问题。\x0d\x0a还有就是只有很大型的项目及应用程序开发才有可能有C++来写程序。一般的系统文件,应用程序都是用C来写的。有的系统代码甚至要用汇编语言来写。\x0d\x0a举个生活中的例子:如果你从家里去公司上班你一般的出行方式是什么?\x0d\x0a1.坐公车 2.骑车 3.自己开车 4.坐地铁 5.走过去。如果谁说他是做直升飞机去上班的。那要么这个人脑子不正常,要么就是太有钱了炫富。如果你要打苍蝇用苍蝇拍子就行了。如果要你用巡航导d来打苍蝇,你认为可能吗?\x0d\x0a所以我们单片机写程序的话一般就是汇编语言和C语言。几乎没有人用C++语言的。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/7690164.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-08
下一篇 2023-04-08

发表评论

登录后才能评论

评论列表(0条)

保存