Create successful ePaper yourself
Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.
Task Management (Cont’d)<br />
• Task / <strong>OS</strong>TaskCreate() or <strong>OS</strong>TaskCreateExt()<br />
INT8U <strong>OS</strong>TaskCreate (void (*task)(void *pd),<br />
void *pdata, <strong>OS</strong>_STK *ptos, INT8U prio)<br />
{<br />
#if <strong>OS</strong>_CRITICAL_METHOD == 3<br />
<strong>OS</strong>_CPU_SR cpu_sr;<br />
#endif<br />
void *psp;<br />
INT8U err;<br />
#if <strong>OS</strong>_ARG_CHK_EN > 0<br />
if (prio > <strong>OS</strong>_LOWEST_PRIO) {<br />
return (<strong>OS</strong>_PRIO_INVALID);<br />
}<br />
#endif<br />
<strong>OS</strong>_ENTER_CRITICAL();<br />
if (<strong>OS</strong>TCBPrioTbl[prio] == (<strong>OS</strong>_TCB *)0) {<br />
<strong>OS</strong>TCBPrioTbl[prio] = (<strong>OS</strong>_TCB *)1;<br />
<strong>OS</strong>_EXIT_CRITICAL();<br />
psp = (void *)<strong>OS</strong>TaskStkInit(task, pdata, ptos, 0);<br />
err = <strong>OS</strong>_TCBInit(prio, psp, (void *)0, 0, 0, (void *)0, 0);<br />
if (err == <strong>OS</strong>_NO_ERR) {<br />
<strong>OS</strong>_ENTER_CRITICAL();<br />
<strong>OS</strong>TaskCtr++;<br />
<strong>OS</strong>_EXIT_CRITICAL();<br />
if (<strong>OS</strong>Running == TRUE) {<br />
<strong>OS</strong>_Sched();<br />
}<br />
} else {<br />
<strong>OS</strong>_ENTER_CRITICAL();<br />
<strong>OS</strong>TCBPrioTbl[prio] = (<strong>OS</strong>_TCB *)0;<br />
<strong>OS</strong>_EXIT_CRITICAL();<br />
}<br />
return (err);<br />
}<br />
<strong>OS</strong>_EXIT_CRITICAL();<br />
return (<strong>OS</strong>_PRIO_EXIST);<br />
}<br />
Embedded System Lab. <strong>II</strong> 41