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

📄 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:    
** Latest Version:          1.0
** Descriptions:            操作远程设备的运行指示端口示例程序
**                          
**--------------------------------------------------------------------------------------------------------
** Created by:              
** Created date:            
** Version:                 1.0
** Descriptions:            The original version
**
**--------------------------------------------------------------------------------------------------------
** Modified by:             
** Modified date:           
** Version:                 
** Descriptions:            
**
*********************************************************************************************************/
#include    <windows.h>
#include    "stdafx.h"
#include    <conio.h>

#include    "..\config.h"
#include    ".\main.h"

/*********************************************************************************************************
**  设备地址
*********************************************************************************************************/
#define   ADDR    0x4000

/*********************************************************************************************************
** Function name:           main
** Descriptions:            用户程序主函数
** input parameters:        标准main函数参数
** output parameters:       
** Returned value:          没有使用
** Created by:              
** Created Date:            
**--------------------------------------------------------------------------------------------------------
** Modified by:
** Modified date:
**--------------------------------------------------------------------------------------------------------
*********************************************************************************************************/
int main(int argc, char* argv[])
{
    HANDLE   hDevice_bin = NULL;                                        /*  文件句柄                    */
    HANDLE   hDevice_md5 = NULL;
    HANDLE   hDevice_txt = NULL;
    DWORD    bytesRead_bin;
    DWORD    bytesRead_md5;
    DWORD    bytesRead_txt;
    INT8U    ucBuf[1024];                                               /*  编程数据缓冲区              */
    INT32U   ulCode[5];                                                 /*  产品编码                    */
    INT32U   ulTmp;
    INT32U   k = 0;

    targetInit();                                                       /*  目标板初始化                */
    
    awReadEx(ADDR, 0, 1, &ulTmp, 0);
    if (ADDR != ulTmp) {
        printf("通信链路建立失败!");
    } 
    
    awWrite(ADDR, AW_SYS_ALARM_ADDR, 0);

    hDevice_txt = CreateFile( "D:\\Up\\FrameWork\\MiniARM2400Code.txt", /*  打开文件                    */
                              GENERIC_READ | GENERIC_WRITE,
                              FILE_SHARE_READ | FILE_SHARE_WRITE, 
                              NULL,
                              OPEN_EXISTING,
                              0,
                              NULL);
    hDevice_bin = CreateFile( "D:\\Up\\FrameWork\\MiniARM2400.BIN", 
                              GENERIC_READ | GENERIC_WRITE,
                              FILE_SHARE_READ | FILE_SHARE_WRITE, 
                              NULL,
                              OPEN_EXISTING,
                              0,
                              NULL);
    hDevice_md5 = CreateFile( "D:\\Up\\FrameWork\\MiniARM2400.md5.bin", 
                              GENERIC_READ | GENERIC_WRITE,
                              FILE_SHARE_READ | FILE_SHARE_WRITE, 
                              NULL,
                              OPEN_EXISTING,
                              0,
                              NULL);
    if (INVALID_HANDLE_VALUE == hDevice_bin ||
        INVALID_HANDLE_VALUE == hDevice_md5 ||
        INVALID_HANDLE_VALUE == hDevice_txt) {
        printf("不能打开文件");
        goto  reUpgrade;
    }
    
    awWrite(ADDR, AW_SYS_ALARM_ADDR, 1);                                /*  蜂鸣器鸣叫                  */
    awWrite(AW_LOCAL_ADDR, AW_TIME_DLY_ADDR, 100);
    awWrite(ADDR, AW_SYS_ALARM_ADDR, 0);                                /*  蜂鸣器停止                  */
    awWrite(AW_LOCAL_ADDR, AW_TIME_DLY_ADDR, 100);
    awWrite(ADDR, AW_UPGRADE_BASE_ADDR, 0xfe);                          /*  处理前一次的意外中断	    */
    if (!ReadFile(hDevice_txt, ucBuf, sizeof(ucBuf), &bytesRead_txt, NULL)) {
        printf(" 读产品编码文件错误");
        CloseHandle(hDevice_txt);
        goto  reUpgrade;
    }
    CloseHandle(hDevice_txt);
    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(ADDR,
                  AW_UPGRADE_EN1_ADDR,
                  20,
                  ulCode,
                  0) < 0) {
        printf("写密码数据失败");
        goto reUpgrade;
    }
     
    /*
     *  选择第一种升级方式
     */
    if (awWrite(ADDR, AW_UPGRADE_MODE_ADDR, 2) < AW_OK) {
        printf("升级模式设置错误");
        goto reUpgrade;
    }

    while(1) {
        k++;
        if (!ReadFile(hDevice_bin, ucBuf, sizeof(ucBuf), &bytesRead_bin, NULL)) {
            printf(" 读升级文件错误");
            CloseHandle(hDevice_bin);
            goto  reUpgrade;
        }

        if (bytesRead_bin == 0) {
            break;
        }
          
        /*
         *  写入升级数据
         */
        if (awWriteEx(ADDR,
                      AW_UPGRADE_DATA_ADDR,
                      (INT16U)bytesRead_bin,
                      ucBuf,
                      0) < 0) {
            CloseHandle(hDevice_bin);
            printf("写升级数据失败");
            goto reUpgrade;
        }
        printf("第%3d次写",k);
    }
    CloseHandle(hDevice_bin);
    
    /*
     *  读取校验数据
     */  
    if (!ReadFile(hDevice_md5, ucBuf, sizeof(ucBuf), &bytesRead_md5, NULL)) {
        printf(" 读校验文件错误错误");
        CloseHandle(hDevice_md5);
        goto  reUpgrade;
    }
    CloseHandle(hDevice_md5);

    /*
     *  提供校验值给升级器
     */
    if (awWriteEx(ADDR, AW_VERIFY_DATA_ADDR, (INT16U)bytesRead_md5, ucBuf, 0) < 0) {
        printf("写校验值失败");
        goto reUpgrade;
    }
    
    /*
     *  结束升级
     */
    awWrite(AW_LOCAL_ADDR, AW_TIME_DLY_ADDR, 100);   
    if (awWrite(ADDR, AW_UPGRADE_BASE_ADDR, 0) >= 0) {
        awWrite(ADDR, AW_SYS_ALARM_ADDR, 1);                            /*  蜂鸣器开始鸣叫              */
        awWrite(AW_LOCAL_ADDR, AW_TIME_DLY_ADDR, 100);                  /*  延时                        */
        awWrite(ADDR, AW_SYS_ALARM_ADDR, 0);                            /*  蜂鸣器停止鸣叫              */
        awWrite(AW_LOCAL_ADDR, AW_TIME_DLY_ADDR, 100);
        awWrite(ADDR, AW_RESET_ADDR, 0);                                /*  复位系统                    */
        printf("升级成功");
        return 1;
    }
   
reUpgrade:
    awWrite(ADDR, AW_SYS_ALARM_ADDR, 1);                                /*  蜂鸣器鸣叫                  */
    awWrite(AW_LOCAL_ADDR, AW_TIME_DLY_ADDR, 100);
    awWrite(ADDR, AW_SYS_ALARM_ADDR, 0);                                /*  蜂鸣器停止                  */
    awWrite(AW_LOCAL_ADDR, AW_TIME_DLY_ADDR, 100);
    awWrite(ADDR, AW_UPGRADE_BASE_ADDR, 0xfe);                          /*  中止升级                    */
    awWrite(AW_LOCAL_ADDR, AW_TIME_DLY_ADDR, 100);
    printf("升级失败");
    return 1;
}

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

⌨️ 快捷键说明

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