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

📄 cmdstr.c

📁 philips arm7 lpc2103的常用功能的库函数第二部分
💻 C
字号:
/***********************************************Copyright (c)*********************************************
**                                Guangzou ZLG-MCU Development Co.,LTD.
**                                     
**                                       http://www.zlgmcu.com
**
**--------------File Info---------------------------------------------------------------------------------
** File name:               CmdStr.C
** Last modified Date:      2007-09-20
** Last Version:		    1.0
** Descriptions:		    对以前的代码进行了整理
**
**--------------------------------------------------------------------------------------------------------
** Created by:              chengmingji
** Created date:		    2007-07-08
** Version:	                1.0
** Descriptions:		    第一版
**
**--------------------------------------------------------------------------------------------------------
** Modified by:             lixiaocheng
** Modified Date:		    2007-09-20
** Version:	                1.0
** Descriptions:		    对代码进行了重新的整理
**
**--------------------------------------------------------------------------------------------------------
** Modified by:             lixiaocheng
** Modified Date:		    2007-10-16
** Version:	                1.1
** Descriptions:		    改进了ImpCmd函数,对用户传入参数进行拷贝后在操作,并优化了堆栈操作
**                          改进了ExpCmd函数,减少了一个参数输入,减少了部件参数数量的输入
**
**--------------------------------------------------------------------------------------------------------
** Modified by:             lixiaocheng
** Modified Date:		    2007-10-24
** Version:	                1.2
** Descriptions:		    改进了参数输入滤除空格的能力,修正了一个BUG;
**                          
**
*********************************************************************************************************/
#include "config.h"

/*********************************************************************************************************
   定义一个字符串输入匹配宏
*********************************************************************************************************/
#define __IMPORT_CMD_FORMAT            "%i"

/*********************************************************************************************************
   定义一个字符串输出匹配宏
*********************************************************************************************************/
#if ARG_CMD_FORMAT > 0

#define  __EXPORT_CMD_FORMAT            "%i, "

#else

#define  __EXPORT_CMD_FORMAT            "%i "

#endif

/*********************************************************************************************************
   定义分割符的标识
*********************************************************************************************************/
#if ARG_CMD_FORMAT > 0

#define  __GAP_FLAG                     ','                             /*  采用逗号分割                */

#else

#define  __GAP_FLAG                     ' '                             /*  采用空格分割                */

#endif

/*********************************************************************************************************
** Function name:			CmdStr
** Descriptions:			用户命令初级处理
** input parameters:		pstr    : 用户数组
**							pargv   :处理后的字符串指针
** Returned value:			操作成功:返回处理成功的字符命令个数
*********************************************************************************************************/
static int CmdStr (char *pstr, char *pargv[])
{
    int     argc;
    
    char    ch, ch1;
    
                                                                        /* 除去开始的分割符             */
    while (*pstr==__GAP_FLAG) {
        pstr++;
    }
    argc = 0;
    
    while (1) {
        if (*pstr == '\"') {
            pstr++;
            pargv[argc] = pstr;
            while (1) {
                ch = *pstr;
                if (ch == 0) {
                    pstr++;
                    break;
                }
                
                if (ch == '\"') {
                    ch1 = pstr[1];
                    if (ch1 == __GAP_FLAG) {
                        *pstr++ = 0;
                        break;
                    } 
                    
                    if (ch1 == 0) {
                        *pstr++ = 0;
                        ch = 0;
                        break;
                    }
                }
                pstr++;
            }
        } else {
            pargv[argc] = pstr;
            while (1) {
                ch = *pstr;
                if (ch == __GAP_FLAG || ch == 0) {
                    *pstr++ = 0;
                    break;
                }
                pstr++;
            }
        }
        argc++;

        if (ch == 0) {
            break;
        }

                                                                        /* 除去多余的连续的分割符       */
        while ((ch = *pstr) == __GAP_FLAG) {
            pstr++;
        }
        
        if (ch == 0) {
            break;
        }
    }
    return argc;
}

/*********************************************************************************************************
** Function name:			ImpCmd
** Descriptions:			用户字符命令转换为系统可设置的数字参数:
** input parameters:		uiID     : 外设编号:Tab_UART,Tab_I2C,Tab_SSP,Tab_SPI,Tab_RTC
**							pcarg    : 用户输入的字符串指针
**							puiPara  : 转换后的数字参数地址
** Returned value:			操作成功:返回处理成功的字符命令个数
*********************************************************************************************************/
int ImpCmd (uint32      uiID, 
            char       *pcarg, 
            uint32     *puiPara )
{
	int         iArgc;
	int         i;
	int         j = 0;
	int         iSucc=0;
	
	uint32      uiNum;
	
	char       *pcArgv[12];
    char        ctemp[160];
    char        cFormatbuf[20];
	
	uiNum = GucCmdTabNum[uiID];                                         /*  获取命令参数表参数的个数    */
	
    if (pcarg == NULL || puiPara == NULL) {
	    return OPERATE_FAIL;
    }
     
    if (strlen(pcarg) > 160) {                                          /*  防止过长参数使数组溢出      */
        return OPERATE_FAIL;
    }
    
    #if ARG_CMD_FORMAT > 0                                              /*  逗号处理字符串要过滤空格    */
    
    for (i = 0; i < 160; i++) {
        if (pcarg[i] == 0) {
            break;
        }
        if (pcarg[i] ==' ') {
            continue;
        }
        
        ctemp[j] = pcarg[i];
        j++;
    }
    ctemp[j] = 0;                                                       /*  对字符串结束符             */
    
    j = 0;                                                              /*  恢复j的值                  */
    
    #else
    
    strcpy(ctemp, pcarg);
    
    #endif
      
	iArgc = CmdStr(ctemp, pcArgv);
	
	for (i=0; i<iArgc; i++) {
		for (j=0; j<uiNum; j++) {
			strcpy(cFormatbuf, Cmd_Tab[uiID][j]);
			strcat(cFormatbuf, __IMPORT_CMD_FORMAT);
			if (sscanf((char *)pcArgv[i], cFormatbuf, (puiPara+j)) != 0) {
				iSucc ++;
				break;
			}
		}
	}
	return iSucc;                                                       /*  解析完参数的个数            */
}

/*********************************************************************************************************
** Function name:			ExpCmd
** Descriptions:			系统设置的数字参数转换为字符串输出
** input parameters:		uiID     : 外设编号:Tab_UART,Tab_I2C,Tab_SSP,Tab_SPI,Tab_RTC
**							pcarg    : 用户的字符串指针
**							puiPara  : 系统的数字参数地址
** Returned value:			操作成功:OPERATE_SUCCESS
*********************************************************************************************************/
int ExpCmd (uint32      uiID, 
            char       *pcarg, 
            uint32     *puiPara )
{
	int         n;
	
	uint32      uiNum;
	
	char        temp[8];
	
	uiNum = GucCmdTabNum[uiID]; 
	
	if ( pcarg == NULL || puiPara == NULL ) {
	    return OPERATE_FAIL;
	}
	
	*pcarg = '\0';
	
	for(n=0;n<uiNum;n++) {
		strcat(pcarg, Cmd_Tab[uiID][n]);
		sprintf(temp, __EXPORT_CMD_FORMAT, puiPara[n]);
		strcat(pcarg, temp);
	}
	
	return OPERATE_SUCCESS;
}

⌨️ 快捷键说明

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