rtems RTEMS_BINARY_SEMAPHORE can not block
yao0718
29171383 at qq.com
Sat Dec 17 05:56:49 UTC 2016
hi,
I test binary semaphore used for mutex,but I find it can not block
my simple test code is
struct zynq_qspi
{
rtems_id sem_bus;
rtems_id sem_done;
bool inited;
const uint8_t *txbuf;
uint8_t *rxbuf;
int32_t bytes_to_transfer;
int32_t bytes_to_receive;
};
static struct zynq_qspi zynq_qspi_inst={
.inited = false,
.txbuf = 0,
.rxbuf = 0,
.bytes_to_transfer = 0,
.bytes_to_receive = 0
};
int zynq_qspi_init(void)
{
rtems_status_code status;
status = rtems_semaphore_create(
rtems_build_name('q', 's', 'p', 'i'), 0,
RTEMS_BINARY_SEMAPHORE | RTEMS_PRIORITY | RTEMS_INHERIT_PRIORITY,0, &zynq_qspi_inst.sem_bus);
if (status != RTEMS_SUCCESSFUL)
{
printf("create qspi bus sem failure!\n");
return -1;
}
/*below is test*/
status = rtems_semaphore_obtain(zynq_qspi_inst.sem_bus, RTEMS_WAIT, 100);
if (status != RTEMS_SUCCESSFUL)
{
printf("%d get qspi bus sem failure!\n", __LINE__);
return -1;
}
status = rtems_semaphore_obtain(zynq_qspi_inst.sem_bus, RTEMS_WAIT, 100);
if (status != RTEMS_SUCCESSFUL)
{
printf("%d get qspi bus sem failure!\n", __LINE__);
return -1;
}
status = rtems_semaphore_obtain(zynq_qspi_inst.sem_bus, RTEMS_WAIT, 100);
if (status != RTEMS_SUCCESSFUL)
{
printf("%d get qspi bus sem failure!\n", __LINE__);
return -1;
}
/*status = rtems_semaphore_create(
rtems_build_name('q', 's', 'p', 'd'), 0,
RTEMS_BINARY_SEMAPHORE|RTEMS_GLOBAL, 0, &zynq_qspi_inst.sem_done);
if (status != RTEMS_SUCCESSFUL)
{
printf("create qspi done sem failure!\n");
rtems_semaphore_delete(zynq_qspi_inst.sem_bus);
return -1;
}
zynq_slcr_qspi_cfg();
zynq_qspi_cfg();
status = rtems_interrupt_handler_install(ZYNQ_QSPI_IRQ_NUM,
"qspi", RTEMS_INTERRUPT_UNIQUE, zynq_qspi_interrupt,
(rtems_irq_hdl_param)(&zynq_qspi_inst));
if (status != RTEMS_SUCCESSFUL)
{
printf("error:register zynq qspi irq failure!\n ");
rtems_semaphore_delete(zynq_qspi_inst.sem_bus);
rtems_semaphore_delete(zynq_qspi_inst.sem_done);
return -1;
}
*/
zynq_qspi_inst.inited = true;
return 0;
}
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 .
I used git version of rtems4.12
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.rtems.org/pipermail/devel/attachments/20161217/c2a0f9d9/attachment-0001.html>
More information about the devel
mailing list