嵌入式实时操作系统(第12课时).pptVIP

  • 14
  • 0
  • 约7.99千字
  • 约 20页
  • 2018-06-09 发布于河南
  • 举报
嵌入式实时操作系统(第12课时)

嵌入式实时操作系统;5.2.3 向信号量集发信号;例如,要对信号量集FlagPtr发送信号,待发送的信号为OSFlagFlags中的第0位和第3位并且是要把它们置1,则调用时的代码如下: OS_FLAGS OSFlagPost( FlagPtr, //信号量集指针 (OS_FLAGS)9, //选择所要发送的信号 OS_FLAG_SET, //信号有效的选项 err //错误信息 );;例5-1 设计一个有三个任务的应用程序,这三个任务分别叫做MyTask、YouTask和HerTask。要求用一个信号量集来控制MyTask的运行,即任务YouTask发送一个信号,任务HerTask发送一个信号,当这两个任务都发了信号之后,MyTask才能运行。 答:应用程序的代码如下: /******************************************Test******************************************/ #include “includes.h” #define TASK_STK_SIZE 512 //任务堆栈长度 #define N_MESSAGES 128 //定义消息队列长度 OS_STK StartTaskStk[TASK_STK_SIZE]; //定义任务堆栈区 OS_STK MyTaskStk[TASK_STK_SIZE]; //定义任务堆栈区 OS_STK YouTaskStk[TASK_STK_SIZE]; //定义任务堆栈区 OS_STK HerTaskStk[TASK_STK_SIZE]; //定义任务堆栈区 INT16S key; //用于退出的键 char *s1=“MyTask正在运行”; char *s2=“YouTask正在运行”; char *s3=“HerTask正在运行”; INT8U err; INT8U y=0; //字符显示位置;OS_FLAG_GRP *Sem_F; void StartTask(void *data); //声明起始任务 void MyTask(void *data); //声明任务 void YouTask(void *data); //声明任务 void HerTask(void *data); //声明任务 /**************************************主函数*******************************************/ void main(void) { OSInit(); //初始化μc/os-II PC_DOSSaveReturn( ); //保存DOS环境 PC_VectSet(uCOS,0SCtxSw); //安装μc/os-II中断 Sem_F=OSFlagCreate(0,err); //创建信号量集 OSTaskCreate(StartTask, //创建任务StartTask (void *)0, //给任务传递参数 StartTaskStk[TASK_STK_SIZE-1], //设置任务堆栈栈顶指针 0); //使任务的优先级别为0 OSStart(); //启动多任务管理 };/*******************************任务StartTask*****************************************/ void StartTask(void *pdata) { #if OS_CRITICAL_METHOD==3 OS_CPU_SR cpu_sr; #endif pdata=pdata; OS_ENTER_CRITICAL( ); PC_VectSet(0x08,OSTickISR); //安装时钟中断向量 PC_SetTickRate(OS_TICKS_PER_SEC); //设置μc/os-II时钟频率 OS_EXIT_CRITICA

文档评论(0)

1亿VIP精品文档

相关文档