从0开始学习UCOS
前记:做过一些项目,对数模电设计和单片机软件有一定的认识,不过还没涉及到操作系统,总感觉做的这些很低端,
所以想从UCOS开始学习嵌入式操作系统,
有兴趣的一起学习。
一、概念
前后台系统:无限循环
前台-中断
后台-循环
(用过实时内核做过系统设计,绝不会再想返回前后台系统--Jean J.Labrosse)
嗯 我也是。一起学习。 顶一个啊! 顶一个,我也在学习UCOS! 不太明白,前后台和实时操作系统有本质的区别吗? 恩,我也有此感觉 我也来一起学习,都好几楼了,怎么还没看到实质性的东西,我开个头:
这个函数使用最多,先来研究这个函数
INT8UOSTaskCreateExt (void (*task)(void *p_arg),
void *p_arg,
OS_STK*ptos,
INT8U prio,
INT16U id,
OS_STK*pbos,
INT32U stk_size,
void *pext,
INT16U opt)
{
OS_STK *psp;
INT8U err;
#if OS_CRITICAL_METHOD == 3 /* Allocate storage for CPU status register */
OS_CPU_SRcpu_sr = 0;
#endif
#if OS_ARG_CHK_EN > 0
if (prio > OS_LOWEST_PRIO) { /* Make sure priority is within allowable range */
return (OS_ERR_PRIO_INVALID);
}
#endif
OS_ENTER_CRITICAL();
if (OSIntNesting > 0) { /* Make sure we don't create the task from within an ISR*/
OS_EXIT_CRITICAL();
return (OS_ERR_TASK_CREATE_ISR);
}
if (OSTCBPrioTbl == (OS_TCB *)0) { /* Make sure task doesn't already exist at this priority*/
OSTCBPrioTbl = OS_TCB_RESERVED;/* Reserve the priority to prevent others from doing ...*/
/* ... the same thing until task is created. */
OS_EXIT_CRITICAL();
#if (OS_TASK_STAT_STK_CHK_EN > 0)
OS_TaskStkClr(pbos, stk_size, opt); /* Clear the task stack (if needed) */
#endif
psp = OSTaskStkInit(task, p_arg, ptos, opt); /* Initialize the task's stack */
err = OS_TCBInit(prio, psp, pbos, id, stk_size, pext, opt);
if (err == OS_ERR_NONE) {
if (OSRunning == OS_TRUE) { /* Find HPT if multitasking has started */
OS_Sched();
}
} else {
OS_ENTER_CRITICAL();
OSTCBPrioTbl = (OS_TCB *)0; /* Make this priority avail. to others*/
OS_EXIT_CRITICAL();
}
return (err);
}
OS_EXIT_CRITICAL();
return (OS_ERR_PRIO_EXIST);
}
#endif 不懂啊,请解析一下吧
页:
[1]