请问51单片机最大可以运行多大的程序,最好是STC的,C语言

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了请问51单片机最大可以运行多大的程序,最好是STC的,C语言相关的知识,希望对你有一定的参考价值。

请问51单片机最大可以运行多大的程序,最好是STC的,C语言。
比如:STC5A60S2
可以运行多大程序?
如果子函数很多,会堆栈溢出吗?怎么避免?
谁有运行成功的大的复杂的STC的C语言程序?发来看看。我要飞机2005圈a126店康姆。给我写信发来。

最后这个语言有点霸道哦,不过还是回答您前面好点:STC12C5A60S2可以运行大约59-60K左右的程序,子函数多,是多少?我最大的是运行了57.5K,再高就溢出了,不能正常运转,不过你这个具体需要实现那些功能呢?如果您很多,建议您使用STM32,512K的,或者ARM的,可以外扩flash。追问

哦,谢谢,我的子函数目前有15个左右,目前的功能已经堆栈溢出了,主函数进来后下面有一个while(1)循环体,这个循环体有点大,多数子函数在里面,还有嵌套调用子函数的地方。找了很多遍,改了很多地方,偶尔能改好,那次是把更多的功能加到了另外的子函数,再调用这个子函数。可是后来又改了其中的一点点其他程序(改动本身没任何问题)。就又不行了!代码量有404行

追答

404行代码有多少啊,太少了!不超过3K程序。

追问

是啊,就是不知道为什么不行,尝试了15种方案,还是没调试成功!一会尝试扩展RAM从xdata改为idata(后512字节),大家说可行吗?

追答

你调试不成功的原因是什么可以分享不,因为404行代码并不多,很少的!

参考技术A 这款单片机最大内部程序空间为60K,解决堆栈溢出问题,可以将其内部的2KRAM使用起来,这样就可以不用担心堆栈溢出问题了。 参考技术B stc12c5a60s2的芯片内部已经集成了拓展的ram 共有1280追问

这位朋友,不是内存不够用,是堆栈溢出!明白吗?

追答

你定义的全局变量太多吧,定义时可以考虑用xdata idata 说明存储的位置 ,实在不行考虑换芯片

参考技术C 51单片机是准16位单片机 其寻址范围为 2^16/1024=64kb
建议换芯片吧 如果程序很大
参考技术D 你编译完了之后keil会有一个报告的,里面idata,xdata,用了多少都能看到,只要没超出芯片的参数就可以

AT89c2051单片机能烧写多大的程序文件?

我的程序用keil编译后是CODE:978。但是在烧写的时候烧写的程序总是超过2k,结果导致一直提示数据校验错误,这到底是怎么回事?请高手指点指点!!

最大2K,从你的截图上看,最后一个错误地址已经到09D6了,转换成十进制就是2518字节。你程序明显超了400多字节

解决办法:
1。精简程序
2。C改汇编
3。换AT89c4051追问

为什么生成的hex文件会大那么多呢?有没有什么办法能在不改变程序的情况下减少一些??因为改用汇编的话太麻烦了。
会不会在我们生成的hex文件是不是多了一些没有的程序出来占用了能存??

追答

如果有源代码,那就试试在keil里面设置代码大小优化(最终生成的代码量小),操作方法(我的是英文版):
项目工作区Project框里的Target 1右键->Options for Target 'Target'->选择C51选项卡->在 侧重Emphasis下拉框里面选择第一项Favor size
然后重新编译代码,代码会小一些,如果代码小于2K就OK.

假如没有源代码或者优化出来的code还是大于2K,只有换AT89c4051 ,这块单片机价格和2051差得不多,除了flash是4K以外,其他和2051一样可以直接替换AT89C2051。

参考技术A 2051最大ROM是2K 参考技术B 2K

以上是关于请问51单片机最大可以运行多大的程序,最好是STC的,C语言的主要内容,如果未能解决你的问题,请参考以下文章

大家好,我是单片机初学者,呵呵,请问AT89C2051 单片机程序烧录工具用啥较好,可以用STC-ISP吗?

STC开源项目STC51单片机LRC万用表表制作程序+PCB文件

用STC单片机的PCA做定时器,输出PWM

用STC12C5A60S2单片机做矩阵键盘

51单片机定时器设置入门 (STC89C52RC)

DHT11传感器接入单片机前为啥要加一个电阻?加多大的好?