📄 ggt_func.c
字号:
/****************************************************************************************************
** Gogoto OS
** (c) Copyright 2007-2008, luyigui(卢益贵)
** All Rights Reserved
** V1.00.0
**
** 狗狗兔嵌入式多任务系统(基于消息机制)
** 绿城代码、GGT-OS、Gogoto OS、狗狗兔嵌入式、狗狗兔系统
** QQ:48092788
**
**------------------文件信息------------------------------------------------------------------------
** 文件名: GGT_Func.c
** 创建人: 卢益贵
** 日 期: 2007年12月8日
** 版 本: V1.00.0
** 描 述: Gogoto OS 功能 函数单元
**
**------------------修改记录------------------------------------------------------------------------
** 修改人: 卢益贵
** 版 本: 1.80.0
** 日 期: 2008年1月8日
** 描 述: 增加常用的功能函数
**
****************************************************************************************************/
#include "GGT_OS.h"
#include "GGT_SysType.h"
/****************************************************************************************************
** 函数名: ListFirst
** 描 述: 链表头
** 输 入: pFirst:链表头变量地址
pNode:节点地址
** 输 出: 无
** 创建人: 卢益贵
** 日 期: 2007年12月8日
**------------------修改记录------------------------------------------------------------------------
** 修改人:
** 日 期:
** 说 明:
** 原代码:
**--------------------------------------------------------------------------------------------------
****************************************************************************************************/
void ListFirst(void *pFirst, void *pNode)
{
*(void **)pNode = *(void **)pFirst;
*(void **)pFirst = pNode;
}
/****************************************************************************************************
** 函数名: ListAppend
** 描 述: 链表挂尾
** 输 入: pFirst:链表头变量地址
pNode:节点地址
** 输 出: 无
** 创建人: 卢益贵
** 日 期: 2007年12月8日
**------------------修改记录------------------------------------------------------------------------
** 修改人:
** 日 期:
** 说 明:
** 原代码:
**--------------------------------------------------------------------------------------------------
****************************************************************************************************/
void ListAppend(void *pFirst, void *pNode)
{
*(void **)pNode = 0;
while(*(void **)pFirst)
pFirst = (void **)(*(void **)pFirst);
*(void **)pFirst = pNode;
}
/****************************************************************************************************
** 函数名: ListDelete
** 描 述: 链表节点删除
** 输 入: pFirst:链表头变量地址
pNode:节点地址
** 输 出: 无
** 创建人: 卢益贵
** 日 期: 2007年12月8日
**------------------修改记录------------------------------------------------------------------------
** 修改人:
** 日 期:
** 说 明:
** 原代码:
**--------------------------------------------------------------------------------------------------
****************************************************************************************************/
void ListDelete(void *pFirst, void *pNode)
{
while(*(void **)pFirst)
{
if(*(void **)pFirst == pNode)
{
*(void **)pFirst = *(void **)pNode;
return;
}
pFirst = (void **)(*(void **)pFirst);
}
}
/****************************************************************************************************
** 函数名: ListInsert
** 描 述: 链表节点插入
** 输 入: pFirst:链表头变量地址
pNode:节点地址
pIsHere:判断插入点函数
** 输 出: 无
** 创建人: 卢益贵
** 日 期: 2007年12月8日
**------------------修改记录------------------------------------------------------------------------
** 修改人:
** 日 期:
** 说 明:
** 原代码:
**--------------------------------------------------------------------------------------------------
****************************************************************************************************/
void ListInsert(void *pFirst, void *pNode,
BOOL (*pIsHere)(void *pNode, void *pNodeIns))
{
while(*(void **)pFirst)
{
if(NULL == (*pIsHere)(*(void **)pFirst, pNode))
{
*(void **)pNode = *(void **)pFirst;
*(void **)pFirst = pNode;
return;
}
pFirst = (void **)(*(void **)pFirst);
}
*(void **)pNode = 0;
*(void **)pFirst = pNode;
}
/****************************************************************************************************
** 函数名: BoxInit
** 描 述: 内存合初始化
** 输 入: pBoxHead:盒子头
BoxSize:盒子空间大小
BoxSize:块空间大小
** 输 出: 无
** 创建人: 卢益贵
** 日 期: 2007年12月8日
**------------------修改记录------------------------------------------------------------------------
** 修改人:
** 日 期:
** 说 明:
** 原代码:
**--------------------------------------------------------------------------------------------------
****************************************************************************************************/
void BoxInit(void *pBoxHead, INT32 BoxSize, INT32 BlockSize)
{
void *pEnd, *pBlock, *pNext;
if((sizeof(UINT32) > BlockSize) || ((BlockSize + sizeof(_BoxHead) > BoxSize)))
return;
pBlock = ((UINT8 *)pBoxHead) + sizeof(_BoxHead);
((_pBoxHead)pBoxHead)->pFree = pBlock;
pEnd = ((UINT8 *)pBoxHead) + BoxSize;
pEnd = ((UINT8 *)pEnd) - BlockSize;
while(1)
{
pNext = ((UINT8 *)pBlock) + BlockSize;
if(pNext > pEnd)
break;
*((void **)pBlock) = pNext;
pBlock = pNext;
}
*((void **)pBlock) = 0;
}
/****************************************************************************************************
** 函数名: BoxAlloc
** 描 述: 内存块分配
** 输 入: pBoxHead:盒子头
** 输 出: 无
** 创建人: 卢益贵
** 日 期: 2007年12月8日
**------------------修改记录------------------------------------------------------------------------
** 修改人:
** 日 期:
** 说 明:
** 原代码:
**--------------------------------------------------------------------------------------------------
****************************************************************************************************/
void *BoxAlloc(void *pBoxHead)
{
void **pFree;
pFree = ((_pBoxHead)pBoxHead)->pFree;
if(pFree)
((_pBoxHead)pBoxHead)->pFree = *pFree;
return(pFree);
}
/****************************************************************************************************
** 函数名: BoxFree
** 描 述: 内存块释放
** 输 入: pBoxHead:盒子头
pBox:块地址
** 输 出: 无
** 创建人: 卢益贵
** 日 期: 2007年12月8日
**------------------修改记录------------------------------------------------------------------------
** 修改人:
** 日 期:
** 说 明:
** 原代码:
**--------------------------------------------------------------------------------------------------
****************************************************************************************************/
void BoxFree(void *pBoxHead, void *pBox)
{
*((void **)pBox) = ((_pBoxHead)pBoxHead)->pFree;
((_pBoxHead)pBoxHead)->pFree = pBox;
}
void ClearBuf(UINT8 *pBuf, INT32 Len)
{
while(Len--)
*pBuf++ = 0;
}
void FullBuf(UINT8 *pBuf, INT32 Len, UINT8 Data)
{
while(Len--)
*pBuf++ = Data;
}
UINT32 StrToDWord(UINT8 *pStr)
{
UINT32 R;
R = 0;
while(*pStr)
{
R = R * 10 + (*pStr - '0');
pStr++;
}
return(R);
}
INT32 StrToInt(UINT8 *pStr)
{
if('-' == *pStr)
return(-((int)StrToDWord(pStr + 1)));
else
return((int)StrToDWord(pStr));
}
UINT32 HexCharToDWord(UINT8 Char)
{
if(('0' <= Char) && ('9' >= Char))
return(Char - '0');
else
if(('A' <= Char) && ('F' >= Char))
return(10 + (Char - 'A'));
else
if(('a' <= Char) && ('f' >= Char))
return(10 + (Char - 'a'));
else
return(0);
}
UINT32 HexToDWord(UINT8 *pStr)
{
UINT32 R;
R = 0;
while(*pStr)
{
R = R * 16 + HexCharToDWord(*pStr);
pStr++;
}
return(R);
}
float StrToFloat(UINT8 *pStr)
{
float R, RR;
UINT8 IsFloat;
R = 0;
IsFloat = 0;
if('-' == *pStr)
{
RR = -1;
pStr++;
}else
RR = 1;
while(*pStr)
{
if('.' == *pStr)
{
IsFloat = 1;
}else
{
R = R * 10 + (*pStr - '0');
if(IsFloat)
RR *= 10;
}
pStr++;
}
return(R / RR);
}
void MemoCopy(UINT8 *pD, UINT8 *pS, INT32 iLen)
{
while(iLen)
{
*pD = *pS;
pD++;
pS++;
iLen--;
}
}
INT32 StrCopy(UINT8 *pD, UINT8 *pS)
{
INT32 Len = 0;
while(*pS)
{
*pD = *pS;
pD++;
pS++;
Len++;
}
*pD = 0;
return Len;
}
INT32 StrAdd(UINT8 *pD, UINT8 *pS)
{
INT32 Len = 0;
while(*pD)
pD++;
while(*pS)
{
*pD = *pS;
pD++;
pS++;
Len++;
}
*pD = 0;
return Len;
}
void IntToStr(INT32 Data, UINT8 *pStr)
{
INT32 Tmp1, Tmp2, IsTrue;
Tmp1 = 1000000000;
if(0 > Data)
{
*pStr++ = '-';
Data = -Data;
}
if(0 == Data)
{
*pStr++ = '0';
}else
{
IsTrue = 0;
while(Tmp1)
{
Tmp2 = (int)(Data / Tmp1);
Data %= Tmp1;
if(IsTrue || Tmp2)
{
*pStr++ = (UINT8)('0' + Tmp2);
IsTrue = 1;
}
Tmp1 = (int)(Tmp1 / 10);
}
}
*pStr = 0;
}
void DWordToStr(UINT32 Data, UINT8 *pStr)
{
UINT32 Tmp1, Tmp2, IsTrue;
Tmp1 = 1000000000;
if(0 == Data)
{
*pStr++ = '0';
}else
{
IsTrue = 0;
while(Tmp1)
{
Tmp2 = (UINT32)(Data / Tmp1);
Data %= Tmp1;
if(IsTrue || Tmp2)
{
*pStr++ = (UINT8)('0' + Tmp2);
IsTrue = 1;
}
Tmp1 = (UINT32)(Tmp1 / 10);
}
}
*pStr = 0;
}
void FloatToStr(float fData, UINT8 *pStr)
{
INT32 Tmp1, Tmp2, IsTrue, iData;
Tmp1 = 1000000000;
iData = (int)fData;
fData = fData - iData;
if(0 > iData)
{
*pStr++ = '-';
iData = -iData;
fData = -fData;
}
if(0 == iData)
{
*pStr++ = '0';
}else
{
IsTrue = 0;
while(Tmp1)
{
Tmp2 = (int)(iData / Tmp1);
iData %= Tmp1;
if(IsTrue || Tmp2)
{
*pStr++ = (UINT8)('0' + Tmp2);
IsTrue = 1;
}
Tmp1 = (int)(Tmp1 / 10);
}
}
*pStr++ = '.';
if(0 == fData)
{
*pStr++ = '0';
}else
{
while(fData > 0)
{
fData = fData * 10;
Tmp1 = (int)fData;
*pStr++ = (UINT8)('0' + Tmp1);
fData = fData - Tmp1;
}
}
*pStr = 0;
}
INT32 StrLen(UINT8 *pStr)
{
INT32 iLen;
iLen = 0;
while(*pStr)
{
pStr++;
iLen++;
}
return(iLen);
}
INT32 StrNCmp(UINT8 *pStr, UINT8 *pBuf)
{
INT32 R;
R = 0;
while(*pStr)
{
R = ((int)(*pStr)) - ((int)(*pBuf));
if(0 != R)
return R;
*pStr++;
*pBuf++;
}
return R;
}
UINT8* FindChar(UINT8 *pBuf, INT32 Len, UINT8 Char)
{
while(Len--)
{
if(*pBuf == Char)
{
return pBuf;
}
*pBuf++;
}
return 0;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -