zfzdhz_2012 发表于 2012-11-12 18:47:43

从0开始学习UCOS

前记:做过一些项目,对数模电设计和单片机软件有一定的认识,
不过还没涉及到操作系统,总感觉做的这些很低端,
所以想从UCOS开始学习嵌入式操作系统,
有兴趣的一起学习。

一、概念
前后台系统:无限循环
                  前台-中断
                  后台-循环
(用过实时内核做过系统设计,绝不会再想返回前后台系统--Jean J.Labrosse)

newhand1991 发表于 2012-11-13 04:44:20

嗯 我也是。一起学习。

Bank_li 发表于 2012-11-13 07:24:53

顶一个啊!

hb1012 发表于 2012-11-13 07:40:07

顶一个,我也在学习UCOS!

xuxi2009 发表于 2012-11-13 10:52:46

不太明白,前后台和实时操作系统有本质的区别吗?

yushiqian_2012 发表于 2012-11-20 20:50:22

恩,我也有此感觉

sk_2006_ren 发表于 2012-11-20 21:18:07

我也来一起学习,都好几楼了,怎么还没看到实质性的东西,我开个头:

这个函数使用最多,先来研究这个函数
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

wadsny 发表于 2013-1-2 11:50:41

不懂啊,请解析一下吧
页: [1]
查看完整版本: 从0开始学习UCOS