<div>hi,</div><div><br></div><div>I test binary semaphore used for mutex,but I find it can not block </div><div><br></div><div>my simple test code is</div><div><div>struct zynq_qspi</div><div>{</div><div>    rtems_id sem_bus;</div><div><span class="Apple-tab-span" style="white-space:pre">      </span>rtems_id sem_done;</div><div>    bool inited;</div><div>    const uint8_t *txbuf;</div><div><span class="Apple-tab-span" style="white-space:pre">        </span>uint8_t *rxbuf;</div><div><span class="Apple-tab-span" style="white-space:pre">      </span>int32_t  bytes_to_transfer;</div><div><span class="Apple-tab-span" style="white-space:pre">     </span>int32_t  bytes_to_receive;</div><div>};</div><div>static  struct zynq_qspi  zynq_qspi_inst={</div><div>  .inited = false,</div><div>  .txbuf = 0,</div><div>  .rxbuf = 0,</div><div>  .bytes_to_transfer = 0,</div><div>  .bytes_to_receive = 0</div><div>};</div><div>int  zynq_qspi_init(void)</div><div>{</div><div><span class="Apple-tab-span" style="white-space:pre">    </span>rtems_status_code status;</div><div><span class="Apple-tab-span" style="white-space:pre">    </span>status = rtems_semaphore_create(</div><div><span class="Apple-tab-span" style="white-space:pre">                     </span>rtems_build_name('q', 's', 'p', 'i'), 0,</div><div>                        RTEMS_BINARY_SEMAPHORE | RTEMS_PRIORITY | RTEMS_INHERIT_PRIORITY,0, &zynq_qspi_inst.sem_bus);</div><div><br></div><div><span class="Apple-tab-span" style="white-space:pre">        </span>if (status != RTEMS_SUCCESSFUL)</div><div><span class="Apple-tab-span" style="white-space:pre">      </span>{</div><div><span class="Apple-tab-span" style="white-space:pre">            </span>printf("create qspi bus sem failure!\n");</div><div><span class="Apple-tab-span" style="white-space:pre">          </span>return -1;</div><div><span class="Apple-tab-span" style="white-space:pre">   </span>}</div><div>/*below is test*/</div><div>    status = rtems_semaphore_obtain(zynq_qspi_inst.sem_bus, RTEMS_WAIT, 100);</div><div><span class="Apple-tab-span" style="white-space:pre">      </span>if (status != RTEMS_SUCCESSFUL)</div><div><span class="Apple-tab-span" style="white-space:pre">      </span>{</div><div><span class="Apple-tab-span" style="white-space:pre">            </span>printf("%d get qspi bus sem failure!\n", __LINE__);</div><div><span class="Apple-tab-span" style="white-space:pre">                </span>return -1;</div><div><span class="Apple-tab-span" style="white-space:pre">   </span>}</div><div><span class="Apple-tab-span" style="white-space:pre">    </span>status = rtems_semaphore_obtain(zynq_qspi_inst.sem_bus, RTEMS_WAIT, 100);</div><div><span class="Apple-tab-span" style="white-space:pre">    </span>if (status != RTEMS_SUCCESSFUL)</div><div><span class="Apple-tab-span" style="white-space:pre">      </span>{</div><div><span class="Apple-tab-span" style="white-space:pre">            </span>printf("%d get qspi bus sem failure!\n", __LINE__);</div><div><span class="Apple-tab-span" style="white-space:pre">                </span>return -1;</div><div><span class="Apple-tab-span" style="white-space:pre">   </span>}</div><div><span class="Apple-tab-span" style="white-space:pre">    </span>status = rtems_semaphore_obtain(zynq_qspi_inst.sem_bus, RTEMS_WAIT, 100);</div><div><span class="Apple-tab-span" style="white-space:pre">    </span>if (status != RTEMS_SUCCESSFUL)</div><div><span class="Apple-tab-span" style="white-space:pre">      </span>{</div><div><span class="Apple-tab-span" style="white-space:pre">            </span>printf("%d get qspi bus sem failure!\n", __LINE__);</div><div><span class="Apple-tab-span" style="white-space:pre">                </span>return -1;</div><div><span class="Apple-tab-span" style="white-space:pre">   </span>}</div><div><span class="Apple-tab-span" style="white-space:pre">    </span>/*status = rtems_semaphore_create(</div><div><span class="Apple-tab-span" style="white-space:pre">                   </span>rtems_build_name('q', 's', 'p', 'd'), 0,</div><div><span class="Apple-tab-span" style="white-space:pre">                     </span>RTEMS_BINARY_SEMAPHORE|RTEMS_GLOBAL, 0, &zynq_qspi_inst.sem_done);</div><div><br></div><div><span class="Apple-tab-span" style="white-space:pre">      </span>if (status != RTEMS_SUCCESSFUL)</div><div><span class="Apple-tab-span" style="white-space:pre">      </span>{</div><div><span class="Apple-tab-span" style="white-space:pre">            </span>printf("create qspi done sem failure!\n");</div><div><span class="Apple-tab-span" style="white-space:pre">         </span>rtems_semaphore_delete(zynq_qspi_inst.sem_bus);</div><div><span class="Apple-tab-span" style="white-space:pre">              </span>return -1;</div><div><span class="Apple-tab-span" style="white-space:pre">   </span>}</div><div><br></div><div>    zynq_slcr_qspi_cfg();</div><div>    zynq_qspi_cfg();</div><div>    status = rtems_interrupt_handler_install(ZYNQ_QSPI_IRQ_NUM,</div><div><span class="Apple-tab-span" style="white-space:pre">                    </span>"qspi", RTEMS_INTERRUPT_UNIQUE, zynq_qspi_interrupt,</div><div><span class="Apple-tab-span" style="white-space:pre">                       </span>(rtems_irq_hdl_param)(&zynq_qspi_inst));</div><div><span class="Apple-tab-span" style="white-space:pre"> </span>if (status != RTEMS_SUCCESSFUL)</div><div><span class="Apple-tab-span" style="white-space:pre">      </span>{</div><div><span class="Apple-tab-span" style="white-space:pre">            </span>printf("error:register zynq qspi irq failure!\n ");</div><div><span class="Apple-tab-span" style="white-space:pre">                </span>rtems_semaphore_delete(zynq_qspi_inst.sem_bus);</div><div><span class="Apple-tab-span" style="white-space:pre">              </span>rtems_semaphore_delete(zynq_qspi_inst.sem_done);</div><div><span class="Apple-tab-span" style="white-space:pre">             </span>return -1;</div><div><span class="Apple-tab-span" style="white-space:pre">   </span>}</div><div><span class="Apple-tab-span" style="white-space:pre">    </span>*/</div><div><span class="Apple-tab-span" style="white-space:pre">   </span>zynq_qspi_inst.inited = true;</div><div><span class="Apple-tab-span" style="white-space:pre">        </span>return 0;</div><div>}</div></div><div><br></div><div>I create semaphore with count is 0,so I think I should get sem failure,but it sucessfully,change RTEMS_BINARY_SEMAPHORE | RTEMS_PRIORITY | RTEMS_INHERIT_PRIORITY to default attribute will block .</div><div>   I used git version of rtems4.12</div><div>     </div><div>  </div>