基于Small RTOS51的数据采集器设计
每个任务均采用以下结构。
while(1)
{
OSWait(K_SIG,
0);//任务睡眠,等待任务唤醒处理过程
}
任务的唤醒用OSTaskResume(TASK_ID)完成。
串口接收和发送处理采用队列模式,设立发送和接收两个缓冲区,独立的进出队列处理。数据解包和数据打包采用单独处理方式,这样单独处理通信协议,以利于今后协议的改动。
串口缓冲I/O模块的程序见本刊网站fanwen.oyaya.net收集整理。
系统节拍设置:将OS_TICKS_PER_SEC设为20,即系统时钟节拍为每秒20次。定义定时器0的中断时间设为50ms。
#definem_Fosc11059200L
#definem_TIME65536L-(m_Fosc/(OS_TICKS_PER_SEC*
12L))
voidInitTimer0(void){
TMOD=(TMOD&0xF0)|0x01;
TH0=m_TIME/256;
TL0=m_TIME%256;
ET0=1;
TF0=0;
}
TestSys任务定时检测各任务的回应,若长时间没有回应,则启动复位功能,热启动整个系统,以保证系统的可靠性。
由于单片机采用AT89C52,片内RAM为256,使用DS12887中的一部分RAM作为扩展。队列长度各为15个字节时,程序经过9级优化后,RAM占用140字节,XRAM占用106字节。由于系统RAM很小,因此,没有使用信号量和消息进行数据传输。在其它应用时,可以根据系统资源进行信号量和消息的使用,这样可以更有效地使任务运行。
4结论
在嵌入式系统中,使用RTOS是大势所趋,因为在大多数情况下编程效率比执行效率重要。利用SmallRTOS多任务系统设计,可以使51单片机发挥的更有效,并且今后的软件维护和改进更方便,更可靠。
《基于Small RTOS51的数据采集器设计(第2页)》