📄 2.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 + -