📄 stos.h
字号:
#if defined(MODULE)
#define STOS_TaskLock() task_lock(current)
#define STOS_TaskUnlock() task_unlock(current)
#else
#define STOS_TaskLock() locker_lock(compat_mutex)
#define STOS_TaskUnlock() locker_unlock(compat_mutex)
#endif
#elif defined(ST_OS20) || defined(ST_OS21)
#define STOS_TaskLock() task_lock()
#define STOS_TaskUnlock() task_unlock()
#endif
/* Time management */
#if defined(ST_OSLINUX)
#define STOS_time_now() time_now()
#define STOS_time_minus(t1,t2) time_minus(t1,t2)
#define STOS_time_plus(t1,t2) time_plus(t1,t2)
#define STOS_time_after(t1,t2) time_after_STAPI(t1,t2)
#elif defined(ST_OS20)
#define STOS_time_now() time_now()
#define STOS_time_minus(t1,t2) time_minus(t1,t2)
#define STOS_time_plus(t1,t2) time_plus(t1,t2)
#define STOS_time_after(t1,t2) time_after(t1,t2)
#elif defined(ST_OS21)
#define STOS_time_now() time_now()
#define STOS_time_minus(t1,t2) time_minus(t1,t2)
#define STOS_time_plus(t1,t2) time_plus(t1,t2)
#define STOS_time_after(t1,t2) time_after(t1,t2)
#endif
/* Mutex related functions */
#if defined(ST_OSLINUX)
#define STOS_MutexCreateFifo() semaphore_create_fifo(1)
#define STOS_MutexCreatePriority() semaphore_create_priority(1)
#define STOS_MutexDelete(mutex) semaphore_delete(mutex)
#define STOS_MutexLock(mutex) semaphore_wait(mutex)
#define STOS_MutexRelease(mutex) semaphore_signal(mutex)
#elif defined(ST_OS21)
#define STOS_MutexCreateFifo() mutex_create_fifo()
#define STOS_MutexCreatePriority() mutex_create_priority()
#define STOS_MutexDelete(mutex) mutex_delete(mutex)
#define STOS_MutexLock(mutex) mutex_lock(mutex)
#define STOS_MutexRelease(mutex) mutex_release(mutex)
#elif defined(ST_OS20)
#define STOS_MutexCreateFifo() semaphore_create_fifo(1)
#define STOS_MutexCreatePriority() semaphore_create_priority(1)
#define STOS_MutexDelete(mutex) semaphore_delete(mutex)
#define STOS_MutexLock(mutex) semaphore_wait(mutex)
#define STOS_MutexRelease(mutex) semaphore_signal(mutex)
#endif
/* Delays related functions */
#ifdef ST_OSLINUX
#ifdef MODULE
#ifdef STOS_CHECK_PARAMETERS
#define STOS_TaskDelay(ticks) \
{ \
if ((ticks) <= 0) \
{ \
printk("%s(%d): WARNING !!! Inadequate number of ticks (0x%.8x), this may hide problem !\n", __FUNCTION__, __LINE__, (U32)(ticks)); \
} \
if ((ticks) >= 0) \
{ \
/* Will perform rescheduling with delay of about the ms */ \
/* Transforming jiffies (actually HZ) in ms */ \
msleep(((ticks) * 1000) / (unsigned int) STLINUX_GetClocksPerSecond()); \
} \
}
#define STOS_TaskDelayUs(microsec) \
{ \
if ((microsec) <= 1000000/STLINUX_GetClocksPerSecond()) \
{ \
printk("%s(%d): WARNING !!! Inadequate number of us (0x%.8x), this may hide problem !\n", __FUNCTION__, __LINE__, (U32)(microsec)); \
} \
if ((microsec) >= 0) \
{ \
msleep((microsec)/1000); \
} \
}
#else
#define STOS_TaskDelay(ticks) \
if ((ticks) >= 0) \
{ \
/* Will perform rescheduling with delay of about the ms */ \
/* Transforming jiffies (actually HZ) in ms */ \
msleep(((ticks) * 1000) / (unsigned int) STLINUX_GetClocksPerSecond()); \
}
#define STOS_TaskDelayUs(microsec) \
if ((microsec) >= 0) \
{ \
msleep((microsec)/1000); \
}
#endif /* STOS_CHECK_PARAMETERS */
#define STOS_TaskDelayUntil(timeout) \
{ \
int task_delay_until_timeout = STOS_time_minus((timeout), STOS_time_now()); \
STOS_TaskDelay(task_delay_until_timeout); \
}
#else
void STOS_TaskDelay(int ticks);
void STOS_TaskDelayUs(int microsec);
void STOS_TaskDelayUntil(STOS_Clock_t timeout);
#endif /* MODULE */
#elif defined (ST_OS21) || defined (ST_OS20)
#define STOS_TaskDelay(ticks) task_delay(ticks)
#define STOS_TaskDelayUntil(timeout) task_delay_until(timeout)
#define STOS_TaskDelayUs(microsec) task_delay(((microsec)*ST_GetClocksPerSecond())/1000000)
#endif
/* Task scheduling related functions */
#ifdef ST_OSLINUX
#ifdef MODULE
#define STOS_TaskSchedule() schedule()
#else
#define STOS_TaskSchedule() sched_yield()
#endif
#define STOS_TaskYield() STOS_TaskSchedule()
#elif defined (ST_OS21)
#define STOS_TaskSchedule() task_reschedule()
#define STOS_TaskYield() task_yield()
#elif defined (ST_OS20)
#define STOS_TaskSchedule() task_reschedule()
#define STOS_TaskYield() STOS_TaskSchedule()
#endif
/* Interrupts management */
#define STOS_InterruptLock() interrupt_lock()
#define STOS_InterruptUnlock() interrupt_unlock()
#ifdef ST_OSLINUX
#ifdef MODULE
#define STOS_INTERRUPT_DECLARE(Fct, Param) irqreturn_t Fct(int irq, void* Param, struct pt_regs* regs)
#define STOS_INTERRUPT_PROTOTYPE(Fct) irqreturn_t(*Fct)(int, void* , struct pt_regs*)
#define STOS_INTERRUPT_CAST(Fct) (irqreturn_t(*)(int, void* , struct pt_regs* ))Fct
#define STOS_INTERRUPT_EXIT(ret) return (ret == STOS_SUCCESS ? IRQ_HANDLED : IRQ_NONE)
#define STOS_InterruptEnable(Number,Level) (STOS_SUCCESS)
#define STOS_InterruptDisable(Number,Level) (STOS_SUCCESS)
#else
#define STOS_INTERRUPT_DECLARE(Fct, Param) void Fct(void * Param)
#define STOS_INTERRUPT_PROTOTYPE(Fct) void(*Fct)(void*)
#define STOS_INTERRUPT_CAST(Fct) (void(*)(void*))Fct
#define STOS_INTERRUPT_EXIT(ret) return
#define STOS_InterruptEnable(Number,Level) (STOS_FAILURE)
#define STOS_InterruptDisable(Number,Level) (STOS_FAILURE)
#endif
#elif defined ST_OS21
#define STOS_INTERRUPT_DECLARE(Fct, Param) int Fct(void * Param)
#define STOS_INTERRUPT_PROTOTYPE(Fct) int(*Fct)(void*)
#define STOS_INTERRUPT_CAST(Fct) (int(*)(void*))Fct
#define STOS_INTERRUPT_EXIT(ret) return(ret == STOS_SUCCESS ? OS21_SUCCESS : OS21_FAILURE)
#define STOS_InterruptEnable(Number,Level) (interrupt_enable(interrupt_handle(Number)) == 0 ? STOS_SUCCESS : STOS_FAILURE)
#define STOS_InterruptDisable(Number,Level) (interrupt_disable(interrupt_handle(Number)) == 0 ? STOS_SUCCESS : STOS_FAILURE)
#elif defined ST_OS20
#define STOS_INTERRUPT_DECLARE(Fct, Param) void Fct(void * Param)
#define STOS_INTERRUPT_PROTOTYPE(Fct) void(*Fct)(void*)
#define STOS_INTERRUPT_CAST(Fct) (void(*)(void*))Fct
#define STOS_INTERRUPT_EXIT(ret) return
#if defined(STAPI_INTERRUPT_BY_NUMBER)
#define STOS_InterruptEnable(Number,Level) (interrupt_enable_number(Number) == 0 ? STOS_SUCCESS : STOS_FAILURE)
#define STOS_InterruptDisable(Number,Level) (interrupt_disable_number(Number) == 0 ? STOS_SUCCESS : STOS_FAILURE)
#else
#define STOS_InterruptEnable(Number,Level) (interrupt_enable(Level) == 0 ? STOS_SUCCESS : STOS_FAILURE)
#define STOS_InterruptDisable(Number,Level) (interrupt_disable(Level) == 0 ? STOS_SUCCESS : STOS_FAILURE)
#endif
#endif
STOS_Error_t STOS_InterruptInstall( U32 InterruptNumber,
U32 InterruptLevel,
STOS_INTERRUPT_PROTOTYPE(Fct),
char * IrqName,
void * Params);
STOS_Error_t STOS_InterruptUninstall(U32 InterruptNumber,
U32 InterruptLevel,
void * Params);
/* Message Queue related functions */
#define STOS_MESSAGEQUEUE_MEMSIZE(Size, Nbr) ((Size)*(Nbr))
#ifdef ST_OSLINUX
#define STOS_MessageQueueCreate(Size, Nbr) message_create_queue_timeout(Size, Nbr)
#elif defined ST_OS21
#define STOS_MessageQueueCreate(Size, Nbr) message_create_queue(Size, Nbr)
#elif defined ST_OS20
#define STOS_MessageQueueCreate(Size, Nbr) message_create_queue_timeout(Size, Nbr)
#endif
#define STOS_MessageQueueDelete(Queue) message_delete_queue(Queue)
#define STOS_MessageQueueClaim(Queue) (void *)message_claim(Queue)
#define STOS_MessageQueueClaimTimeout(Queue, Timeout) (void *)message_claim_timeout(Queue, Timeout)
#define STOS_MessageQueueRelease(Queue, Msg) message_release(Queue, Msg)
#define STOS_MessageQueueSend(Queue, Msg) (void)message_send(Queue, Msg)
#define STOS_MessageQueueReceive(Queue) message_receive(Queue)
#define STOS_MessageQueueReceiveTimeout(Queue, Timeout) message_receive_timeout(Queue, Timeout)
/* C++ support */
#if defined __cplusplus
}
#endif
#endif /* #if !defined __STOS_H */
/* End of stos.h */
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -