单片机》在不影响功能的前提下,如何最大限度地减少程序所占空间?

来源:百度知道 编辑:UC知道 时间:2024/06/24 17:37:25
我有个程序可能太大了,放不到单片机里去,想请教一下高手哦~
如果下面的程序中,删去说明的中文,把几条语句写到同一行,可不可以减少占用的空间呀?
#include<reg51.h> //51系列单片机定义文件
#define uchar unsigned char //定义无符号字符
#define uint unsigned int //定义无符号整数
void delay(uint); //声明延时函数
void main(void)
{ uint i;
uchar temp;
while(1)
{ temp=0x01;
for(i=0;i<8;i++) //8个流水灯逐个闪动
{ P2=~temp;
delay(100); //调用延时函数
temp<<=1; } temp=0x80;
for(i=0;i<8;i++) //8个流水灯反向逐个闪动
{ P2=~temp;
delay(100); //调用延时函数
temp>>=1; } temp=0xFE;
for(i=0;i<8;i++) //8个流水灯依次全部点亮
{ P2=temp;
delay(100); //调用延时函数
temp<<=1; } temp=0x7F;
for(i=0;i<8;i++) //8个流水灯依次反向全部点亮
{ P2=temp;
delay(100); //调用延时函数
temp>>=1;

不用C写,改用汇编,如果是汇编写的就按下面方法:
1,把重复的程序段写成子程序供调用
2,改变算法,
3,精简表格数据
4,多用散转算法,少用直判跳转
5,.....
最后: 换一个容量大点的单片机.

你是用汇编吗?
如果是的话,那就比较难了

换个大容量片子不就可以了,20K的比较大了,还不够用?

把编译优化级数设置最高
可以考虑C8051F121/120 增强型51单片机 100MHz 128KFlash还不够,8KRam,可通过总线外扩RAM 64K.