使用RTX之前,先对系统运行的大概流程进行简单的说明。第一步要做的是先配置运行的环境,在MDK中配置运行环境很简单,加入启动汇编代码后,配置好系统时钟,然后对RTX的一些参数进行配置就可以了。然后启动内核,启动内核会创建一个进程。可以在这个进程里创建多个进程并删除自己。这样多个任务就可以按时间片轮询执行了。至于进程间的通信可以通过时间标志、信号量、互斥量、信箱来实现。
这里先举例说明RTX内核的启动和使用。进程间的通信后续会加上。
1、新建工程,加入启动汇编;
2、加入RTX_Config.c文件,对操作系统进行配置。基础配置包括任务、堆栈大小、堆栈检查、硬件时钟、多任务轮转、空闲任务、用户定时器的配置,高级配置包括硬件资源需求和配置宏。默认的配置系统就能很好的工作,如果要优化堆栈的使用就需要进行一些配置了。
任务:
#define OS_TASKCNT 6 /*处于活动状态的最大任务数*/
#define OS_PRIVCNT 0 /*是否可以用户自定义任务*/
堆栈:
#define OS_STKSIZE 50 /*默认的堆栈大小*/
#define OS_STKCHECK 1 /*激活堆栈检查*/
#define OS_RUNPRIV 0 /*是否运行所有的任务在特权模式*/
用户定时器:
#define OS_TIMERCNT 0 /*指定的用户定时器数目*/
硬件时钟:
#define OS_CLOCK 72000000 /*为选定的时钟指定输入时钟的频率*/
#define OS_TICK 10000 /*指定时间脉冲间隔,单位us*/
多任务轮转
#define OS_ROBIN 1 /*是否激活多任务轮转*/
#define OS_ROBINTOUT 5 /*标识当前运行任务的时间片,当前时间片用完,当前运行任务被终止,下一个任务被重新开始*/
说明: ARM处理器共支持7种处理器模式,其中包括:用户模式、系统模式、管理模式、中止模式、未定义模式、中断模式、快速中断模式。其中管理、中止、未定义、中断、快速中断归属于异常模式。而异常和系统归属于特权模式。
3、在C文件中包含头文件#include <RTL.h>就可以使用RTX的库函数,启动内核了。下面举例说明。
#include <RTL.h>
OS_TID phase_A; /* 分配任务ID号: phase_A*/
OS_TID phase_B; /* 分配任务ID号: phase_B*/
static U64 stack[800/8]; /*自定义的堆栈大小*/
__task void init(void);
__task void phase_A(void); /* 进程函数的声明*/
__task void phase_B(void) ;
int main (void)
{
SYS_Init (); /* 初始化系统的时钟*/
os_sys_init (init); /* 按照默认的配置初始化第一个进程*/
}
/*第一个进程:创建新的线程并删除自己*/
__task void init (void)
{
phase_A = os_tsk_create (task_A, 0); /* 使用默认的配置创建一个进程*/
phase_A = os_tsk_create_user (task_B,0,&stack,sizeof(stack)); /*使用自定义的堆栈创建进程*/
os_tsk_delete_self (); /*删除自己*/
}
__task void task_A(void)
{
/*编写用户代码*/
}
__task void task_B(void)
{
/*编写用户代码*/
}
2009-11-17 14:03:56
文章评论(0条评论)
登录后参与讨论