亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? flashwritedlg.cpp

?? 系統通過JTAG接口燒結掛接在LXFXP2 上的s29gl256N的FLASH的代碼,
?? CPP
字號:
// FlashWriteDlg.cpp : implementation file
//

#include "stdafx.h"
#include "FlashWrite.h"
#include "FlashWriteDlg.h"
#include "TestSelectDlg.h"
#include <afxdlgs.h>
#include "S29GL256N.h"


#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif

/////////////////////////////////////////////////////////////////////////////
// CAboutDlg dialog used for App About

class CAboutDlg : public CDialog
{
public:
	CAboutDlg();

// Dialog Data
	//{{AFX_DATA(CAboutDlg)
	enum { IDD = IDD_ABOUTBOX };
	//}}AFX_DATA

	// ClassWizard generated virtual function overrides
	//{{AFX_VIRTUAL(CAboutDlg)
	protected:
	virtual void DoDataExchange(CDataExchange* pDX);    // DDX/DDV support
	//}}AFX_VIRTUAL

// Implementation
protected:
	//{{AFX_MSG(CAboutDlg)
	//}}AFX_MSG
	DECLARE_MESSAGE_MAP()
};

CAboutDlg::CAboutDlg() : CDialog(CAboutDlg::IDD)
{
	//{{AFX_DATA_INIT(CAboutDlg)
	//}}AFX_DATA_INIT
}

void CAboutDlg::DoDataExchange(CDataExchange* pDX)
{
	CDialog::DoDataExchange(pDX);
	//{{AFX_DATA_MAP(CAboutDlg)
	//}}AFX_DATA_MAP
}

BEGIN_MESSAGE_MAP(CAboutDlg, CDialog)
	//{{AFX_MSG_MAP(CAboutDlg)
		// No message handlers
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CFlashWriteDlg dialog

CFlashWriteDlg::CFlashWriteDlg(CWnd* pParent /*=NULL*/)
	: CDialog(CFlashWriteDlg::IDD, pParent)
{
	//{{AFX_DATA_INIT(CFlashWriteDlg)
	m_strBurnOperates = _T("編程進度");
	m_WriteBinToFlash = 1;
	m_FileDirectory = _T("");
	m_FlashStartOffset = _T("");
	m_csFlashProgSize = _T("");
	BurnStatus     = -1;
	bFlashInitialized = FALSE;
	m_FlashStartOffset = _T("0");
	m_csFlashProgSize = _T("100000");;
	//}}AFX_DATA_INIT
	// Note that LoadIcon does not require a subsequent DestroyIcon in Win32
	m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
}

void CFlashWriteDlg::DoDataExchange(CDataExchange* pDX)
{
	CDialog::DoDataExchange(pDX);
	//{{AFX_DATA_MAP(CFlashWriteDlg)
	DDX_Control(pDX, IDC_BURN_PROGRESS, m_CtlBurnProgress);
	DDX_Control(pDX, IDC_FLASH_TYPE, m_FlashType);
	DDX_Control(pDX, IDC_CPU_TYPE, m_CPUType);
	DDX_Radio(pDX, IDC_WRITE, m_WriteBinToFlash);
	DDX_Text(pDX, IDC_FILE_DIRECTORY, m_FileDirectory);
	DDX_Text(pDX, IDC_FLASHOFFSET, m_FlashStartOffset);
	DDX_Text(pDX, IDC_FLASH_SIZE, m_csFlashProgSize);
	DDX_Text(pDX, IDC_BURN_OPERATES, m_strBurnOperates);
	//}}AFX_DATA_MAP
}

BEGIN_MESSAGE_MAP(CFlashWriteDlg, CDialog)
	//{{AFX_MSG_MAP(CFlashWriteDlg)
	ON_WM_SYSCOMMAND()
	ON_WM_PAINT()
	ON_WM_QUERYDRAGICON()
	ON_BN_CLICKED(ID_TESTDLG, OnTestdlg)
	ON_BN_CLICKED(ID_START_OPERATE, OnStartOperate)
	ON_BN_CLICKED(IDC_BTN_FILESELECT, OnBtnFileselect)
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CFlashWriteDlg message handlers

BOOL CFlashWriteDlg::OnInitDialog()
{
	CDialog::OnInitDialog();

	// Add "About..." menu item to system menu.

	// IDM_ABOUTBOX must be in the system command range.
	ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX);
	ASSERT(IDM_ABOUTBOX < 0xF000);

	CMenu* pSysMenu = GetSystemMenu(FALSE);
	if (pSysMenu != NULL)
	{
		CString strAboutMenu;
		strAboutMenu.LoadString(IDS_ABOUTBOX);
		if (!strAboutMenu.IsEmpty())
		{
			pSysMenu->AppendMenu(MF_SEPARATOR);
			pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu);
		}
	}

	// Set the icon for this dialog.  The framework does this automatically
	//  when the application's main window is not a dialog
	SetIcon(m_hIcon, TRUE);			// Set big icon
	SetIcon(m_hIcon, FALSE);		// Set small icon
	
	// TODO: Add extra initialization here
	m_FlashType.AddString("S29GL256N");
	m_FlashType.AddString("SST39VF160");

	m_CPUType.AddString("LFXP2-5E-PQFP208");
	m_CPUType.AddString("MPC8347NE");

	return TRUE;  // return TRUE  unless you set the focus to a control
}

void CFlashWriteDlg::OnSysCommand(UINT nID, LPARAM lParam)
{
	if ((nID & 0xFFF0) == IDM_ABOUTBOX)
	{
		CAboutDlg dlgAbout;
		dlgAbout.DoModal();
	}
	else
	{
		CDialog::OnSysCommand(nID, lParam);
	}
}

// If you add a minimize button to your dialog, you will need the code below
//  to draw the icon.  For MFC applications using the document/view model,
//  this is automatically done for you by the framework.

void CFlashWriteDlg::OnPaint() 
{
	if (IsIconic())
	{
		CPaintDC dc(this); // device context for painting

		SendMessage(WM_ICONERASEBKGND, (WPARAM) dc.GetSafeHdc(), 0);

		// Center icon in client rectangle
		int cxIcon = GetSystemMetrics(SM_CXICON);
		int cyIcon = GetSystemMetrics(SM_CYICON);
		CRect rect;
		GetClientRect(&rect);
		int x = (rect.Width() - cxIcon + 1) / 2;
		int y = (rect.Height() - cyIcon + 1) / 2;

		// Draw the icon
		dc.DrawIcon(x, y, m_hIcon);
	}
	else
	{
		CDialog::OnPaint();
	}
}

// The system calls this to obtain the cursor to display while the user drags
//  the minimized window.
HCURSOR CFlashWriteDlg::OnQueryDragIcon()
{
	return (HCURSOR) m_hIcon;
}

void CFlashWriteDlg::OnTestdlg() 
{
	// TODO: Add your control notification handler code here
	CTestSelectDlg Dialog;

	if(Dialog.DoModal()!=IDOK)
		return;	
}

