1.尽可能让变量使用占用代码空间最小的变量类型。例如无符号字符型和位操作(8051作为一款8位处理器提供了位操作支持,而且大多数操作指令都是8位或者位操作的通常用小的数据类型去编写代码其效率更高)
2.尽可能使用无符号类型数据(8051单片机不直接支持有符号的数据类型,有符号的操作需要额外的指令来支持,但是无符号的数据类型是直接就能被8051支持的)
3.尽可能选择小的存储模式即small(绝大多数的应用采用small存储模式都能满足,也可以选择large存储模式,将一些数组和结构体存入xdata或者pdata存储空间的话选择极大存储模式,注意的是keil c51实时库使用的基本指针可以工作在任何存储模式)
4.当应用其他存储模式的时候尽可能将变量存储在data区域内(将变量存储在data空间里,这部分空间单片机可以直接访问,据有最高的执行效率,通常这个区域存储的是最有效率的代码)本地图片,请重新上传
5.要知道如何在你的设备上使用PDATA存储模式(pdata提供的256字节的空间,使用MOVX @Ri指令访问8位地址,pdata存储空间的使用不同于8051单片机内部的设备,需要设置页寄存器。Xdata 存储类型是通用的能达到的最大的存储空间64kb)
6.尽可能使用内存类型的指针(默认的,keil c51编译器使用通用指针可以访问任何类型的内存空间,内存型的指针只能访问固定的存储空间,但是这种方式能够产生更快更小的程序代码)
7.减少使用重入函数(8051系列缺乏对堆栈变量的支持,重入函数的实现通过keil c51 编译器使用一个编译时间的堆栈对内存范围内的数据内容的覆盖实现的,重入函数在8051单片机上模拟出堆栈的结构。由于在嵌入式应用很少会用到重入函数代码,但是你在设计的过程中应尽可能的少用这种重入属性)
8.使用LX51 Linker/Locate 和Linker code packing来减少程序的体积。(LX51 Linker/Locate分析并且优化你的整个程序。代码将会在内存中重新排列,最大限度的使用2字节的AJMP和ACALL指令来代替3字节的LJMP和LCALL指令。Linker code packing利用通用代码段生成子程序)
9.尽量保持短的中断函数(结构好的的中断函数仅仅是执行数据的获取或者是计时,数据的处理是在主函数或者实时系统的任务函数中完成,这样可以有效的降低涉及保存/存储的中断函数的调用)
10.检查对于时钟周期的需求(代码访问数据需要一定的周期,尤其是在实时系统中使用多个线程或者中断服务程序中需要在主函数中)