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

📄 2.anywhere

📁 AnyWhere用户手册(MiniARM M24A适用)
💻 ANYWHERE
字号:
/****************************************Copyright (c)****************************************************
**                            Guangzhou ZHIYUAN electronics Co.,LTD.
**                                      
**                                 http://www.embedtools.com
**
**--------------File Info---------------------------------------------------------------------------------
** File name:               main.c
** Latest modified Date:    2007-11-19
** Latest Version:          1.0
** Descriptions:            用户程序主文件
**
**--------------------------------------------------------------------------------------------------------
** Created by:              Chenmingji
** Created date:            2007-11-19
** Version:                 1.0
** Descriptions:            The original version
**
**--------------------------------------------------------------------------------------------------------
** Modified by:             
** Modified date:           
** Version:                 
** Descriptions:            
**
*********************************************************************************************************/
#include "..\config.h"                                                  /*  系统头文件                  */
#include ".\main.h"
#include <stdlib.h>
#include <string.h>

/*********************************************************************************************************
** Function name:           fsAutoThread
** Descriptions:            文件系统检查任务
** input parameters:        no use
** output parameters:       none
** Returned value:          none
*********************************************************************************************************/
void fsAutoThread (void *pdata)
{
    int i;

    pdata = pdata;
    
    while (1) {
        for (i = 0; i < 10; i++) {
            fsAutoMount();
            awWrite(AW_LOCAL_ADDR, AW_TIME_DLY_ADDR, 50);
        }
        fsAutoWriteBack();
    }
}

/*********************************************************************************************************
** Function name:           awUpgradeEn
** Descriptions:            远程允许升级端口校验程序
** input parameters:        usLen:  写数据个数
**                          pvData: 数据缓冲区
** output parameters:       none
** Returned value:          >=0 :   允许升级
**                          负数:   禁止升级
*********************************************************************************************************/
INT32S awUpgradeEn (INT16U usLen, void *pvData)
{
    INT32U  data;
    data = *(INT32U*)pvData;
    if (data == 0x000000FF)
        return AW_OK;
    else
        return -AW_PARAMETER_ERR;
}

/*********************************************************************************************************
** Function name:           main
** Descriptions:            用户程序主函数
** input parameters:        none
** output parameters:       none
** Returned value:          没有使用
*********************************************************************************************************/
int main (void)
{
    HANDLE            hUpgrade;                                         /*  用于打开升级文件            */
    INT32U            ulSize;                                           /*  编程数据长度                */
    INT8U             ucBuf[1024];                                      /*  编程数据缓冲区              */
    INT32U            ulCode[5];                                        /*  产品编码                    */

	targetInit();

    fsInit();

    awWrite(AW_LOCAL_ADDR, AW_SYS_ALARM_ADDR, 0);                       /*  蜂鸣器停止鸣叫              */

	zyThreadCreate((void *)fsAutoThread, (void *)0, OS_LOWEST_PRIO - 3, 1024);

    fsFileDriverAdd(ZY_IO_FFS_K9F2G08, FS_USUAL_MODE, 512 * 256);       /*  安装文件系统驱动            */
    fsFileDriverAdd(ZY_IO_FS_CF "/0", FS_USUAL_MODE, 512 * 256);        /*  安装文件系统驱动            */

    awWrite(AW_LOCAL_ADDR, AW_SYS_ALARM_ADDR, 1);                       /*  蜂鸣器开始鸣叫              */
    awWrite(AW_LOCAL_ADDR, AW_TIME_DLY_ADDR, 50);
    awWrite(AW_LOCAL_ADDR, AW_SYS_ALARM_ADDR, 0);                       /*  蜂鸣器停止鸣叫              */

#if 0
    awWrite(AW_LOCAL_ADDR, AW_UPGRADE_EN_FUN_ADDR, (INT32U)awUpgradeEn);  /*  使用用户的远程允许算法      */
    //awWrite(AW_LOCAL_ADDR, AW_UPGRADE_EN2_ADDR, 1);                     /*  直接使能升级功能            */
#endif                                                              

#if 0
    
    /*
     *  远程升级
     */
    while (1) {
        awWrite(AW_LOCAL_ADDR, AW_TIME_DLY_ADDR, 500);
    }

#else

    /*
     *  本地升级
     */

    while (1) {

        /*
         *  等待介质插入
         */
        while (fsDriveCheck(ZY_IO_FS_CF "/0") != FS_RETURN_OK) {
            awWrite(AW_LOCAL_ADDR, AW_TIME_DLY_ADDR, 1000);             /*  等待时间间隔                */
        }

        /*
         *  读取产品编码
         */
        hUpgrade = fsFileOpen(ZY_IO_FS_CF "/0" "/0/FrameWork/MiniARM2400Code.txt", "R");
        if (FS_NOT_OPEN_FILE == hUpgrade) {
            goto reUpgrade;
        }
        ulSize = fsFileRead(&ucBuf, sizeof(ucBuf), hUpgrade);
        fsFileClose(hUpgrade);
        sscanf((char *)ucBuf, "%i,%i,%i,%i,%i", ulCode, ulCode + 1, ulCode + 2, ulCode + 3, ulCode + 4);

        /*
         *  转换字节顺序
         */
        aw_htonl(ulCode[0]);
        aw_htonl(ulCode[1]);
        aw_htonl(ulCode[2]);
        aw_htonl(ulCode[3]);
        aw_htonl(ulCode[4]);

        /*
         *  开始升级
         */
        if (awWriteEx(AW_LOCAL_ADDR,
                      AW_UPGRADE_EN1_ADDR,
                      sizeof(ulCode),
                      ulCode,
                      0) < 0) {
            goto reUpgrade;
        }

        /*
         *  选择第一种升级方式
         */
        if (awWrite(AW_LOCAL_ADDR, AW_UPGRADE_BASE_ADDR, UPGRADE_MOD_1) != AW_OK) {
            goto reUpgrade;
        }

        /*
         *  获得升级数据
         */
        hUpgrade = fsFileOpen(ZY_IO_FS_CF "/0" "/0/FrameWork/MiniARM2400.bin", "R");
        if (FS_NOT_OPEN_FILE == hUpgrade) {
            goto reUpgrade;
        }
 
        while (!fsFileEof(hUpgrade)) {

            /*
             *  读取升级数据
             */
            ulSize = fsFileRead(&ucBuf, sizeof(ucBuf), hUpgrade);

            /*
             *  写入升级数据
             */
            if (awWriteEx(AW_LOCAL_ADDR,
                          AW_UPGRADE_BASE_ADDR + 1,
                         (INT16U)ulSize,
                          ucBuf,
                          0) < 0) {
                fsFileClose(hUpgrade);
                goto reUpgrade;
            }
        }
        fsFileClose(hUpgrade);

        /*
         *  读出检验值
         */  
        hUpgrade = fsFileOpen(ZY_IO_FS_CF "/0" "/0/FrameWork/MiniARM2400.MD5.bin", "R");
        if (FS_NOT_OPEN_FILE == hUpgrade) {
            goto reUpgrade;
        }
        ulSize = fsFileRead(&ucBuf, sizeof(ucBuf), hUpgrade);
        fsFileClose(hUpgrade);

        /*
         *  提供校验值给升级器
         */
        if (awWriteEx(AW_LOCAL_ADDR, AW_UPGRADE_BASE_ADDR + 2, (INT16U)ulSize, ucBuf, 0) < 0) {
            goto reUpgrade;
        }

        /*
         *  结束升级
         */
        if (awWrite(AW_LOCAL_ADDR, AW_UPGRADE_BASE_ADDR, UPGRADE_END) != AW_OK) {
            goto reUpgrade;
        }

        /*
         *  提示用户升级结束
         */
        awWrite(AW_LOCAL_ADDR, AW_SYS_ALARM_ADDR, 1);
        awWrite(AW_LOCAL_ADDR, AW_TIME_DLY_ADDR, 500);
        awWrite(AW_LOCAL_ADDR, AW_SYS_ALARM_ADDR, 0);

        /*
         *  等待介质移除
         */
        while (fsDriveCheck(ZY_IO_FS_CF "/0") == FS_RETURN_OK) {
            awWrite(AW_LOCAL_ADDR, AW_TIME_DLY_ADDR, 1000);
        }

        /*
         *  复位系统
         */
        awWrite(AW_LOCAL_ADDR, AW_RESET_ADDR, RESET_MOD_USUAL);

reUpgrade:
        awWrite(AW_LOCAL_ADDR, AW_UPGRADE_BASE_ADDR, UPGRADE_BREAK);    /*  中止升级                    */

        /*
         *  等待介质移除
         */
        while (fsDriveCheck(ZY_IO_FS_CF "/0") == FS_RETURN_OK) {
            awWrite(AW_LOCAL_ADDR, AW_TIME_DLY_ADDR, 1000);
        }
    }
#endif                                                                  /*  0                           */
}

/*********************************************************************************************************
  END FILE
*********************************************************************************************************/

⌨️ 快捷键说明

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