提交 cf618494 创建 作者: Silas Boyd-Wickizer's avatar Silas Boyd-Wickizer

More lwIP sys_arch.c semaphore stuff

上级 ad8d4f37
......@@ -21,6 +21,7 @@ typedef struct sys_mbox {
typedef struct sys_sem {
struct spinlock s;
struct condvar c;
volatile int invalid;
volatile u8 count;
} sys_sem_t;
......
......@@ -114,7 +114,17 @@ done:
u32_t
sys_arch_mbox_tryfetch(sys_mbox_t *mbox, void **msg)
{
DIE;
u32_t r = SYS_MBOX_EMPTY;
acquire(&mbox->s);
if (mbox->head - mbox->tail != 0) {
if (msg)
*msg = mbox->msg[mbox->tail % MBOXSLOTS];
mbox->tail++;
r = 0;
}
release(&mbox->s);
return r;
}
//
......@@ -126,25 +136,25 @@ sys_sem_new(sys_sem_t *sem, u8_t count)
initlock(&sem->s, "lwIP sem");
initcondvar(&sem->c, "lwIP condvar");
sem->count = count;
sem->invalid = 0;
return ERR_OK;
}
void
sys_sem_free(sys_sem_t *sem)
{
DIE;
}
void
sys_sem_set_invalid(sys_sem_t *sem)
{
DIE;
sem->invalid = 1;
}
int
sys_sem_valid(sys_sem_t *sem)
{
DIE;
return !sem->invalid;
}
void
......
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论