如何将单片机C语言程序改小

可以从哪几个方面将程序精简下?就是将其大小改的小点,但是功能一样。
对于程序中重复出现的指令,用子程序调用的方式是否能将程序大小改小?
是不是说 程序的代码行数越少,这个程序的所占的空间大小会越小?
针对单片机而言,现在的情况是 我所写的程序生成HEX文件后,过大!超过单片机的程序空间了!

如果超出太多就另想办法,例如更换单片机。
如果超出得不多,可以进行优化。这里又分为两种情况:如果你编程经验丰富,可以手动通过优化减小程序代码大小;如果你不太懂得如何手动优化,可尝试提高编译优化等级并优先针对代码大小进行优化,不过提高优化等级往往会带来更多的隐患,不建议这么做。

“对于程序中重复出现的指令,用子程序调用的方式是否能将程序大小改小?”你指的是重复代码段吧,某些优化等级下编译器已经自动进行了这种优化,这时再手动合并重复代码段有时反而会导致代码大小增大……需要具体试验进行。记得多备份。

“是不是说 程序的代码行数越少,这个程序的所占的空间大小会越小?”完全不是这么回事,某些时候一行C程序可能会编译出很长的汇编代码,尤其是那些卖弄C语言技巧的家伙们。我之前看过一个例子是某个家伙写的一行高度紧凑的语句编译出了数百字节。当然如果不幸调用了库函数会使得代码大小迅速膨胀。
温馨提示:内容为网友见解,仅供参考
第1个回答  2017-11-02
这单片机程序的结构很重要,同样的功能,用不同的语句写,确定,编译后的代码文件HEX相差会很大的。但是,程序简化,也不是一句话两句话就能说明白的,有很多因素,与个人的写程序的习惯也有关系。对于重复的语句,最好写成子函数,或循环程序。尽量不要用CASE语句,变量尽量不要用16位的,除非需要除外。尽量减少变量数。
但是,这些,对于实学者来说,确实有点难做到,只要能写出程序来就已经不错了,再简化就不容易了。
另外一个原因,就是现在的单片机的FLASH程序存储器的容量都非常大,像你说的:超过单片机的程序空间了,这种情况几乎不会出现的。
用STC单片机,最大容量可达60KB,你的程序再长,也不可能超过的,就算故意让你超,你也没有办法超的,你能写出多大程序来?
相似回答