int8u ostaskcreate.htm

来自「uCOS-II系统服务例程 很不错的内核代码解释」· HTM 代码 · 共 807 行 · 第 1/3 页

HTM
807
字号
</span>/*<span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;
</span>OSQPend()<span style="mso-spacerun:
yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</span>*/</span></p>

<p class=CodeSeg style='border:none;mso-border-alt:solid #999999 1.5pt;
padding:0cm;mso-padding-alt:1.0pt 1.0pt 15.0pt 1.0pt'><span lang=EN-US><span
style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</span>/* <span style="mso-spacerun:
yes">&nbsp;&nbsp;&nbsp;</span>OSSemPend()<span style="mso-spacerun:
yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</span>*/</span></p>

<p class=CodeSeg style='border:none;mso-border-alt:solid #999999 1.5pt;
padding:0cm;mso-padding-alt:1.0pt 1.0pt 15.0pt 1.0pt'><span lang=EN-US><span
style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</span>/*<span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;
</span>OSTimeDly()<span style="mso-spacerun:
yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</span>*/</span></p>

<p class=CodeSeg style='border:none;mso-border-alt:solid #999999 1.5pt;
padding:0cm;mso-padding-alt:1.0pt 1.0pt 15.0pt 1.0pt'><span lang=EN-US><span
style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</span>/*<span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;
</span>OSTimeDlyHMSM()<span style="mso-spacerun:
yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</span>*/</span></p>

<p class=CodeSeg style='border:none;mso-border-alt:solid #999999 1.5pt;
padding:0cm;mso-padding-alt:1.0pt 1.0pt 15.0pt 1.0pt'><span lang=EN-US><span
style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</span>/*<span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;
</span>OSTaskSuspend()<span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;
</span>(Suspend self)<span style="mso-spacerun:
yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</span>*/</span></p>

<p class=CodeSeg style='border:none;mso-border-alt:solid #999999 1.5pt;
padding:0cm;mso-padding-alt:1.0pt 1.0pt 15.0pt 1.0pt'><span lang=EN-US><span
style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</span>/*<span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;
</span>OSTaskDel()<span style="mso-spacerun:
yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>(Delete<span
style="mso-spacerun: yes">&nbsp; </span>self)<span style="mso-spacerun:
yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</span>*/</span></p>

<p class=CodeSeg style='border:none;mso-border-alt:solid #999999 1.5pt;
padding:0cm;mso-padding-alt:1.0pt 1.0pt 15.0pt 1.0pt'><span lang=EN-US><span
style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</span>.</span></p>

<p class=CodeSeg style='border:none;mso-border-alt:solid #999999 1.5pt;
padding:0cm;mso-padding-alt:1.0pt 1.0pt 15.0pt 1.0pt'><span lang=EN-US><span
style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</span>.</span></p>

<p class=CodeSeg style='border:none;mso-border-alt:solid #999999 1.5pt;
padding:0cm;mso-padding-alt:1.0pt 1.0pt 15.0pt 1.0pt'><span lang=EN-US><span
style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>}</span></p>

<p class=CodeSeg style='border:none;mso-border-alt:solid #999999 1.5pt;
padding:0cm;mso-padding-alt:1.0pt 1.0pt 15.0pt 1.0pt'><span lang=EN-US><span
style='mso-tab-count:1'>&nbsp;&nbsp; </span>}</span></p>

</div>

<p class=NewSectionPara><span lang=EN-US><![if !supportEmptyParas]>&nbsp;<![endif]><o:p></o:p></span></p>

<p class=Descript><b><span lang=EN-US style='font-family:"Courier New"'>ptos</span></b><span
lang=EN-US> is a pointer to the task's top of stack.<span style="mso-spacerun:
yes">&nbsp; </span>The stack is used to store local variables, function
parameters, return addresses and CPU registers during an interrupt.<span
style="mso-spacerun: yes">&nbsp; </span>The size of the stack is determined by
the task's requirements and, the anticipated interrupt nesting.<span
style="mso-spacerun: yes">&nbsp; </span>Determining the size of the stack
involves knowing how many bytes are required for storage of local variables for
the task itself, all nested functions, as well as requirements for interrupts
(accounting for nesting).<span style="mso-spacerun: yes">&nbsp; </span>If the
configuration constant </span><b><span lang=EN-US style='font-family:"Courier New"'>OS_STK_GROWTH</span></b><span
lang=EN-US> is set to 1, the stack is assumed to grow downward (i.e. from high
memory to low memory).<span style="mso-spacerun: yes">&nbsp; </span></span><b><span
lang=EN-US style='font-family:"Courier New"'>ptos</span></b><span lang=EN-US>
will thus need to point to the highest <i>valid</i> memory location on the
stack.<span style="mso-spacerun: yes">&nbsp; </span>If </span><b><span
lang=EN-US style='font-family:"Courier New"'>OS_STK_GROWTH</span></b><span
lang=EN-US> is set to 0, the stack is assumed to grow in the opposite direction
(i.e. from low memory to high memory).</span></p>

<p class=NewSectionPara><span lang=EN-US><![if !supportEmptyParas]>&nbsp;<![endif]><o:p></o:p></span></p>

<p class=Descript><b><span lang=EN-US style='font-family:"Courier New"'>prio</span></b><span
lang=EN-US> is the task priority.<span style="mso-spacerun: yes">&nbsp;
</span>A unique priority number must be assigned to each task and the lower the
number, the higher the priority.</span></p>

<p class=NewSectionPara><span lang=EN-US><![if !supportEmptyParas]>&nbsp;<![endif]><o:p></o:p></span></p>

<p class=NewSectionPara><b><span lang=EN-US>Returned Value<o:p></o:p></span></b></p>

<p class=NewSectionPara><span lang=EN-US><![if !supportEmptyParas]>&nbsp;<![endif]><o:p></o:p></span></p>

<p class=Descript><b><span lang=EN-US style='font-family:"Courier New"'>OSTaskCreate()</span></b><span
lang=EN-US> returns one of the following error codes:</span></p>

<p class=NewSectionPara><span lang=EN-US><![if !supportEmptyParas]>&nbsp;<![endif]><o:p></o:p></span></p>

<p class=Descript style='margin-left:45.0pt;text-indent:-18.0pt'><span
lang=EN-US>1) <span style='mso-tab-count:1'>&nbsp;&nbsp; </span></span><b><span
lang=EN-US style='font-family:"Courier New"'>OS_NO_ERR</span></b><span
lang=EN-US>, if the function was successful</span></p>

<p class=Descript style='margin-left:45.0pt;text-indent:-18.0pt'><span
lang=EN-US>2) <span style='mso-tab-count:1'>&nbsp;&nbsp; </span></span><b><span
lang=EN-US style='font-family:"Courier New"'>OS_PRIO_EXIST</span></b><span
lang=EN-US>, if the requested priority already exist</span></p>

<p class=NewSectionPara><span lang=EN-US><![if !supportEmptyParas]>&nbsp;<![endif]><o:p></o:p></span></p>

<p class=NewSectionPara><b><span lang=EN-US>Notes/Warnings<o:p></o:p></span></b></p>

<p class=Descript><span lang=EN-US><![if !supportEmptyParas]>&nbsp;<![endif]><o:p></o:p></span></p>

<p class=Descript><span lang=EN-US>The stack MUST be declared with the </span><b><span
lang=EN-US style='font-family:"Courier New"'>OS_STK</span></b><span lang=EN-US>
type.</span></p>

<p class=Descript><span lang=EN-US><![if !supportEmptyParas]>&nbsp;<![endif]><o:p></o:p></span></p>

<p class=Descript><span lang=EN-US>A task MUST always invoke one of the
services provided by &micro;C/OS-II to either wait for time to expire, suspend the
task or, wait an event to occur (wait on a mailbox, queue or semaphore).<span
style="mso-spacerun: yes">&nbsp; </span>This will allow other tasks to gain
control of the CPU.</span></p>

<p class=Descript><span lang=EN-US><![if !supportEmptyParas]>&nbsp;<![endif]><o:p></o:p></span></p>

<p class=Descript><span lang=EN-US>You should not use task priorities </span><b><span
lang=EN-US style='font-family:"Courier New"'>0</span></b><span lang=EN-US>, </span><b><span
lang=EN-US style='font-family:"Courier New"'>1</span></b><span lang=EN-US>, </span><b><span
lang=EN-US style='font-family:"Courier New"'>2, 3</span></b><span lang=EN-US>
and </span><b><span lang=EN-US style='font-family:"Courier New"'>OS_LOWEST_PRIO-3</span></b><span
lang=EN-US>, </span><b><span lang=EN-US style='font-family:"Courier New"'>OS_LOWEST_PRIO-2</span></b><span
lang=EN-US>, </span><b><span lang=EN-US style='font-family:"Courier New"'>OS_LOWEST_PRIO-1</span></b><span
lang=EN-US> and </span><b><span lang=EN-US style='font-family:"Courier New"'>OS_LOWEST_PRIO</span></b><span
lang=EN-US> because they are reserved for &micro;C/OS-II’s use.<span
style="mso-spacerun: yes">&nbsp; </span>This thus leaves you with up to 56
application tasks.</span></p>

<p class=Descript><span lang=EN-US><![if !supportEmptyParas]>&nbsp;<![endif]><o:p></o:p></span></p>

<p class=NewSectionPara><b><span lang=EN-US>Example #1<o:p></o:p></span></b></p>

<p class=NewSectionPara><span lang=EN-US><![if !supportEmptyParas]>&nbsp;<![endif]><o:p></o:p></span></p>

<p class=Descript><span lang=EN-US>This examples shows that the argument that </span><b><span
lang=EN-US style='font-family:"Courier New"'>Task1()</span></b><span
lang=EN-US> will receive is not used and thus, the pointer </span><b><span
lang=EN-US style='font-family:"Courier New"'>pdata</span></b><span lang=EN-US>
is set to </span><b><span lang=EN-US style='font-family:"Courier New"'>NULL</span></b><span
lang=EN-US>.<span style="mso-spacerun: yes">&nbsp; </span>Note that I assumed
that the stack grows from high memory to low memory because I passed the
address of the highest valid memory location of the stack </span><b><span
lang=EN-US style='font-family:"Courier New"'>Task1Stk[]</span></b><span
lang=EN-US>.<span style="mso-spacerun: yes">&nbsp; </span>If the stack grows in
the opposite direction for the processor you are using, you will need to pass </span><b><span
lang=EN-US style='font-family:"Courier New"'>Task1Stk[0]</span></b><span
lang=EN-US> as the task’s top-of-stack.</span></p>

<p class=NewSectionPara><span lang=EN-US><![if !supportEmptyParas]>&nbsp;<![endif]><o:p></o:p></span></p>

<div style='border:solid #999999 1.5pt;padding:1.0pt 1.0pt 15.0pt 1.0pt;
background:#F2F2F2;mso-shading:windowtext;mso-pattern:gray-5 auto'>

<p class=CodeSeg style='border:none;mso-border-alt:solid #999999 1.5pt;
padding:0cm;mso-padding-alt:1.0pt 1.0pt 15.0pt 1.0pt'><span lang=EN-US><span
style='mso-tab-count:1'>&nbsp;&nbsp; </span>OS_STK *Task1Stk[1024];</span></p>

<p class=CodeSeg style='border:none;mso-border-alt:solid #999999 1.5pt;
padding:0cm;mso-padding-alt:1.0pt 1.0pt 15.0pt 1.0pt'><span lang=EN-US><span
style='mso-tab-count:1'>&nbsp;&nbsp; </span>INT8U<span style="mso-spacerun:
yes">&nbsp;&nbsp; </span>Task1Data;</span></p>

<p class=CodeSeg style='border:none;mso-border-alt:solid #999999 1.5pt;
padding:0cm;mso-padding-alt:1.0pt 1.0pt 15.0pt 1.0pt'><span lang=EN-US><![if !supportEmptyParas]>&nbsp;<![endif]><o:p></o:p></span></p>

<p class=CodeSeg style='border:none;mso-border-alt:solid #999999 1.5pt;
padding:0cm;mso-padding-alt:1.0pt 1.0pt 15.0pt 1.0pt'><span lang=EN-US><![if !supportEmptyParas]>&nbsp;<![endif]><o:p></o:p></span></p>

<p class=CodeSeg style='border:none;mso-border-alt:solid #999999 1.5pt;
padding:0cm;mso-padding-alt:1.0pt 1.0pt 15.0pt 1.0pt'><span lang=EN-US><span
style='mso-tab-count:1'>&nbsp;&nbsp; </span>void main(void)</span></p>

<p class=CodeSeg style='border:none;mso-border-alt:solid #999999 1.5pt;
padding:0cm;mso-padding-alt:1.0pt 1.0pt 15.0pt 1.0pt'><span lang=EN-US><span
style='mso-tab-count:1'>&nbsp;&nbsp; </span>{</span></p>

<p class=CodeSeg style='border:none;mso-border-alt:solid #999999 1.5pt;
padding:0cm;mso-padding-alt:1.0pt 1.0pt 15.0pt 1.0pt'><span lang=EN-US><span
style='mso-tab-count:1'>&nbsp;&nbsp; </span><span style="mso-spacerun:
yes">&nbsp;&nbsp; </span>INT8U err;</span></p>

<p class=CodeSeg style='border:none;mso-border-alt:solid #999999 1.5pt;
padding:0cm;mso-padding-alt:1.0pt 1.0pt 15.0pt 1.0pt'><span lang=EN-US><![if !supportEmptyParas]>&nbsp;<![endif]><o:p></o:p></span></p>

<p class=CodeSeg style='border:none;mso-border-alt:solid #999999 1.5pt;
padding:0cm;mso-padding-alt:1.0pt 1.0pt 15.0pt 1.0pt'><span lang=EN-US><span
style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>.</span></p>

<p class=CodeSeg style='border:none;mso-border-alt:solid #999999 1.5pt;
padding:0cm;mso-padding-alt:1.0pt 1.0pt 15.0pt 1.0pt'><span lang=EN-US><span
style='mso-tab-count:1'>&nbsp;&nbsp; </span><span style="mso-spacerun:
yes">&nbsp;&nbsp; </span>OSInit();<span style="mso-spacerun:
yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</span>/* Initialize &micro;C/OS-II<span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</span>*/</span></p>

<p class=CodeSeg style='border:none;mso-border-alt:solid #999999 1.5pt;
padding:0cm;mso-padding-alt:1.0pt 1.0pt 15.0pt 1.0pt'><span lang=EN-US><span
style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>.</span></p>

<p class=CodeSeg style='border:none;mso-border-alt:solid #999999 1.5pt;
padding:0cm;mso-padding-alt:1.0pt 1.0pt 15.0pt 1.0pt'><span lang=EN-US><span
style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</span>OSTaskCreate(Task1, </span></p>

<p class=CodeSeg style='border:none;mso-border-alt:solid #999999 1.5pt;
padding:0cm;mso-padding-alt:1.0pt 1.0pt 15.0pt 1.0pt'><span lang=EN-US><span
style="mso-spacerun:
yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</span>(void *)&amp;Task1Data, </span></p>

<p class=CodeSeg style='border:none;mso-border-alt:solid #999999 1.5pt;
padding:0cm;mso-padding-alt:1.0pt 1.0pt 15.0pt 1.0pt'><span lang=EN-US><span
style="mso-spacerun:
yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</span>&amp;Task1Stk[1023], </span></p>

<p class=CodeSeg style='border:none;mso-border-alt:solid #999999 1.5pt;
padding:0cm;mso-padding-alt:1.0pt 1.0pt 15.0pt 1.0pt'><span lang=EN-US><span
style="mso-spacerun:
yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</span>25);</span></p>

<p class=CodeSeg style='border:none;mso-border-alt:solid #999999 1.5pt;
padding:0cm;mso-padding-alt:1.0pt 1.0pt 15.0pt 1.0pt'><span lang=EN-US><span
style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>.</span></p>

<p class=CodeSeg style='border:none;mso-border-alt:solid #999999 1.5pt;
padding:0cm;mso-padding-alt:1.0pt 1.0pt 15.0pt 1.0pt'><span lang=EN-US><span
style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>OSStart();<span
style="mso-spacerun:
yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</span>/* Start Multitasking<span style="mso-spacerun:
yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</span>*/</span></p>

<p class=CodeSeg style='border:none;mso-border-alt:solid #999999 1.5pt;
padding:0cm;mso-padding-alt:1.0pt 1.0pt 15.0pt 1.0pt'><span lang=EN-US><span
style='mso-tab-count:1'>&nbsp;&nbsp; </span>}</span></p>

<p class=CodeSeg style='border:none;mso-border-alt:solid #999999 1.5pt;
padding:0cm;mso-padding-alt:1.0pt 1.0pt 15.0pt 1.0pt'><span lang=EN-US><![if !supportEmptyParas]>&nbsp;<![endif]><o:p></o:p></span></p>

<p class=CodeSeg style='border:none;mso-border-alt:solid #999999 1.5pt;
padding:0cm;mso-padding-alt:1.0pt 1.0pt 15.0pt 1.0pt'><span lang=EN-US><![if !supportEmptyParas]>&nbsp;<![endif]><o:p></o:p></span></p>

<p class=CodeSeg style='border:none;mso-border-alt:solid #999999 1.5pt;

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?