void CFlashWriteDlg::OnStartOperate() 
{
	// TODO: Add your control notification handler code here
	UpdateData(TRUE);

	if(!bFlashInitialized)
	{
		if(ERROR == S29GL128MInitialization())
		{
		    //AfxMessageBox("JTAG& Flash Initialized failed!"); 
			return;
		}
	}
 
	if( (0 != m_WriteBinToFlash) && (1 != m_WriteBinToFlash))
	{
		AfxMessageBox("Some Necessary Filed shold be filled"); 
		return;
	}

	if(m_FileDirectory.IsEmpty())
	{
		AfxMessageBox("Some Necessary Filed shold be filled"); 	
		return;
	}

	iFlashStartOffset = CString2IntValidate(m_FlashStartOffset);
    if(!iFlashStartOffset)
	{
		AfxMessageBox("Some Necessary Filed shold be filled"); 	
		return;
	}

	iFlashBurnSize = CString2IntValidate(m_csFlashProgSize);
    if(!iFlashBurnSize)
	{
		AfxMessageBox("Some Necessary Filed shold be filled"); 	
		return;
	}

	int iFlashType = m_FlashType.GetCurSel();
    if(-1 == iFlashType)
	{
		AfxMessageBox("Some Necessary Filed shold be filled or validated"); 	
		return;	
	}

	int iCPUType = m_CPUType.GetCurSel();
    if(-1 == iCPUType)
	{
		AfxMessageBox("Some Necessary Filed shold be filled"); 	
		return;	
	}

	ReallyExcuteBurnRead();
}

void CFlashWriteDlg::ReallyExcuteBurnRead()
{
    FILE *pgmfile;

	if( m_WriteBinToFlash )
		pgmfile = fopen(m_FileDirectory, "wb");
	else
		pgmfile = fopen(m_FileDirectory, "rb");

	if( m_WriteBinToFlash )
	{
		if(ERROR == EraseFlash(iFlashStartOffset, iFlashBurnSize))
		{
			fclose(pgmfile);

			AfxMessageBox("Erase the FLASH error!"); 	
			// Log to the log files
			return;
		}

		if(ERROR == WriteFlash(pgmfile, iFlashStartOffset, iFlashBurnSize))
		{
			fclose(pgmfile);

			AfxMessageBox("Write the FLASH error!"); 
			// Log to the log files
			return;
		}


		if(ERROR ==CheckFlash(iFlashStartOffset, pgmfile, iFlashBurnSize))
		{
			fclose(pgmfile);

			AfxMessageBox("Check the FLASH error!"); 
			// Log to the log files
			return;
		}
	}
	else
	{
		ReadFlash(pgmfile, iFlashStartOffset, iFlashBurnSize);
	}

	fclose(pgmfile);
}

int CFlashWriteDlg::CString2IntValidate(CString OffsetStart)
{
	int iLength = OffsetStart.GetLength();

	int returnValue = 0;

	if(iLength>8)
	{
		return	returnValue;
	}

	OffsetStart.MakeLower();

	for(int ii=iLength; ii>0; ii--)
	{
		int tempValue = 0;

		if((47<OffsetStart[ii-1])&&(OffsetStart[ii-1]<58))
		{
			tempValue = OffsetStart[ii-1] - 48;
		}
		else if((96<OffsetStart[ii-1])&&(OffsetStart[ii-1]<1038))
		{
			tempValue = OffsetStart[ii-1] - 97 + 10;		
		}
		else
		{
			returnValue = 0;
			break;
		}

		returnValue |= tempValue<<((iLength-ii)*4);
	}
    
	//不允許寫1M后面內容
	if(returnValue>0x100000)
	{
		returnValue = 0;
	}

	return returnValue;
}

void CFlashWriteDlg::OnBtnFileselect() 
{
	UpdateData(TRUE);
	// TODO: Add your control notification handler code here

	BOOL bOpen = TRUE; 
	if(1 == m_WriteBinToFlash)
    {
		bOpen = FALSE;
	}

	CFileDialog FileSelectDlg(bOpen);
	FileSelectDlg.DoModal();

	m_FileDirectory = FileSelectDlg.GetPathName();

	UpdateData(FALSE);
}

void CFlashWriteDlg::TestTempFuncs()
{
	// TODO: Add extra validation here
	for(int i=0; i<100000001; i++)
	{

		if(!(i%1000000))
		{
			int percent = i/1000000;
			int bStatus = 0;
			if(percent<33)
			{
				bStatus = 0;
			}
			else if(percent>66)
			{
				bStatus = 2;
			}
			else
			{
				bStatus = 1;	
			}
			UpdateProgress(bStatus, percent);  
		}
	}
}

void CFlashWriteDlg::UpdateProgress(int iWrite, int percent)
{
	if(iWrite != BurnStatus)
	{
		switch(iWrite)
		{
			case 0:	m_strBurnOperates = "FLASH擦除"; break;
			case 1:	m_strBurnOperates = "FLASH編程"; break;
			case 2:	m_strBurnOperates = "FLASH檢測"; break;
			case 3:	m_strBurnOperates = "FLASH讀取"; break;
		}
		UpdateData(FALSE);
	}

	m_CtlBurnProgress.SetPos(percent);
}

int CFlashWriteDlg::ReadFlash(FILE *stream, int Src, int size)
{
	int   SrcReadAddress = Src;
	int   TotalLen = 0;
	int   RemainLen = TotalLen = size/sizeof(WORD);
	WORD  buffer[512];	
	int   ReallyReadLen = 0;
	int   ReallyReadByte = 0;

	if( NULL == stream )
		return -1;
	fseek( stream,0,SEEK_SET );

	while(RemainLen)
	{
		ReallyReadLen = (512>RemainLen)? RemainLen:512;

		S29GL128MRead(SrcReadAddress, buffer, ReallyReadLen); 
		fwrite((char*)buffer,sizeof(WORD),ReallyReadLen,stream );	

		RemainLen = RemainLen - ReallyReadLen;
		SrcReadAddress = SrcReadAddress + 2*ReallyReadLen; 
		
		UpdateProgress(4,(int)(100 - 100*((float)RemainLen/TotalLen)));
	}

	return 0;
}

int CFlashWriteDlg::WriteFlash(FILE *stream, int Src, int size)
{
	int   SrcReadAddress = Src;
	int   TotalLen = size/sizeof(WORD);
	int   TotalyWrited = 0;
	WORD  buffer[4096];	
	int   ReallyReadLen = 0;
	int   ReallyReadByte = 0;

	BOOL  EndOfFile = FALSE;
	while(TRUE)							//以4k word為單位進行編程
	{
		memset(buffer, 0xff, 4096*2);	// 填充指定長度的字節
		ReallyReadByte = fread(buffer, sizeof(WORD), 4096, stream);
		if (4096*2 > ReallyReadByte)
			EndOfFile = TRUE;
				
		if (OK == S29gl256nWrite(SrcReadAddress, buffer,ReallyReadByte))
		{
			printf("Write success from [0x%08x] to [0x%08x]\n", SrcReadAddress,SrcReadAddress+0x2000-1);
		}
		else
		{
			printf("Write fail[%08x]\n", SrcReadAddress);

			return ERROR;
		}

		SrcReadAddress = SrcReadAddress + ReallyReadByte;

		TotalyWrited = TotalyWrited + ReallyReadByte;
		
		UpdateProgress(1,(int)(100*((float)TotalyWrited/TotalLen)));		

		if (EndOfFile == TRUE)
			break;
	}

	return OK;
}

int CFlashWriteDlg::EraseFlash(int offset, int dataLen)
{
	int retValue = 0;

	int FlashEraseBaseAdr =offset & FLASH_MASK; 
	int numBlocks = (dataLen + offset%FLASH_SECTOR_SIZE)/FLASH_SECTOR_SIZE;
 
    /* For each block..
     */ 
	for(int i = 0; i<numBlocks ; i++)
	{
		if(OK == S29GL256NErase(FlashEraseBaseAdr,1))
		{
			retValue = 0;
		}
		else
		{
			retValue = -1;

			return ERROR;
		} 

		UpdateProgress(0,(int)(100*((float)i+1)/numBlocks));
	}

	return retValue;
}

