就按键来说,一般有Keybuffer、KeyFIFO或直接进入APFIFO三种设计方式。
Keybuffer:一般用于保存数字按键信息。例如:在电话机的设计中,需要记录按键内容用于LCD显示、最后数字确认、数字存储等,这时候需要把按键值的信息(0123456789*#)记录在Keybuffer中;
KeyFIFO:一些功能按键可以将相应信息列入到KeyFIFO中,等待应用层的取用,这样可根据不同的工作模式进行不同的处理及动作。
这些类似的观念可以应用在许多周边中:
输入类:Key、RFDatainput、UARTdatainput、Switchinput等;
输出类:LCDdisplay、LEDdisplay、UARTdataoutput等。
APPFIFO(应用界面层):主要是将发生的事件储存在APPFIFO里面等待适当的时间依序处理,不然有可能造成系统在某一程序物件里面循环,从而降低系统的实时性(Real-Time)。
4)每个子程序模块只能有唯一一个程序入口地址在程序的首部,只能有唯一一个程序出口地址在程序的尾部。
例如:
以下的写法是不规范的(两个RET出口,存在调试时不易设立断点,程序可读性降低等问题):
lable:
b0bts0fz
ret
…
clry
ret
应该改为(只有一个出口位置,标号为lable90,便于程序检查):
lable:
b0bts0fz
jmplable90
….
clry
lable90:
ret
5)上电复位时要对所有的RAM空间进行初始化(建议用户寄存器清零,系统寄存器进行必要设定),不要使用未经初始化的变量。RAM未经过完整的初始化,容易导致程序执行的不确定性,这一不良现象往往在批量生产中有所体现。(这点是工程师经常犯错的地方,须特别注意)
6)系统中如果需要等待一些未知的应答信号,如通信或等待输入信号时,必须进行超时或异常处理,以防止程序进入“死等”状态。
例如在红外接收中,由于信号的突然消失或干扰从而无法得到一帧完整或正确的信息,这时需要复位接收程序的入口条件并退出接收程序,而不是一直等待信号的来临。不然无法进行下次接收甚至会影响到其它程序的执行。
7)通过对系统数据结构的划分与组织的改进,以及对程序算法的优化来提高空间效率。这种方式是解决软件空间效率的根本办法。
8)保证循环体内的工作量最小化。应仔细考虑循环体内的语句是否可以放在循环体之