?? int8u ossemquery.htm
字號(hào):
lang=EN-US style='font-family:"Courier New"'>OSSemQuery()</span></b><span
lang=EN-US> allows you to determine whether any task is waiting on the
semaphore, how many tasks are waiting (by counting the number of 1s in the </span><b><span
lang=EN-US style='font-family:"Courier New"'>.OSEventTbl[]</span></b><span
lang=EN-US> field, and obtain the semaphore count.<span style="mso-spacerun:
yes"> </span>You can use the table </span><b><span lang=EN-US
style='font-family:"Courier New"'>OSNBitsTbl[]</span></b><span lang=EN-US> to
find out how many ones are set in a given byte.<span style="mso-spacerun:
yes"> </span>Note that the size of </span><b><span lang=EN-US
style='font-family:"Courier New"'>.OSEventTbl[]</span></b><span lang=EN-US> is
established by the </span><b><span lang=EN-US style='font-family:"Courier New"'>#define</span></b><span
lang=EN-US> constant </span><b><span lang=EN-US style='font-family:"Courier New"'>OS_EVENT_TBL_SIZE</span></b><span
lang=EN-US> (see </span><span class=FileName><span lang=EN-US style='font-size:
12.0pt;font-family:"Courier New"'>uCOS_II.H</span></span><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>Arguments<o:p></o:p></span></b></p>
<p class=Descript><b><span lang=EN-US style='font-family:"Courier New"'>pevent</span></b><span
lang=EN-US> is a pointer to the semaphore.<span style="mso-spacerun:
yes"> </span>This pointer is returned to your application when the
semaphore is created (see </span><b><span lang=EN-US style='font-family:"Courier New"'>OSSemCreate()</span></b><span
lang=EN-US>).</span></p>
<p class=Descript><b><span lang=EN-US style='font-family:"Courier New"'>pdata</span></b><span
lang=EN-US> is a pointer to a data structure of type </span><b><span
lang=EN-US style='font-family:"Courier New"'>OS_SEM_DATA</span></b><span
lang=EN-US>.</span></p>
<p class=Descript><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"'>OSSemQuery()</span></b><span
lang=EN-US> returns one of these two error codes:</span></p>
<p class=Descript><span lang=EN-US><span style='mso-tab-count:1'> </span>1)
</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><span lang=EN-US><span style='mso-tab-count:1'> </span>2)
</span><b><span lang=EN-US style='font-family:"Courier New"'>OS_ERR_EVENT_TYPE</span></b><span
lang=EN-US>, if you didn’t pass a pointer to a semaphore</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>Notes/Warnings<o:p></o:p></span></b></p>
<p class=Descript><span lang=EN-US>Semaphores must be created before they are
used.</span></p>
<p class=Descript><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>
<p class=Descript><span lang=EN-US>In this example, we check the contents of
the semaphore to determine the highest priority task that is waiting for it.</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'> </span>OS_EVENT *DispSem;</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>void Task (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-spacerun: yes"> </span>OS_SEM_DATA
sem_data;</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>INT8U<span
style="mso-spacerun: yes"> </span>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>INT8U<span
style="mso-spacerun: yes">
</span>highest;<span style="mso-spacerun: yes"> </span>/* Highest
priority task waiting on semaphore */</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>INT8U<span
style="mso-spacerun: yes"> </span>x;</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>INT8U<span
style="mso-spacerun: yes"> </span><span
style="mso-spacerun: yes"> </span>y;</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]> <![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"> </span>pdata = 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-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></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>err = OSSemQuery(DispSem, &sem_data);</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>if (err == OS_NO_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>if (sem_data.OSEventGrp != 0x00) {</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>y<span style="mso-spacerun: yes">
</span>= OSUnMapTbl[sem_data.OSEventGrp]; </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>x<span
style="mso-spacerun: yes"> </span>=
OSUnMapTbl[sem_data.OSEventTbl[y]];</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>highest = (y << 3) + x;<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-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><span lang=EN-US
style='font-size:9.0pt'><o:p></o:p></span></p>
</div>
<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>
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -