📄 int8u ostasksuspend.htm
字号:
9.0pt;font-family:"Times New Roman";mso-fareast-font-family:宋体;mso-font-kerning:
22.0pt;mso-ansi-language:EN-US;mso-fareast-language:ZH-CN;mso-bidi-language:
AR-SA'><br clear=all style='page-break-before:always'>
</span></b>
<h1><span lang=EN-US style='font-size:14.0pt;mso-bidi-font-size:9.0pt'>INT8U
OSTaskSuspend(INT8U prio);<o:p></o:p></span></h1>
<p class=Descript><b><span lang=EN-US style='font-family:"Courier New"'>OSTaskSuspend()</span></b><span
lang=EN-US> allows your application to suspend (or block) execution of a task
unconditionally.<span style="mso-spacerun: yes"> </span>The calling task
can be suspended by specifying its own priority number or </span><b><span
lang=EN-US style='font-family:"Courier New"'>OS_PRIO_SELF</span></b><span
lang=EN-US> if the task doesn't know its own priority number.<span
style="mso-spacerun: yes"> </span>In this case, another task will need to
resume the suspended task.<span style="mso-spacerun: yes"> </span>If the
current task is suspended, rescheduling will occur and µC/OS-II will run the
next highest priority task ready to run.<span style="mso-spacerun: yes">
</span>The only way to resume a suspended task is to call </span><b><span
lang=EN-US style='font-family:"Courier New"'>OSTaskResume()</span></b><span
lang=EN-US>.<span style="mso-spacerun: yes"> </span></span></p>
<p class=Descript><span lang=EN-US><![if !supportEmptyParas]> <![endif]><o:p></o:p></span></p>
<p class=Descript><span lang=EN-US>Task suspension is additive.<span
style="mso-spacerun: yes"> </span>This means that if the task being
suspended is delayed until ‘n’ ticks expire then the task will be resumed only
when both the time expires and the suspension is removed.<span
style="mso-spacerun: yes"> </span>Also, if the suspended task is waiting
for a semaphore and the semaphore is signaled then the task will be removed
from the semaphore wait list (if it was the highest priority task waiting for
the semaphore) but execution will not be resumed until the suspension is
removed.</span></p>
<p class=NewSectionPara><span lang=EN-US><![if !supportEmptyParas]> <![endif]><o:p></o:p></span></p>
<p class=NewSectionPara><b><span lang=EN-US>Arguments<o:p></o:p></span></b></p>
<p class=Descript><b><span lang=EN-US style='font-family:"Courier New"'>prio</span></b><span
lang=EN-US> specifies the priority of the task to suspend. You can suspend the
calling task by passing </span><b><span lang=EN-US style='font-family:"Courier New"'>OS_PRIO_SELF</span></b><span
lang=EN-US> in which case, the next highest priority task will be executed.</span></p>
<p class=NewSectionPara><span lang=EN-US><![if !supportEmptyParas]> <![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=Descript><b><span lang=EN-US style='font-family:"Courier New"'>OSTaskSuspend()</span></b><span
lang=EN-US> returns one of the following error codes:</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'> </span></span><b><span
lang=EN-US style='font-family:"Courier New"'>OS_NO_ERR</span></b><span
lang=EN-US>, if the call 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'> </span></span><b><span
lang=EN-US style='font-family:"Courier New"'>OS_TASK_SUSPEND_IDLE</span></b><span
lang=EN-US>, if you attempted to suspend µC/OS-II’s idle task.<span
style="mso-spacerun: yes"> </span>This is of course not allowed.</span></p>
<p class=Descript style='margin-left:45.0pt;text-indent:-18.0pt'><span
lang=EN-US>3)<span style='mso-tab-count:1'> </span></span><b><span
lang=EN-US style='font-family:"Courier New"'>OS_PRIO_INVALID</span></b><span
lang=EN-US>, if you specified a priority higher than the maximum allowed (i.e.
you specified a priority >= </span><b><span lang=EN-US style='font-family:
"Courier New"'>OS_LOWEST_PRIO</span></b><span lang=EN-US>) or, you didn't
specify </span><b><span lang=EN-US style='font-family:"Courier New"'>OS_PRIO_SELF</span></b><span
lang=EN-US>.</span></p>
<p class=Descript style='margin-left:45.0pt;text-indent:-18.0pt'><span
lang=EN-US>4)<span style='mso-tab-count:1'> </span></span><b><span
lang=EN-US style='font-family:"Courier New"'>OS_TASK_SUSPEND_PRIO</span></b><span
lang=EN-US>, if the task you are attempting to suspend does not exist.</span></p>
<p class=NewSectionPara><b><span lang=EN-US><![if !supportEmptyParas]> <![endif]><o:p></o:p></span></b></p>
<p class=NewSectionPara><b><span lang=EN-US>Notes/Warnings<o:p></o:p></span></b></p>
<p class=Descript><b><span lang=EN-US style='font-family:"Courier New"'>OSTaskSuspend()</span></b><span
lang=EN-US> and </span><b><span lang=EN-US style='font-family:"Courier New"'>OSTaskResume()
</span></b><span lang=EN-US>must be used in pair.<span style="mso-spacerun:
yes"> </span></span></p>
<p class=Descript><span lang=EN-US>A suspended task can only be resumed by </span><b><span
lang=EN-US style='font-family:"Courier New"'>OSTaskResume()</span></b><span
lang=EN-US>.</span></p>
<p class=NewSectionPara><span lang=EN-US><![if !supportEmptyParas]> <![endif]><o:p></o:p></span></p>
<p class=NewSectionPara><b><span lang=EN-US>Example<o:p></o:p></span></b></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'> </span>void TaskX(void *pdata)</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'> </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'> </span><span style="mso-spacerun:
yes"> </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><span
style="mso-spacerun: yes"> </span>for (;;) {</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">
</span>. <span style='mso-tab-count:8'> </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">
</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'> </span><span style="mso-spacerun:
yes"> </span><span style='mso-tab-count:1'> </span>err
= OSTaskSuspend(OS_PRIO_SELF);<span style='mso-tab-count:1'> </span> /*
Suspend current task<span style="mso-spacerun: yes">
</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">
</span>.<span style='mso-tab-count:3'> </span>/*
Execution continues when ANOTHER task ..<span style="mso-spacerun:
yes"> </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">
</span>.<span style="mso-spacerun:
yes">
</span>/* .. explicitly resumes this task.<span style="mso-spacerun:
yes">
</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">
</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"> </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'> </span>}</span></p>
</div>
<p class=Code><span lang=EN-US style='font-size:9.0pt'><![if !supportEmptyParas]> <![endif]><o:p></o:p></span></p>
<p class=Code><span lang=EN-US style='font-size:9.0pt'><![if !supportEmptyParas]> <![endif]><o:p></o:p></span></p>
<p class=Code><span lang=EN-US style='font-size:9.0pt'><![if !supportEmptyParas]> <![endif]><o:p></o:p></span></p>
</div>
<span lang=EN-US style='font-size:10.5pt;mso-bidi-font-size:12.0pt;font-family:
"Times New Roman";mso-fareast-font-family:宋体;mso-font-kerning:1.0pt;mso-ansi-language:
EN-US;mso-fareast-language:ZH-CN;mso-bidi-language:AR-SA'><br clear=all
style='page-break-before:always;mso-break-type:section-break'>
</span>
<div class=Section2 style='layout-grid:15.6pt'>
<p class=MsoNormal><span lang=EN-US><![if !supportEmptyParas]> <![endif]><o:p></o:p></span></p>
</div>
</body>
</html>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -