一:系统的初始化
1:OSInit();
先把系统给初始化了
2:需要在系统滴答定时器的中断里放入Ucos的节拍函数
一般从别的地方移植过来用就行了
//systick中断服务函数,使用OS时用到
void SysTick_Handler(void)
{
if(delay_osrunning==1) //OS开始跑了,才执行正常的调度处理
{
OS_CPU_SR cpu_sr;
OS_ENTER_CRITICAL(); /* Tell uC/OS-II that we are starting an ISR */
OSIntNesting++;
OS_EXIT_CRITICAL();
OSTimeTick(); /* Call uC/OS-II's OSTimeTick() */
OSIntExit(); /* Tell uC/OS-II that we are leaving the ISR */
}
}
3:任务的创建
有两个任务创建函数
OSTakeCreate();
OSTakeCreateExt();
第一个是简单版 第二个是高级版
INT8U OSTaskCreate(void (*task)(void *pd),
void *pdata,
OS_STK *ptos,
INT8U prio);
参数:任务的入口函数,一个指针(一般填空),指向任务堆栈栈顶的指针,优先级
只有
四个参数
INT8U OSTaskCreateExt(void (*task)(void *pd),
void *pdata,
OS_STK *ptos,
INT8U prio,
INT16U id,
OS_STK *pbos,
INT32U stk_size,
void *pext,
INT16U opt);
参数: 任务的入口函数 ,一个指针(一般填空), 指向任务堆栈的栈顶指针 , 优先级 ,这些和上面的一样
扩展: id: 是任务的标识,目前这个参数没有实际的用途,但保留在 OSTaskCreateExt()中供今后扩展,应用程序 中可设置 id 与优先级相同。
pbos: 指向任务堆栈栈底的指针
stk_size: 指定任务堆栈的大小(就是任务栈元素数量)。其单位由 OS_STK 定义:当 OS_STK 的类型定义为INT8U、 INT16U、 INT32U 的时候, stk_size 的单位为分别为字节(8 位)、字(16 位)和双字(32 位)。
opt: 存放与任务相关的操作信息。 opt 的低 8 位由 uC/OS 保留,用户不能使用。用户可以使用 opt 的高 8 位。每一种操作由 opt 中的一位或几位指定,当相应的位被置位时,表示选择某种 操作。当前的 uC/OS 版本支持下列操作:
任务创建时 用一个INT8U的变量来接收任务创建函数的返回值以检查任务创建的结果
4:系统开始运行
OSStart();