<html xmlns:v="urn:schemas-microsoft-com:vml" xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:w="urn:schemas-microsoft-com:office:word" xmlns:m="http://schemas.microsoft.com/office/2004/12/omml" xmlns="http://www.w3.org/TR/REC-html40"><head><meta http-equiv=Content-Type content="text/html; charset=koi8-r"><meta name=Generator content="Microsoft Word 12 (filtered medium)"><style><!--
/* Font Definitions */
@font-face
        {font-family:Calibri;
        panose-1:2 15 5 2 2 2 4 3 2 4;}
/* Style Definitions */
p.MsoNormal, li.MsoNormal, div.MsoNormal
        {margin:0cm;
        margin-bottom:.0001pt;
        font-size:11.0pt;
        font-family:"Calibri","sans-serif";}
a:link, span.MsoHyperlink
        {mso-style-priority:99;
        color:blue;
        text-decoration:underline;}
a:visited, span.MsoHyperlinkFollowed
        {mso-style-priority:99;
        color:purple;
        text-decoration:underline;}
span.EmailStyle17
        {mso-style-type:personal-compose;
        font-family:"Calibri","sans-serif";
        color:windowtext;}
.MsoChpDefault
        {mso-style-type:export-only;}
@page WordSection1
        {size:612.0pt 792.0pt;
        margin:2.0cm 42.5pt 2.0cm 3.0cm;}
div.WordSection1
        {page:WordSection1;}
--></style><!--[if gte mso 9]><xml>
<o:shapedefaults v:ext="edit" spidmax="1026" />
</xml><![endif]--><!--[if gte mso 9]><xml>
<o:shapelayout v:ext="edit">
<o:idmap v:ext="edit" data="1" />
</o:shapelayout></xml><![endif]--></head><body lang=RU link=blue vlink=purple><div class=WordSection1><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><span lang=EN-US>Hello.<o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US><o:p> </o:p></span></p><p class=MsoNormal><span lang=EN-US>I am trying to get state of my binary semaphore. I need state, because I release semaphore at my interrupt handler (If semaphore didn’t obtained, I must print error). <o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US>I found similar sample in testsuites (sptests/spincritical06).<o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US><o:p> </o:p></span></p><p class=MsoNormal><span lang=EN-US style='font-family:"Times New Roman","serif"'>uint32_t getState(rtems_id Semaphore)<o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US style='font-family:"Times New Roman","serif"'>{<o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US style='font-family:"Times New Roman","serif"'>š ššššššššš Objects_Locationsš location;<o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US style='font-family:"Times New Roman","serif"'>š ššššššššš Semaphore_Control *sem;<o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US style='font-family:"Times New Roman","serif"'>š ššššššššš CORE_mutex_Controlšššššššššš *the_mutex;<o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US style='font-family:"Times New Roman","serif"'><o:p> </o:p></span></p><p class=MsoNormal><span lang=EN-US style='font-family:"Times New Roman","serif"'>š ššššššššš sem = (Semaphore_Control *)_Objects_Get(<o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US style='font-family:"Times New Roman","serif"'>š ššššššššš šš&_Semaphore_Information, Semaphore, &location );<o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US style='font-family:"Times New Roman","serif"'><o:p> </o:p></span></p><p class=MsoNormal><span lang=EN-US style='font-family:"Times New Roman","serif"'>š ššššššššš if ( location != OBJECTS_LOCAL ) {<o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US style='font-family:"Times New Roman","serif"'>š ššššššššš ššššššššššš printf( "Bad object lookup", location);<o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US style='font-family:"Times New Roman","serif"'>š ššššššššš }<o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US style='font-family:"Times New Roman","serif"'><o:p> </o:p></span></p><p class=MsoNormal style='text-indent:35.4pt'><span lang=EN-US style='font-family:"Times New Roman","serif"'>the_mutex = &sem->Core_control.mutex;<o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US>…<o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US>Print(“lock %x\n”, </span><span lang=EN-US style='font-family:"Times New Roman","serif"'>the_mutex->lock);</span><span lang=EN-US><o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US>}<o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US>At my interrupt handler I print elements of structure </span><span lang=EN-US style='font-family:"Times New Roman","serif"'>CORE_mutex_Control:<o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US style='font-family:"Times New Roman","serif"'>typedef struct {<o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US style='font-family:"Times New Roman","serif"'>…<o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US>uint32_tššššššššššššššš lock;<o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US>š uint32_tššššššššššššššš nest_count;<o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US>š uint32_tššššššššššššššš blocked_count;<o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US>…<o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US>}šš CORE_mutex_Control;<o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US><o:p> </o:p></span></p><p class=MsoNormal><span lang=EN-US><o:p> </o:p></span></p><p class=MsoNormal><span lang=EN-US>At all variants:<o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US>nest_count = 1<o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US>lock = 0<o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US>blocked count increase after every rtems_semaphore_send.<o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US><o:p> </o:p></span></p><p class=MsoNormal><span lang=EN-US>Elements don’t change after rtems_semaphore_release<o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US><o:p> </o:p></span></p><p class=MsoNormal><span lang=EN-US>Please, help me. How to get real state?<o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US><o:p> </o:p></span></p><p class=MsoNormal><span lang=EN-US>Evgeniy<o:p></o:p></span></p></div></body></html>