RTX-51实时系统(1)
/***************************************************
*作 者:温子祺
*联系方式:wenziqi@hotmail.com
*说 明 :RTX-51实时系统(1)
***************************************************
1. 定时器滴答中断
RTX-51 Tiny实时系统用标准8051的定时器0(模式1)生产一个周期性的中断。该中断就是RTX-51
Tiny的定时滴答(Timer Tick)。库函数中的超时和事件间隔就是基于该定时滴答来测量的。
默认情况下,RTX-51每10000个机器周期产生一个滴答中断,因此,对于运行在12MHz的标准8051来说,滴答的周期是10ms,频率是100Hz(12MHz/12/1000)。该值可以在CONF_TNY.A51配置文件中修改。
2. 任务
RTX51-Tiny实时系统本质上就是一个任务切换器,建立一个RTX-51 Tiny程序,就是建立一个
或多个任务函数的应用程序。
任务创建可以使用关键字 “_task_”来创建任务。每个任务都有正确的状态,如运行、就绪、等待、删除、超时等状态,要注意的是某个时刻只有一个任务处于运行态。
RTX-51 Tiny支持最多16个任务,而每一个任务的格式一定要是如下格式:
void function(void) _task_ TASKID
{
while(1)
{
//其他代码
}
}
每一个任务必须加上“_task_”关键字,TASKID的有效取值范围是0~15。所有的任务必须是循环重复的,任务不能够返回。
3. 消息机制
RTX-51 Tiny实时系统由于是RTX-51 Full的一个子集,不具有邮箱系统、信号量等操作,只具
备消息机制方式,主要给任务发消息。通过内核提供的服务,任务或中断服务子程序可以将一条消息放入消息队列。同样,一个或多个任务可以通过内核服务从消息队列中得到消息。
4. os_wait函数
os_wait函数可以使一个任务等待一个或多个事件。通过对os_wait函数输入不同的参数,可以让os_wait函数等待指定的时间超时、等待消息、等待制定的时间,参数分别为K_TMO、K_SIG、K_IVL,os_wait可以返回时,返回值表明了发生什么事件,RDY_EVENT表示任务的就绪标志被置位,SIG_EVENT表示收到一个信号,TMO_EVENT表示超时完成或时间间隔到达。
5. 编写规则
l 确保加载了RTX51TNY.H头文件。
l 不要建立main函数,RTX-51 Tiny有自己的main函数。
l 程序里必须至少包含一个任务函数。
l 中断必须有效(EA=1),在临界区如果要禁止中断时一定要小心。
l 程序必须至少调用一个RTX-51 Tiny库函数(如os_wait),否则不能够连接到RTX51-Tiny库函数。
l Task 0是程序中首先要执行的函数,必须在任务0中调用os_create_task函数以运行其余任务。
l 任务函数必须是从不退出或返回的。任务必须用一个while(1)或类似的结构进行循环。用os_delete_task函数可以停止某一个运行的任务。
必须在Keil中指定RTX51-Tiny,或者在连接器中指定。