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

📄 test.c

📁 ARM专辑-152M-pdf.zip
💻 C
字号:
/****************************************Copyright (c)**************************************************
**                               广州周立功单片机发展有限公司
**                                     研    究    所
**                                        产品一部 
**
**                                 http://www.zlgmcu.com
**
**--------------文件信息--------------------------------------------------------------------------------
**文   件   名: test.c
**创   建   人: 陈明计
**最后修改日期: 2004年4月23日
**描        述: ppp协议测试程序
**
**--------------历史版本信息----------------------------------------------------------------------------
** 创建人: 陈明计
** 版  本: v1.0
** 日 期: 2004年4月23日
** 描 述: 原始版本
**
**--------------当前版本修订------------------------------------------------------------------------------
** 修改人: 
** 日 期:
** 描 述:
**
**------------------------------------------------------------------------------------------------------
********************************************************************************************************/

#include    "config.h"

extern void Ping(void *Pdata);
extern uint8 NCPFlag;
extern uint8 IPCPFlag;

void TaskStart (void *data);
void Open(void *data);
void Close(void *data);


OS_STK      TaskStk[N_TASKS][TASK_STK_SIZE];     /* Tasks stacks                                  */
OS_STK      TaskStartStk[TASK_STK_SIZE];
uint8       DestIp[4];

const char  SerivePhone[] = "#2";                        /* 服务器电话号码 */

/* 用户名及密码 */
uint8 PAPPassword[] = { PPP_FRAM_TYPE__PAP / 256, PPP_FRAM_TYPE__PAP % 256,
                        0x01,0x10,
                        0x00,15,
//长度 = 15 + 0x00 * 256 = (4 + 1) + (5 + 1) + 2 + 2 = sizeof(PAPPassword) - 2;
                        4,'T','E','S','T',
//用户名为TEST,长度为4
                        5,'1','2','3','4','5'};
//密码为12345,长度为5

/*********************************************************************************************************
** 函数名称: OSPutch
** 功能描述: 显示字符
** 输 入: 无
** 输 出: 无
** 全局变量: 无
** 调用模块: 
**
** 作 者: 陈明计
** 日 期: 2004年4月23日
**-------------------------------------------------------------------------------------------------------
** 修改人: 
** 日 期: 
**------------------------------------------------------------------------------------------------------
********************************************************************************************************/
        void OSPutch(uint8 ch)
{
    static uint8 x = 1, y = 1;

    if(ch == 0x0d || ch == 0x0a)
    {
        x = 1;
        y++;
    }
    else
    {
        PC_DispChar (x - 1, y - 1, ch, DISP_FGND_WHITE);
        x++;
    }
    if (x > 80)
    {
        x = 1;
        y++;
    }
    if (y > 25)
    {
        y = 1;
        PC_DispClrScr(DISP_FGND_WHITE + DISP_BGND_BLACK);
    }
}


/*********************************************************************************************************
** 函数名称: OSPutch
** 功能描述: 显示字符串
** 输 入: 无
** 输 出: 无
** 全局变量: 无
** 调用模块: 
**
** 作 者: 陈明计
** 日 期: 2004年4月23日
**-------------------------------------------------------------------------------------------------------
** 修改人: 
** 日 期: 
**------------------------------------------------------------------------------------------------------
********************************************************************************************************/
        void OSPuts(char *s)
{
    
    while (*s != 0)
    {
        OSPutch((uint8)*s++);
    }
}

/*********************************************************************************************************
** 函数名称: main
** 功能描述: c语言的主函数,由它启动多任务环境
** 输 入: 无
** 输 出: 无
** 全局变量: 无
** 调用模块: OSInit,OSTaskCreate,OSStart
**
** 作 者: 陈明计
** 日 期: 2004年4月23日
**-------------------------------------------------------------------------------------------------------
** 修改人: 
** 日 期: 
**------------------------------------------------------------------------------------------------------
********************************************************************************************************/
        int main(void)
{

    PC_DispClrScr(DISP_FGND_WHITE + DISP_BGND_BLACK);      /* Clear the screen                         */
    OSInit();                                              /* Initialize uC/OS-II                      */

    OSTaskCreate(TaskStart, NULL, &TaskStartStk[TASK_STK_SIZE - 1], 0);
    OSStart();
    return 0;                                             /* Start multitasking                       */
}

/*********************************************************************************************************
** 函数名称: TaskStart
** 功能描述: μCOS-II的第一个任务,接受及处理命令
** 输 入: 无
** 输 出: 无
** 全局变量: 无
** 调用模块: 
**
** 作 者: 陈明计
** 日 期: 2004年4月23日
**-------------------------------------------------------------------------------------------------------
** 修改人:
** 日 期:
**------------------------------------------------------------------------------------------------------
********************************************************************************************************/
        void TaskStart (void *pdata)
{
#if OS_CRITICAL_METHOD == 3                      /* Allocate storage for CPU status register           */
    OS_CPU_SR  cpu_sr;
#endif

    uint8      i,j;
    char       s[200],ch;
    int16      key;
    unsigned int temp;

    pdata = pdata;                                  /* 避免编译警告 */

    TargetInit();                                   /* 目标板初始化 */

    ModemInit(115200);

    PPPDriverInit();

    PPPCreate(&ModemDrive);

    for (;;) 
    {
        i = 0;
        while (i < 199)
        {
            if (PC_GetKey(&key) == TRUE)
	        {
	            ch = (int8)((uint16)key % 256);
	            OSPutch((uint8)ch);
	            if (ch == 0x0d || ch == 0x0a)
	            {
	                break;
	            }
	            s[i++] = (int8)(key % 256);
	        }
	        OSTimeDly(OS_TICKS_PER_SEC / 20);
	    }
	    
	    s[i] = 0;
	        
        if (strcmp(s, "open") == 0)
        {
            OSTaskDel(21);
            OSTaskCreate(Open, NULL, &TaskStk[0][TASK_STK_SIZE - 1], 20);
        }
        if (strcmp(s, "close") == 0)
        {
            OSTaskDel(20);
            OSTaskCreate(Close, NULL, &TaskStk[1][TASK_STK_SIZE - 1], 21);
        }
        
        ch = s[4];
        s[4] = 0;
        if (strcmp(s, "ping") == 0)
        {
            s[4] = ch;
            i = 0;
            j = 0;
            sscanf(s + 5, "%u", &temp);
            DestIp[0] = temp;
            while (s[i] != 0)
            {
                if (s[i] == '.')
                {
                    s[i] = 0x20;
                    j++;
                    sscanf(s + i + 1, "%u", &temp);
                    DestIp[j] = temp;
                }
                i++;
            }
            s[i++] = 0x20;
            s[i] = 0;
            if (j >= 3)
            {
                OSTaskDel(22);
                OSTaskCreate(Ping, (void *)DestIp, &TaskStk[2][TASK_STK_SIZE - 1], 22);
            }
        }
    }
}

/*********************************************************************************************************
** 函数名称: Open
** 功能描述: 建立链接
** 输 入: 无
** 输 出: 无
** 全局变量: 无
** 调用模块: 
**
** 作 者: 陈明计
** 日 期: 2004年4月23日
**-------------------------------------------------------------------------------------------------------
** 修改人: 
** 日 期: 
**------------------------------------------------------------------------------------------------------
********************************************************************************************************/
        void Open(void *Pdata)
{
    Pdata = Pdata;
     
    OSPuts("Modem Open ...");
    ModemOpen();
    OSPuts("Pass\n");
    OSPuts("PPP Open...");
    PPPOpen();
    
    while(1)
    {
        if (PPPGetState() == PPP_STATE_OPEN)
        {
            break;
        }
        OSTimeDly(OS_TICKS_PER_SEC / 20);
    }

    OSPuts("Pass\nPassword...");
    while(1)
    {
        if (NCPFlag == NCP_AT_NETWORK)
        {
            break;
        }
        OSTimeDly(OS_TICKS_PER_SEC / 20);
    }
    OSPuts("Pass\nConfig ip...");

    while(1)
    {
        if (IPCPFlag == IPCP_STATE_OPENED)
        {
            break;
        }
        OSTimeDly(OS_TICKS_PER_SEC / 20);
    }
    OSPuts("Pass\nOpen OK\n");

    OSTaskDel(OS_PRIO_SELF);
}

/*********************************************************************************************************
** 函数名称: Close
** 功能描述: 关闭连接
** 输 入: 无
** 输 出: 无
** 全局变量: 无
** 调用模块: 
**
** 作 者: 陈明计
** 日 期: 2004年4月23日
**-------------------------------------------------------------------------------------------------------
** 修改人: 
** 日 期: 
**------------------------------------------------------------------------------------------------------
********************************************************************************************************/
        void Close(void *Pdata)
{
    Pdata = Pdata;
     
    OSPuts("PPP Close ...");
    PPPClose();
    OSPuts("Pass\nModem Close ...");
    ModemDialDown();
    
    while(1)
    {
        if (PPPGetState() == PPP_STATE_INITIAL)
        {
            break;
        }
        OSTimeDly(OS_TICKS_PER_SEC / 20);
    }
    OSPuts("Pass\nClose OK\n");

    OSTaskDel(OS_PRIO_SELF);
}

//----------------------------------------------------------------------------------

/*********************************************************************************************************
**                            End Of File
********************************************************************************************************/

⌨️ 快捷键说明

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