读取DBAU1200开发板的BOOT FLASH参考代码

本文介绍了一段用于从DBAU1200开发板读取BOOTFLASH并将其保存为SREC格式的参考代码。代码使用CFlashAmd类进行读取操作,并通过循环将数据转换成S3类型的数据记录。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

//========================================================================
//TITLE:
// 读取DBAU1200开发板的BOOT FLASH参考代码
//AUTHOR:
// norains
//DATE:
// Saturday 31-May-2008
//Environment:
// VS2005 + DBAU1200 BOARD + MIPSII SDK
//========================================================================

该段代码用来读取DBAU1200开发板的BOOT FLASH,并保存为SREC格式。

CFlashAmd主要是用来读取BOOT FLASH,该类可在此获取:http://blog.youkuaiyun.com/norains/archive/2008/05/31/2498178.aspx

需要注意的是,本文所列的代码为参考代码,还有很多不完善的地方,比如读取的FLASH大小必须为16的整数倍等等,使用的时候需要小心。


#include "stdafx.h"
#include "flashamd.h"
#include <vector>
#include <string>
#include <algorithm>

//DBAU1200开发板的FLASH起始地址
#define DEFAULT_DBAU1200_FLASH_ADDRESS_BASE 0x9C000000
//读取的偏移地址
#define DEFAULT_DBAU1200_FLASH_OFFSET_READ 0x3C00000
//读取的FLASH大小
#define MAX_SIZE_READ (1024 * 1024) // 1Mbyte

int WINAPI WinMain( HINSTANCE hInstance,
HINSTANCE hPrevInstance,
LPTSTR lpCmdLine,
int nCmdShow)
{
CFlashAmd flash;
flash.SetFlashInfo(Flash::FLASH_INFO_AM29LV256M);
flash.SetFlashAddressBase(DEFAULT_DBAU1200_FLASH_ADDRESS_BASE);

std::vector<BYTE> vtBuf(MAX_SIZE_READ,0);
flash.ReadFlash(DEFAULT_DBAU1200_FLASH_OFFSET_READ,&vtBuf[0],MAX_SIZE_READ);

//Change it to S3 type
const DWORD dwDataPerLine = 16;
DWORD dwStoreCount = 0;
std::string strStore;
DWORD dwChkSum = 0;
DWORD dwAddress = DEFAULT_DBAU1200_FLASH_ADDRESS_BASE + DEFAULT_DBAU1200_FLASH_OFFSET_READ;
while(true)
{
if(dwStoreCount + dwDataPerLine > vtBuf.size())
{
break;
}

//Clear the check sum.
dwChkSum = 0;

//The type and length
std::string strLine;
strLine += "S315";
dwChkSum += 0x15;

//The buffer for storing the convert string
std::vector<char> vtCnvt(9,0);

//The address
_ultoa(dwAddress,&vtCnvt[0],16);
strLine += reinterpret_cast<char *>(&vtCnvt[0]);
dwChkSum += dwAddress >> 24;
dwChkSum += (dwAddress >> 16) & 0xFF;
dwChkSum += (dwAddress >> 8) & 0xFF;
dwChkSum += dwAddress & 0xFF;
dwAddress += dwDataPerLine;



//The data
for(int i = 0; i < dwDataPerLine; i ++)
{
_ultoa(vtBuf[dwStoreCount + i],&vtCnvt[0],16);
if(vtBuf[dwStoreCount + i] > 0x0F)
{
strLine += reinterpret_cast<char *>(&vtCnvt[0]);
}
else
{
strLine = strLine + "0" + reinterpret_cast<char *>(&vtCnvt[0]);
}
dwChkSum += vtBuf[dwStoreCount + i];
}
dwStoreCount += dwDataPerLine;

//The check sum
dwChkSum = 0xFF - (dwChkSum & 0xFF);
_ultoa(dwChkSum,&vtCnvt[0],16);
if(dwChkSum > 0x0F)
{
strLine += reinterpret_cast<char *>(&vtCnvt[0]);
}
else
{
strLine = strLine + "0" + reinterpret_cast<char *>(&vtCnvt[0]);
}
strLine += "/r/n";

//Store to the buffer
strStore += strLine;
}

//to upper
transform(strStore.begin(),strStore.end(),strStore.begin(),toupper);


//Save the data to file
HANDLE hFile = CreateFile(TEXT("bootsave.rec"),GENERIC_WRITE,NULL,NULL,CREATE_ALWAYS,FILE_ATTRIBUTE_NORMAL,NULL);
DWORD dwWrite = 0;
WriteFile(hFile,&strStore[0],strStore.size(),&dwWrite,NULL);
CloseHandle(hFile);
return 0;
}

标题基于SpringBoot+Vue的社区便民服务平台研究AI更换标题第1章引言介绍社区便民服务平台的研究背景、意义,以及基于SpringBoot+Vue技术的研究现状和创新点。1.1研究背景与意义分析社区便民服务的重要性,以及SpringBoot+Vue技术在平台建设中的优势。1.2国内外研究现状概述国内外在社区便民服务平台方面的发展现状。1.3研究方法与创新点阐述本文采用的研究方法和在SpringBoot+Vue技术应用上的创新之处。第2章相关理论介绍SpringBoot和Vue的相关理论基础,以及它们在社区便民服务平台中的应用。2.1SpringBoot技术概述解释SpringBoot的基本概念、特点及其在便民服务平台中的应用价值。2.2Vue技术概述阐述Vue的核心思想、技术特性及其在前端界面开发中的优势。2.3SpringBoot与Vue的整合应用探讨SpringBoot与Vue如何有效整合,以提升社区便民服务平台的性能。第3章平台需求分析与设计分析社区便民服务平台的需求,并基于SpringBoot+Vue技术进行平台设计。3.1需求分析明确平台需满足的功能需求和性能需求。3.2架构设计设计平台的整体架构,包括前后端分离、模块化设计等思想。3.3数据库设计根据平台需求设计合理的数据库结构,包括数据表、字段等。第4章平台实现与关键技术详细阐述基于SpringBoot+Vue的社区便民服务平台的实现过程及关键技术。4.1后端服务实现使用SpringBoot实现后端服务,包括用户管理、服务管理等核心功能。4.2前端界面实现采用Vue技术实现前端界面,提供友好的用户交互体验。4.3前后端交互技术探讨前后端数据交互的方式,如RESTful API、WebSocket等。第5章平台测试与优化对实现的社区便民服务平台进行全面测试,并针对问题进行优化。5.1测试环境与工具介绍测试
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值