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