int CFlashWriteDlg::CheckFlash(int offset, FILE *stream, int dataLen)
{
	int   SrcReadAddress = offset;
	int   TotalLen = dataLen/sizeof(WORD);
	int   TotalyRead = 0;
	WORD  buffer_flash[1024];	
	WORD  buffer_file[1024];

	int   ReallyReadLen = 0;
	int   ReallyReadByte = 0;

	BOOL  EndOfFile = FALSE;
	while(TRUE)							//以4k word為單位進行編程
	{
		memset(buffer_flash, 0xff, 1024*2);	// 填充指定長度的字節
		memset(buffer_file, 0xff, 1024*2);	// 填充指定長度的字節

		ReallyReadByte = fread(buffer_file, sizeof(WORD), 1024, stream);
		if (4096*2 > ReallyReadByte)
			EndOfFile = TRUE;

		S29GL128MRead(SrcReadAddress, buffer_flash, ReallyReadByte); 		
		if(!memcmp((void *)buffer_flash,(void *)buffer_file,ReallyReadByte*2))
		{
			//logs to the log files
			return ERROR;
		}

		SrcReadAddress = SrcReadAddress + ReallyReadByte*2;

		TotalyRead = TotalyRead + ReallyReadByte;
		
		UpdateProgress(2,(int)(100*((float)TotalyRead/TotalLen)));		

		if (EndOfFile == TRUE)
			break;
	}

	return OK;
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
日本在线观看不卡视频| 床上的激情91.| 国产成人aaaa| 欧美日韩精品三区| 国产亚洲成年网址在线观看| 亚洲午夜电影在线观看| 国产精品99久久久久久久女警| 欧美性极品少妇| 国产精品水嫩水嫩| 久久99最新地址| 欧美日韩综合在线| 国产精品麻豆99久久久久久| 黄色精品一二区| 日韩一区二区在线观看| 亚洲成人精品影院| 99在线视频精品| 久久久久99精品国产片| 老汉av免费一区二区三区 | 国产资源在线一区| 欧美日韩亚洲综合在线 欧美亚洲特黄一级 | 91蜜桃网址入口| 久久综合久色欧美综合狠狠| 日韩在线卡一卡二| 欧美性大战久久久久久久蜜臀| 中文字幕在线不卡视频| 精品一区二区综合| 日韩视频一区二区在线观看| 亚洲一二三四久久| 色呦呦一区二区三区| 国产精品精品国产色婷婷| 国产九色精品成人porny| 日韩欧美视频在线 | 一区二区欧美在线观看| 99视频有精品| 亚洲女与黑人做爰| 91尤物视频在线观看| 国产精品色婷婷| av中文字幕不卡| 艳妇臀荡乳欲伦亚洲一区| 色哟哟日韩精品| 亚洲一区二区视频| 欧美高清激情brazzers| 日韩精品视频网站| 日韩免费观看高清完整版| 久久av老司机精品网站导航| 国产亚洲一二三区| 成人av资源站| 亚洲综合一二区| 欧美一级欧美一级在线播放| 六月婷婷色综合| 国产欧美一区二区三区鸳鸯浴| 国产乱国产乱300精品| 中文字幕不卡的av| 色婷婷综合视频在线观看| 亚洲成人免费视频| 欧美不卡在线视频| 成人国产免费视频| 精品国产成人在线影院 | 亚洲a一区二区| 国产精一区二区三区| 国产精品蜜臀av| 成人免费精品视频| 亚洲线精品一区二区三区| 欧美三级视频在线观看| 蜜臀av国产精品久久久久 | 亚洲综合在线五月| 欧美伊人久久久久久久久影院| 亚洲成a人在线观看| 日韩三级电影网址| 岛国av在线一区| 亚洲综合在线第一页| 日韩精品一区二区三区视频在线观看 | 欧美人成免费网站| 精品一区二区免费看| 亚洲婷婷国产精品电影人久久| 欧美日韩精品一区视频| 国产高清不卡一区| 亚洲妇女屁股眼交7| 2019国产精品| 欧美日本在线视频| 成人在线视频一区| 日本成人中文字幕在线视频 | 欧美大片在线观看一区二区| 成人av网站在线| 理论电影国产精品| 亚洲精品一二三| 久久精品夜色噜噜亚洲aⅴ| 欧洲一区二区三区在线| 国产福利一区二区| 丝袜亚洲另类丝袜在线| 国产精品看片你懂得| 日韩美女一区二区三区| 在线观看一区不卡| 成人做爰69片免费看网站| 蜜臀av亚洲一区中文字幕| 亚洲精品免费在线| 欧美国产禁国产网站cc| 欧美电影免费观看完整版| 欧美日韩国产精品自在自线| 99精品黄色片免费大全| 国产精品一区二区在线看| 日韩av午夜在线观看| 一区二区三区精品视频在线| 国产精品久久久久国产精品日日| 亚洲精品一线二线三线无人区| 欧美精品18+| 欧美福利一区二区| 欧美在线视频不卡| 色综合久久综合网| 94色蜜桃网一区二区三区| 国产精品综合一区二区三区| 奇米888四色在线精品| 午夜视黄欧洲亚洲| 亚洲va天堂va国产va久| 亚洲风情在线资源站| 亚洲一区二区不卡免费| 亚洲高清免费观看高清完整版在线观看| 亚洲人成网站精品片在线观看 | 91天堂素人约啪| av在线不卡观看免费观看| 成人精品电影在线观看| 国产成人av福利| 成人免费黄色在线| 99re这里只有精品首页| 99r精品视频| 精品视频一区二区三区免费| 欧美日韩国产一级| 91精品欧美福利在线观看 | 欧美日韩国产综合一区二区| 欧美精品一二三四| 91精品午夜视频| 国产婷婷色一区二区三区在线| 国产精品国产三级国产aⅴ原创 | 国产精品视频一二三区| 国产欧美一区二区精品婷婷 | 在线欧美日韩国产| 欧美日韩国产欧美日美国产精品| 日韩一区二区三区视频在线观看| 日韩精品在线看片z| 久久久不卡影院| 日韩伦理免费电影| 亚洲成人www| 国产在线不卡一卡二卡三卡四卡| 成人国产免费视频| 在线看不卡av| 精品欧美乱码久久久久久| 日本一区二区成人在线| 亚洲激情自拍偷拍| 麻豆中文一区二区| av中文一区二区三区| 在线91免费看| 中文字幕中文字幕一区| 午夜精品久久久久久久| 国产精品1024久久| 欧美亚洲图片小说| 欧美精品一区男女天堂| 亚洲三级久久久| 久久精品久久99精品久久| av在线一区二区| 欧美精品一区视频| 亚洲一二三区不卡| 丁香亚洲综合激情啪啪综合| 欧美日韩国产免费一区二区 | 喷水一区二区三区| 99国产精品久久久久久久久久久| 这里只有精品电影| 国产精品三级在线观看| 日韩av中文字幕一区二区| 97成人超碰视| 久久综合成人精品亚洲另类欧美| 亚洲精品菠萝久久久久久久| 国产大陆亚洲精品国产| 91精品国产全国免费观看| 亚洲色图制服丝袜| 国产一区二区三区日韩| 欧美日韩在线播放| 最新日韩av在线| 国产91丝袜在线观看| 日韩一二三区视频| 亚洲一区视频在线| 波多野结衣中文字幕一区 | 日韩视频一区二区三区| 一区二区三区鲁丝不卡| 99久久精品国产观看| 国产色产综合色产在线视频| 久久国产成人午夜av影院| 欧美日韩国产精选| 亚洲国产欧美在线人成| 91视频一区二区| 综合网在线视频| 99精品视频中文字幕| 国产亚洲综合在线| 韩国一区二区三区| 久久网站最新地址| 精品一区二区三区免费毛片爱| 日韩限制级电影在线观看| 亚洲国产精品久久久久秋霞影院 | 日本韩国精品在线| 亚洲图片激情小说| 99久久久国产精品免费蜜臀|