字號:
break;
}
temp = temp >> 1;
}
#if OS_MAX_TASKS < 9
if (i < 8 )
{
Buf[3] &= ~OSMapTbl[i];
OSIntSendSignal(i);
}
#else
if (i >= 8 )
{
temp = Buf[4];
for (; i < 16; i++)
{
if ((temp & 0x01) != 0)
{
break;
}
temp = temp >> 1;
}
}
if (i < 16 )
{
if (i < 8)
{
Buf[3] &= ~OSMapTbl[i];
}
else
{
Buf[4] &= ~OSMapTbl[i & 0x07];
}
OSIntSendSignal(i);
}
#endif
}
OS_EXIT_CRITICAL();
return OS_Q_OK;
}
else
{
OS_EXIT_CRITICAL();
return OS_Q_FULL;
}
}
#endif
/*********************************************************************************************************
** 函數名稱: OSQIntPostFront
** 功能描述: 中斷中LIFO方式發送消息
** 輸 入: Buf:指向隊列的指針
** Data:消息數據
** 輸 出: OS_Q_FULL:隊列滿
** OS_Q_OK:發送成功
** 全局變量: 無
** 調用模塊: OSIntSendSignal,OS_ENTER_CRITICAL,OS_EXIT_CRITICAL
**
** 作 者: 陳明計
** 日 期: 2002年9月1日
**-------------------------------------------------------------------------------------------------------
** 修 改:
** 日 期:
**-------------------------------------------------------------------------------------------------------
********************************************************************************************************/
#if EN_OS_Q_INT_POST_FRONT > 0 || EN_OS_Q_POST_FRONT > 0
uint8 OSQIntPostFront(uint8 OS_Q_MEM_SEL *Buf, uint8 Data)
{
uint8 temp,i;
#if EN_OS_Q_CHK > 0
if (Buf == NULL)
{
return NOT_OK;
}
#endif
OS_ENTER_CRITICAL();
#if OS_MAX_TASKS < 9
if (Buf[0] < (Buf[1]-4))
#else
if (Buf[0] < (Buf[1]-5))
#endif
{
Buf[Buf[2]] = Data;
Buf[0]++;
Buf[2]--;
#if OS_MAX_TASKS < 9
if (Buf[2] < 4)
#else
if (Buf[0] < 5)
#endif
{
Buf[2] = Buf[1]-1;
}
if (Buf[0] == 1)
{
temp = Buf[3];
for (i = 0; i < 8; i++)
{
if ((temp & 0x01) != 0)
{
break;
}
temp = temp >> 1;
}
#if OS_MAX_TASKS < 9
if (i < 8 )
{
Buf[3] &= ~OSMapTbl[i];
OSIntSendSignal(i);
}
#else
if (i >= 8 )
{
temp = Buf[4];
for (; i < 16; i++)
{
if ((temp & 0x01) != 0)
{
break;
}
temp = temp >> 1;
}
}
if (i < 16 )
{
if (i < 8)
{
Buf[3] &= ~OSMapTbl[i];
}
else
{
Buf[4] &= ~OSMapTbl[i & 0x07];
}
OSIntSendSignal(i);
}
#endif
}
OS_EXIT_CRITICAL();
return OS_Q_OK;
}
else
{
OS_EXIT_CRITICAL();
return OS_Q_FULL;
}
}
#endif
/*********************************************************************************************************
** 函數名稱: OSQPost
** 功能描述: FIFO方式發送消息
** 輸 入: Buf:指向隊列的指針
** Data:消息數據
** 輸 出: OS_Q_FULL:隊列滿
** OS_Q_OK:發送成功
** 全局變量: 無
** 調用模塊: OSQIntPost,OSSched
**
** 作 者: 陳明計
** 日 期: 2002年9月1日
**-------------------------------------------------------------------------------------------------------
** 修 改:
** 日 期:
**-------------------------------------------------------------------------------------------------------
********************************************************************************************************/
#if EN_OS_Q_POST > 0
uint8 OSQPost(uint8 OS_Q_MEM_SEL *Buf, uint8 Data)
{
#if EN_OS_Q_CHK > 0
if (Buf == NULL)
{
return NOT_OK;
}
#endif
if (OSQIntPost(Buf,Data) == OS_Q_OK)
{
OSSched();
return OS_Q_OK;
}
else
{
return OS_Q_FULL;
}
}
#endif
/*********************************************************************************************************
** 函數名稱: OSQPostFront
** 功能描述: LIFO方式發送消息
** 輸 入: Buf:指向隊列的指針
** Data:消息數據
** 輸 出: OS_Q_FULL:隊列滿
** OS_Q_OK:發送成功
** 全局變量: 無
** 調用模塊: OSQIntPostFront,OSSched
**
** 作 者: 陳明計
** 日 期: 2002年9月1日
**-------------------------------------------------------------------------------------------------------
** 修 改:
** 日 期:
**-------------------------------------------------------------------------------------------------------
********************************************************************************************************/
#if EN_OS_Q_POST_FRONT > 0
uint8 OSQPostFront(uint8 OS_Q_MEM_SEL *Buf, uint8 Data)
{
#if EN_OS_Q_CHK > 0
if (Buf == NULL)
{
return NOT_OK;
}
#endif
if (OSQIntPostFront(Buf,Data) == OS_Q_OK)
{
OSSched();
return OS_Q_OK;
}
else
{
return OS_Q_FULL;
}
}
#endif
/*********************************************************************************************************
** 函數名稱: OSQNMsgs
** 功能描述: 取得消息隊列中消息數
** 輸 入: Buf:指向隊列的指針
** 輸 出: 消息數
** 全局變量: 無
** 調用模塊: OS_ENTER_CRITICAL,OS_EXIT_CRITICAL
**
** 作 者: 陳明計
** 日 期: 2002年9月1日
**-------------------------------------------------------------------------------------------------------
** 修 改:
** 日 期:
**-------------------------------------------------------------------------------------------------------
********************************************************************************************************/
#if EN_OS_Q_NMsgs > 0
uint8 OSQNMsgs(uint8 OS_Q_MEM_SEL *Buf)
{
uint8 temp;
#if EN_OS_Q_CHK > 0
if (Buf == NULL)
{
return 0;
}
#endif
OS_ENTER_CRITICAL();
temp = Buf[0];
OS_EXIT_CRITICAL();
return temp;
}
#endif
/*********************************************************************************************************
** 函數名稱: OSQSize
** 功能描述: 取得消息隊列總容量
** 輸 入: Buf:指向隊列的指針
** 輸 出: 消息隊列總容量
** 全局變量: 無
** 調用模塊: OS_ENTER_CRITICAL,OS_EXIT_CRITICAL
**
** 作 者: 陳明計
** 日 期: 2002年9月1日
**-------------------------------------------------------------------------------------------------------
** 修 改:
** 日 期:
**-------------------------------------------------------------------------------------------------------
********************************************************************************************************/
#if EN_OS_Q_SIZE > 0
uint8 OSQSize(uint8 OS_Q_MEM_SEL *Buf)
{
uint8 temp;
#if EN_OS_Q_CHK > 0
if (Buf == NULL)
{
return 0;
}
#endif
OS_ENTER_CRITICAL();
#if OS_MAX_TASKS < 9
temp = Buf[1] - 4;
#else
temp = Buf[1] - 5;
#endif
OS_EXIT_CRITICAL();
return temp;
}
#endif
/*********************************************************************************************************
** 函數名稱: OSQFlush
** 功能描述: 清空隊列
** 輸 入: Buf:指向隊列的指針
** 輸 出: 無
** 全局變量: 無
** 調用模塊: OS_ENTER_CRITICAL,OS_EXIT_CRITICAL
**
** 作 者: 陳明計
** 日 期: 2002年9月1日
**-------------------------------------------------------------------------------------------------------
** 修 改: 陳明計
** 日 期: 2002年10月26日
**-------------------------------------------------------------------------------------------------------
** 修 改:
** 日 期:
**-------------------------------------------------------------------------------------------------------
********************************************************************************************************/
#if EN_OS_Q_FLUSH > 0
void OSQFlush (uint8 OS_Q_MEM_SEL *Buf)
{
#if EN_OS_Q_CHK > 0
if (Buf == NULL)
{
return;
}
#endif
Buf[0] = 0;
#if OS_MAX_TASKS < 9
Buf[2] = 4;
#else
Buf[2] = 5;
#endif
}
#endif
#endif
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -