RTX是一个易用的实时可执行程序,提供了一组C函数和宏,通过使用准并行的任务构建实时应用。
RTX内核提供了启动和结束并行任务的基本功能,还提供了任务间通信的附加功能。通信功能可以同步任务、管理公共资源(外设和内存区域)、在任务间传递信息。
RTX内核提供了几种任务间通信的方式:
事件标志是任务同步的主要工具。每个任务都被分配了16个事件标志。因此,一个任务可以选择性地同时等待16个不同事件标志,比如可以同时等待多个选中标志或者任意一个选中标志。
事件标志可以被任务设置或者被中断函数设置,如任务和外部异步事件的同步可以通过在中断函数中设置一个任务等待的标志来实现。
如果多个任务需要访问同一个公共资源,则实时多任务系统就需要一种方式来处理。否则,不同的任务的同时访问可能会相互干扰导致数据不一致或者外设功能异常。
信号量是避免上述问题的主要方式。信号量是包含一个虚拟令牌的软件量。内核把令牌交给第一个请求访问的任务,其他任务就得不到令牌,直到令牌被释放。由于只有一个得到令牌的任务能够访问公共资源,所以防止了其他任务访问和干扰公共资源。
内核会将请求令牌但又暂未得到的任务置于睡眠状态,当令牌释放时,内核会唤醒任务置于准备好的状态。
互斥锁是防止同步和内存访问问题的一种替代方式。任务使用互斥锁来锁住公共资源,只有锁住互斥锁的任务才可以访问公共资源,内核阻塞其他请求互斥锁的任务直到锁住互斥锁的任务解锁。
任务之间可以使用邮箱传递消息。这通常是高级协议使用的方式,如TCP-IP、UDP、ISDN。
消息仅仅是个指针,它指向包含协议信息或协议帧的内存块。程序员负责分配和释放内存块,并防止内存泄露。
内核会将等待消息但又暂未等到的任务置于睡眠状态。当有其他任务发送消息到邮箱时,内核会唤醒任务。
RTX内核适用于基于ARM7、AMR9和Cortex_M0/M1/M3/M4/R4的器件。
RTX可以定义的任务数量无限制,激活的任务最多250个,邮箱、信号量、互斥锁无限制,事件标志每个任务16个,代码空间小于4Kbytes。初始化系统需要一千多个周期,任务切换几百个周期。更多请查阅手册。
文章评论(0条评论)
登录后参与讨论