系统中程序的执行顺序如图3所示。首先从主程序即main()函数开始执行,在main()函数中完成SmallRTOS51实时操作系统、系统定时器、串口、消息、变量和外围设备的初始化工作,然后创建用户任务,最后主程序放弃CPU资源,任务优先级最高的任务开始执行。
Small RTOS51实时操作系统支持16个优先级,0为最高优先级,15为最低优先级。程序中将看门狗任务置为最高优先级,因为它必须定期向看门狗电路输出喂狗信号。将它置为最高优先级,使其优先运行,可以保证单片机P89V51RD2不会被看门狗电路复位。为了能及时处理串口中断服务程序读取的数据包,数据处理任务也应当具有比较高的优先级。同样,在检测到有按键被按下时,考虑到按键处理的实时性,也不能将按键处理任务的优先级设得太低。可以将键盘扫描任务置为最低优先级,当没有数据到达串口,在看门狗任务运行的间隙,键盘扫描任务一直运行,一旦检测有按键被按下,立即发送消息给按键处理任务,按键处理任务获得消息后解除挂起状态,抢占CPU资源开始运行。因手工连续按下两次按键的时间间隔远大于按键处理任务进行一次数据处理的时间,故而这样的优先级设置既保证了键盘操作能及时被处理,又不影响检测连续的键盘操作。