新闻  |   论坛  |   博客  |   在线研讨会
ucos函数介绍
我就是我lxw | 2012-06-04 14:14:38    阅读:3250   发布文章

词语:
Task任务
Create创建
TCB任务控制块
ticks节拍数
ECB事件控制模块
EVENTS事件
TYPE类型
Pointer(Ptr)指针
List表类
Group

=============================================================================
OSxxxCreate()----创建事件
OSxxxPost()------发送事件
OSxxxPend()------请求事件/等待事件
OSxxxDel()-------删除事件
OSxxxQuery()-----查看事件

uCOSII有三类事件(信号量Sem/互斥信号量Mutex、消息邮箱Mbox、消息队列Q)
=============================================================================
第4章 任务管理 1
4.0 建立任务,OSTaskCreate() 2
4.1 建立任务,OSTaskCreateExt() 6
4.2 任务堆栈 9
4.3 堆栈检验,OSTaskStkChk() 11
4.4 删除任务,OSTaskDel() 14
4.5 请求删除任务,OSTaskDelReq() 17
4.6 改变任务的优先级,OSTaskChangePrio() 20
4.7 挂起任务,OSTaskSuspend() 23
4.8 恢复任务,OSTaskResume() 25
4.9 获得有关任务的信息,OSTaskQuery() 26

第5章 时间管理 1
5.0 任务延时函数,OSTimeDly() 1
5.1 按时分秒延时函数 OSTimeDlyHMSM() 3
5.2 让处在延时期的任务结束延时,OSTimeDlyResume() 4
5.3 系统时间,OSTimeGet()和OSTimeSet() 6

第6章 任务之间的通讯与同步 1
6.0 事件控制块ECB 2
6.1 初始化一个ECB块,OSEVENTWAITLISTINIT() 6
6.2 使一个任务进入就绪状态,OSEVENTTASKRDY() 7
6.3 使一个任务进入等待状态, OSEVENTTASKWAIT() 9
6.4 由于等待超时将一个任务置为就绪状态, OSEVENTTO() 9
6.5 信号量 10
6.5.1 建立一个信号量, OSSemCreate() 11
6.5.2 等待一个信号量, OSSemPend() 12
6.5.3 发送一个信号量, OSSemPost() 14
6.5.4 无等待地请求一个信号量, OSSemAccept() 16
6.5.5 查询一个信号量的当前状态, OSSemQuery() 17
6.6 邮箱 18
6.6.1 建立一个邮箱,OSMboxCreate() 19
6.6.2 等待一个邮箱中的消息,OSMboxPend() 20
6.6.3 发送一个消息到邮箱中,OSMboxPost() 22
6.6.4 无等待地从邮箱中得到一个消息, OSMboxAccept() 24
6.6.5 查询一个邮箱的状态, OSMboxQuery() 25
6.6.6 使用邮箱作为二值信号量 26
6.6.7 使用邮箱实现延时,而不使用OSTimeDly() 27
6.7 消息队列 28
6.7.1 建立一个消息队列,OSQCreate() 31
6.7.2 等待一个消息队列中的消息,OSQPend() 33
6.7.3 向消息队列发送一个消息(FIFO),OSQPost() 35
6.7.4 向消息队列发送一个消息(LIFO),OSQPostFront() 37
6.7.5 无等待地从一个消息队列中取得消息, OSQAccept() 39
6.7.6 清空一个消息队列, OSQFlush() 40
6.7.7 查询一个消息队列的状态,OSQQuery() 41
6.7.8 使用消息队列读取模拟量的值 42
6.7.9 使用一个消息队列作为计数信号量 43

架构
void main()
{
 OSInit();  //OS系统初始化
 //这里添加其他初始化
 //以下是建立任务
 OSTaskCreate( a1, //void (*task)(void *pd),//指向任务的指针
   b1, //void *pdata ,          //传递给任务的参数
   c1, //OS_STK *ptos ,   //任务堆栈栈顶的指针
   d1); //INT8U prio    //任务的优先级别

 OSTaskCreate( a2, //void (*task)(void *pd),//指向任务的指针
   b2, //void *pdata ,          //传递给任务的参数
   c2, //OS_STK *ptos ,   //任务堆栈栈顶的指针
   d2); //INT8U prio    //任务的优先级别
 //可以再加其他任务
 //可以再加其他初始化 
 OSStart();     //开始多任务处理    
}

//比如都要用公共资源UART,不能同时用,可分别用
void a1(void *dataptr)
{
 ……;
     while(1)  //任务体1
     { 
  OSSemPend(UART_Flag,0,&err);  //请求信号量UART_Flag
         Function(UART);               //使用信号量UART_Flag
         OSSemPost(UART_Flag);       //发送信号量UART_Flag
  OSTimeDly(nnnn);       // a1 延时 nnnn 个时钟节拍
     }
}

void a2(void *dataptr)
{
 ……;
     while(1)  //任务体2
     { 
  OSSemPend(UART_Flag,0,&err);  //请求信号量UART_Flag
         Function(UART);               //使用信号量UART_Flag
         OSSemPost(UART_Flag);       //发送信号量UART_Flag
  OSTimeDly(nnnn);       // a2 延时 nnnn 个时钟节拍
     }
}

参与讨论
登录后参与讨论
推荐文章
最近访客