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

📄 platform.h

📁 uclinux线程的创建、消息队列的创建、信号量、互斥信号量、信号等的创建
💻 H
📖 第 1 页 / 共 2 页
字号:
  
参数     : msgQId      消息队列的id.

            buffer      存有消息的缓冲区.
            
            nBytes      发送缓冲中数据的长度.
            
            timeout     发送的超时选项,可选值有二:
                            NO_WAIT     :队列满时,不等待,立即返回错误.
                            WAIT_FOREVER:队列满时将阻塞,直到队列有空间.
                        注:如果传入值不在上面选项中,则认为是WAIT_FOREVER.
                        
            option      未使用
            
返回值   : 接收到消息的大小(>0)       成功接收
            ERROR(-1)                  调用失败
******************************************************************************/

int msgQReceive
    (
     USE MSG_Q_ID msgQId,     /* 队列id */
     USE char *   buffer,    /* 接收缓冲 */
     USE unsigned int     maxNBytes, /* 缓冲区长度 */
     USE int      timeout    /* NO_WAIT(队列空时立即返回),WAIT_FOREVER(队列空时将阻塞,直到队列不为空) */
    );


/****************************************************************************
                        获取linux消息队列中当前消息个数
                        
函数名   : msgQNumMsgs()
  
功能     : 获取linux消息队列中当前消息个数
  
参数     : msgQId      消息队列的id.

返回值   : 消息个数(>=0)       查询成功
            ERROR(-1)           调用失败
******************************************************************************/
int msgQNumMsgs
    (
    USE MSG_Q_ID msgQId /* message queue to examine */
    );

#endif


#ifndef  __SEM__
    
#define MAX_SEM 50 //信号量的最大个数

#define SEM_TYPE_UNUSED 0
#define SEM_TYPE_COUNT 1
#define SEM_TYPE_MUTEX 2
#define SEM_TYPE_BINARY 3


/*信号量包括:计数信号量,二值信号量,互斥信号量*/
typedef struct _semInfo
{
    short int semType;//信号量类型
    SEM_ID semId;//信号量ID
    
    pthread_mutex_t  mutex;//采用线程互斥锁时,将使用该变量保存互斥锁的信息

    void* semInfoPtr ;
}semInfo;

/*创建信号量时需要用到该结构体*/
union semun {
 int val;
 struct semid_ds *buf;
 unsigned short *array;
} arg;

void initSemList();


/****************************************************************************
                                删除一个信号量
                        
函数名   : semDelete()
  
功能     : 删除一个信号量
  
参数     : semId      信号量的id.

返回值   : OK(0)       删除成功
            ERROR(-1)   调用失败
******************************************************************************/
int semDelete
    (
    SEM_ID semId /* semaphore ID to delete */
    );

/****************************************************************************
                                等待一个信号量
                        
函数名   : semTake()
  
功能     : 等待一个信号量
  
参数     : semId       信号量的id.

            timeout     等待超时选项,可选值有二:
                            NO_WAIT     :没有信号量时不等待,立即返回错误.
                            WAIT_FOREVER:没有信号量时时将阻塞,直到取得信号量.
                        注:如果传入值不在上面选项中,则认为是WAIT_FOREVER.    

返回值   : OK(0)       删除成功
            ERROR(-1)   调用失败
******************************************************************************/

int semTake
    (
    SEM_ID semId,  /* semaphore ID to take */
    int    timeout /* timeout in ticks */
    );

/****************************************************************************
                                释放一个信号量
                        
函数名   : semGive()
  
功能     : 释放一个信号量
  
参数     : semId       信号量的id.

返回值   : OK(0)       删除成功
            ERROR(-1)   调用失败
******************************************************************************/
int semGive
    (
    SEM_ID semId /* semaphore ID to give */
    );



/****************************************************************************
                                创建一个计数信号量
                        
函数名   : semCCreate()
  
功能     : 创建一个计数信号量
  
参数     : options       未使用.

            initialCount  信号量的初始值

返回值   : 信号量id(>0)       创建成功
            NULL(0)           调用失败
******************************************************************************/
SEM_ID semCCreate//创建一个计数信号量
    (
    NO   int options,     /* 不使用 */
    USE int initialCount /* 信号量的初始值 */
    );

/****************************************************************************
                                创建一个互斥型信号量
                        
函数名   : semMCreate()
  
功能     : 创建一个互斥型信号量
  
参数     : options       未使用.

            initialCount  信号量的初始值

返回值   : 信号量id(>0)       创建成功
            NULL(0)            调用失败
******************************************************************************/
SEM_ID semMCreate//创建一个互斥型信号量
    (
    NO int options /* 未使用 */
    );

/****************************************************************************
                                创建一个二进制型信号量
                        
函数名   : semBCreate()
  
功能     : 创建一个互斥型信号量
  
参数     : options       未使用.

            initialCount  信号量的初始值

返回值   : 信号量id(>0)       创建成功
            NULL(0)            调用失败
******************************************************************************/
/*linux信号量都是按照先后顺序来的,没有按照优先级来排队*/
SEM_ID semBCreate//创建一个二进制型信号量
    (
    NO     int   options,     /* 未使用 */
    USE int  initialState /* 初始值 */
    );
 
#endif


#ifndef __TIMER__

struct _appTimer
{
    struct sigaction act; 
    struct itimerval value; 
    unsigned long int th_timer;
    
    unsigned char rateSetFlag:1;
    unsigned char clkConnect:1;
    unsigned char unused:6;
};

int sysClkConnect
    (
    void (*routine) (void*), /* routine called at each system clock interrupt */
    int     arg      /* argument with which to call routine */
    );

int sysClkRateSet
    (
    int ticksPerSecond /* number of clock interrupts per second */
    );

void sysAuxClkEnable(void);

#endif


#ifdef __TIME__

time_t time
    (
    time_t * timer /* calendar time in seconds */
    );

struct tm *localtime
    (
    const time_t * timer /* calendar time in seconds */
    );

time_t mktime
    (
    struct tm * timeptr /* pointer to broken-down structure */
    );

//clock_settime
#endif




#endif

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -