28.12.2014 Views

uC/OS-II (Structure) - 경희대학교

uC/OS-II (Structure) - 경희대학교

uC/OS-II (Structure) - 경희대학교

SHOW MORE
SHOW LESS

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

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!