⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 stos.h

📁 stos Linux 源码示范程序。 可以移植到其他平台
💻 H
📖 第 1 页 / 共 2 页
字号:
#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 + -