20 #include "lwip/stats.h"
21 #include "lwip/debug.h"
22 #include "lwip/pbuf.h"
89 u32 NumTicksElasped=(end<start)?UINT_MAX-start+end:start-end;
91 return(NumTicksElasped/295000);
104 thp.
stack = malloc(stacksize);
110 dbgprintf(
"sys_thread_new: CreateThread failed, EC: %d\n", tid);
116 dbgprintf(
"sys_thread_new: StartThread failed, EC: %d\n", rv);
121 dbgprintf(
"sys_thread_new(): %d\n", tid);
144 printf(
"sys_mbox_new: CreateMbx failed. Code: %d\n", MBox->
MessageCountSema);
150 printf(
"sys_mbox_new: Out of memory.\n");
167 Message=(*pMBox)->FirstMessage;
170 NextMessage=Message->
next;
204 *message=mBox->FirstMessage;
207 NextMessage=(
unsigned int)(*message)->
next!=0xFFFFFFFF?(*message)->next:
NULL;
210 if(mBox->FirstMessage == mBox->LastMessage)
211 mBox->LastMessage =
NULL;
213 mBox->FirstMessage = NextMessage;
221 unsigned short int ticksToWait;
222 int alarmID, threadID;
228 ticksToWait = ticks > USHRT_MAX ? USHRT_MAX : ticks;
237 ticks -= ticksToWait;
253 if(
result == mBox->MessageCountSema)
267 if(
PollSema(mBox->MessageCountSema)==mBox->MessageCountSema)
280 unsigned int TimeElasped, start;
285 start=clock()/(CLOCKS_PER_SEC/1000);
291 return SYS_ARCH_TIMEOUT;
295 TimeElasped=((
result=
PollMbx(&pmsg, pMBox))!=0)?SYS_MBOX_EMPTY:0;
323 if((*mbox)->FirstMessage==
NULL) (*mbox)->FirstMessage=msg;
324 if((*mbox)->LastMessage!=
NULL) (*mbox)->LastMessage->
next=msg;
325 (*mbox)->LastMessage=msg;
364 printf(
"sys_sem_new: CreateSema failed, EC: %d\n", *
sem);
368 dbgprintf(
"sys_sem_new: CreateSema (CNT: %d) %d\n", count, *
sem);
394 start=clock()/(CLOCKS_PER_SEC/1000);
398 result=(WaitTime <= timeout ? WaitTime : timeout);
400 else result=SYS_ARCH_TIMEOUT;
430 dbgprintf(
"sys_init: Initializing...\n");
452 return(clock()/(CLOCKS_PER_SEC/1000));
469 size_t sz = n * size;
471 if ((ptr = memalign(64, sz)) ==
NULL)
s32 CreateSema(ee_sema_t *sema)
s32 SignalSema(s32 sema_id)
s32 DeleteSema(s32 sema_id)
s32 CreateThread(ee_thread_t *thread)
s32 iReleaseWaitThread(s32 thread_id)
s32 PollSema(s32 sema_id)
s32 WaitSema(s32 sema_id)
s32 StartThread(s32 thread_id, void *args)
s32 DeleteThread(s32 thread_id)
s32 SetAlarm(u16 time, void(*callback)(s32 alarm_id, u16 time, void *common), void *common)
s32 ReleaseAlarm(s32 alarm_id)
#define dbgprintf(args...)
arch_message * FirstMessage
arch_message * LastMessage
struct st_arch_message * next
static int WaitSemaTimeout(int sema, unsigned int msec)
int sys_sem_valid(sys_sem_t *sem)
sys_thread_t sys_thread_new(const char *name, lwip_thread_fn thread, void *arg, int stacksize, int prio)
static arch_message * free_head
static u32_t ComputeTimeDiff(u32 start, u32 end)
u32_t sys_arch_mbox_tryfetch(sys_mbox_t *pMBox, void **ppvMSG)
static int ReceiveMbx(arch_message **message, sys_mbox_t mBox, u32_t timeout)
static arch_message * alloc_msg(void)
void sys_sem_set_invalid(sys_sem_t *sem)
void * ps2ip_calloc64(size_t n, size_t size)
void sys_mbox_set_invalid(sys_mbox_t *mbox)
static unsigned int mSec2HSyncTicks(unsigned int msec)
static void free_msg(arch_message *msg)
void sys_mbox_post(sys_mbox_t *mbox, void *sys_msg)
sys_prot_t sys_arch_protect(void)
u32_t sys_arch_mbox_fetch(sys_mbox_t *pMBox, void **ppvMSG, u32_t u32Timeout)
void sys_sem_free(sys_sem_t *Sema)
static u32_t sys_arch_mbox_fetch_internal(sys_mbox_t pMBox, void **ppvMSG, u32_t u32Timeout, char block)
void sys_mbox_free(sys_mbox_t *pMBox)
int sys_mbox_valid(sys_mbox_t *mbox)
static void RetrieveMbxInternal(sys_mbox_t mBox, arch_message **message)
static void TimeoutHandler(s32 alarm_id, u16 time, void *pvArg)
void sys_sem_signal(sys_sem_t *Sema)
err_t sys_mbox_new(sys_mbox_t *mbox, int size)
static arch_message * try_alloc_msg(void)
static int PollMbx(arch_message **message, sys_mbox_t mBox)
static void SendMbx(sys_mbox_t *mbox, arch_message *msg, void *sys_msg)
unsigned short int hsyncTicksPerMSec
u32_t sys_arch_sem_wait(sys_sem_t *sema, u32_t timeout)
static arch_message msg_pool[SYS_MAX_MESSAGES]
err_t sys_sem_new(sys_sem_t *sem, u8_t count)
void sys_arch_unprotect(sys_prot_t level)
err_t sys_mbox_trypost(sys_mbox_t *mbox, void *sys_msg)