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

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

?? upgrade.c

?? C語言源代碼及相關資料
?? C
字號:
/****************************************Copyright (c)**************************************************
**                               Guangzou ZLG-MCU Development Co.,LTD.
**                                      graduate school
**                                 http://www.zlgmcu.com
**
**--------------File Info-------------------------------------------------------------------------------
** File name:			main.c
** Last modified Date:  2004-09-16
** Last Version:		1.0
** Descriptions:		The main() function example template
**
**------------------------------------------------------------------------------------------------------
** Created by:			LinEnQiang
** Created date:		2007-3-26
** Version:				1.0
** Descriptions:		IAP升級 
**------------------------------------------------------------------------------------------------------
** Modified by:			wuzhijian
** Modified date:		2007-09-02
** Version:				
** Descriptions:		對程序的風格以及注釋略作調整,并檢查代碼。
**
** Rechecked by:		Litiantian
********************************************************************************************************/
#include "config.h"


#define	LOW				0x00010000		// LOW區首地址
#define	HIGH			0x00030000		// HIGH區首地址
//#define	Flag			0x00003000		// 用戶程序標志區,0x55-運行LOW區代碼,0xaa-運行HIGH區代碼
#define	LED1			(1 << 15)		// P0.15控制LED1
#define	UserISP			(1 <<  6)		// 用戶ISP跳線,P0.6。上電為低時,進入用戶ISP代碼區域

#define	RxHardFIFO_Size	8
#define	User_Flag		0x00078000		// 用戶程序標志區
										// 0x10000	 -HIGH區,0x10000
										// 0xffffffff-LOW區 ,0x8000
										// 0x8000    -LOW區 ,0x8000
#define	Ethernet_RAM	0x7FE00000		// 16K 以太網SRAM起始地址
#define	User_LOW		0x00010000		// 用戶程序低區入口
#define	User_HIGH		0x00030000		// 用戶程序高區入口

__align(4)	uint8	*IAP_Tmp=NULL;//[4096];		// 定義4K空間,編程Flash時使用
uint8   *RcvData   = (uint8 *)Ethernet_RAM;		// 接收數據緩沖區
uint32	*FlagPoint = (uint32 *)User_Flag;		// 用戶程序標志指針

volatile uint32 RcvCount;				// 接收字節數
volatile uint8  RcvOver;				// 接收完成標志 1:表示完成


/*
void SendMessage(void)
{
	
	if (*FlagPoint == HIGH)					// 當前程序運行在HIGH區,需要對LOW區進行升級
	{ 							
		uartWrite(UART0,(uint8 *)("當前程序運行在HIGH區,只能對LOW區進行升級 "), strlen("當前程序運行在HIGH區,只能對LOW區進行升級 "),NULL);				
	}
	else 
	{
		if (*FlagPoint == LOW)				// 當前程序運行在LOW區,需要對HIGH區進行升級
		{
			uartWrite(UART0,(uint8 *)("當前程序運行在LOW區,只能對HIGH區進行升級 "), strlen("當前程序運行在LOW區,只能對HIGH區進行升級 "),NULL);
		}
		else									// 當前程序運行在固件區,需要對HIGH區進行升級
		{
			uartWrite(UART0,(uint8 *)("當前程序運行在固件區,只能對HIGH區進行升級 "), strlen("當前程序運行在固件區,只能對固件區進行升級 "),NULL);
		}
	}
	
}
*/
/*********************************************************************************************************
** 函數名稱: ProgramUserData
** 功能描述: 編程用戶代碼區。
** 入口參數: 無
** 出口參數: 無
********************************************************************************************************/
void ProgramUserData(void)
{
	uint32  Addr;					// Addr:字節偏移量
	uint32  ProgramCount;			// ProgramCount:編程到Flash扇區的字節數
	if (*FlagPoint == HIGH)		// 當前程序運行在HIGH區,需要對LOW區進行升級
	{ 	
		SelSector  (9, 12);			// 選擇LOW扇區
		EraseSector(9, 12);			// 擦除LOW扇區				
	}
	else							// 當前程序運行在LOW區或者固件區,需要對HIGH區進行升級
	{
		SelSector  (13, 16);			// 選擇HIGH扇區
		EraseSector(13, 16);			// 擦除HIGH扇區
	}
	
	Addr = 0;						// 字節偏移量清0
	while (RcvCount != 0)
	{			
		if (RcvCount > (1024 * 4))	// 一次最多寫入4K代碼量
		{
			memcpy(IAP_Tmp, RcvData + Addr, 1024 * 4);
			RcvCount 	-= (1024 * 4);
			ProgramCount = 1024 * 4;
		}		
		else
		{
			memcpy(IAP_Tmp, RcvData + Addr, RcvCount);
			ProgramCount = RcvCount;	
			RcvCount = 0;
			if ((ProgramCount == 256) || (ProgramCount == 512) || (ProgramCount == 1024) || (ProgramCount == 4096))
			{
				goto ProgramFlash;
			}
			/* 滿足編程字節數的要求,256、512、1024等 */
			if (ProgramCount < 256)
			{
				ProgramCount = 256;					
				goto ProgramFlash;
			}
			if (ProgramCount < 512)
			{
				ProgramCount = 512;
				goto ProgramFlash;
			}
			if (ProgramCount < 1024)
			{
				ProgramCount = 1024;
				goto ProgramFlash;
			}
			if (ProgramCount < 4096)
			{
				ProgramCount = 4096;
				goto ProgramFlash;
			}
		}
ProgramFlash:
		/* 升級用戶程序空間 */
		if (*FlagPoint == HIGH)			// 當前程序運行在HIGH區,需要對LOW區進行升級
		{
			SelSector(9, 12);				// 選擇LOW扇區
			RamToFlash(User_LOW + Addr, (uint32)IAP_Tmp, ProgramCount);	// 寫數據到FLASH
			Addr += ProgramCount;
		}
		else								// 當前程序運行在LOW區,需要對HIGH區進行升級
		{
			SelSector(13, 16);				// 選擇HIGH扇區
			RamToFlash(User_HIGH + Addr, (uint32)IAP_Tmp, ProgramCount);// 寫數據到FLASH
			Addr += ProgramCount;
		}
	}
}

/*********************************************************************************************************
** 函數名稱: UpdateUserFlag
** 功能描述: 更新用戶程序標志區。
** 入口參數: 無
** 出口參數: 無
********************************************************************************************************/
void UpdateUserFlag(void)
{
	uint32  *Data32Point;
	/* 更新用戶程序標志空間0x4000 */
	memset(IAP_Tmp, 0xff, 256);					// 臨時緩沖區清空
	Data32Point = (uint32 *)IAP_Tmp;
	if (*FlagPoint == HIGH)
	{
		*Data32Point = LOW;
	}
	else
	{
	
	 	*Data32Point = HIGH;
	  
	}
	SelSector  (22, 22);							// 選擇扇區
	EraseSector(22, 22);							// 擦除扇區
	SelSector  (22, 22);							// 選擇扇區
	RamToFlash(User_Flag, (uint32)IAP_Tmp, 256);// 編程FLASH
}

/*********************************************************************************************************
** 函數名稱:main
** 函數功能:在線升級函數Boot代碼。
********************************************************************************************************/
uint8 upgrade (void)
{	
	void (*UserProgram)();   					//函數指針
	uint32  dly;
	
	OSMemQuery(IntBuffer_Big,&MemInfo);
	if(MemInfo.OSNFree > (uint8)(0x1000/BlockSize_Big))
	{
		IAP_Tmp=(INT8U *)OSMemGet(IntBuffer_Big,&err);								// 發送提示信息
		//使用獲得的內存塊
		memset(IAP_Tmp, 0, 4096);					// 緩沖區清零
		memset((char *)RcvData, 0, 1024 * 8);		
	   	//if ((Read_P0() & UserISP) == 0)		
		{	
			/* 進入升級階段 */
			//T0MAT_Init(Fpclk * 30, 0, 1, 0, 0, 1);	// 30秒鐘定時
			RcvOver  = 0;
			RcvCount = 0;
			while (RcvOver == 0)
			{	
				if ((T0IR & 0x01) != 0)
				{
					T0IR     = 0x01;				// 清除中斷標志					
					RcvCount = 0;
					break;							// 時間到,退出接收程序
				}			
			}
			if (RcvCount != 0)						// 升級用戶代碼
			{
				
				ProgramUserData();					// 編程用戶代碼區
				UpdateUserFlag();					// 更新用戶程序標志區
				
			}
		}
		
		//釋放獲得的內存塊
		OSMemPut(IntBuffer_Big,IAP_Tmp);
		
	}
	/* 運行用戶程序 */
	
	UserProgram = (void (*)()) 0;			// 避免編譯警告
	if (*FlagPoint == HIGH)
	{
		UserProgram = (void (*)()) (HIGH);
	}
	else 
	{
		if (*FlagPoint == LOW)
		{
			UserProgram = (void (*)()) (LOW);
		}
		else
		{
			//while (1)
			//{
				//P0_GPIOClr(LED1);
				for(dly = 5000000; dly != 0; dly--);
				//P0_GPIOSet(LED1);
				for(dly = 5000000; dly != 0; dly--);
			//}		
		}
	}
	(*UserProgram)();							// 啟動程序
    return (0);
}
/*********************************************************************************************************
**                            End Of File
********************************************************************************************************/

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
丝袜美腿亚洲色图| 亚洲成人动漫在线免费观看| 欧美精品三级日韩久久| 在线视频综合导航| 欧美吞精做爰啪啪高潮| 欧亚洲嫩模精品一区三区| 91尤物视频在线观看| 91性感美女视频| 91蜜桃传媒精品久久久一区二区 | 91毛片在线观看| 91在线看国产| 在线观看日韩精品| 69久久99精品久久久久婷婷| 欧美一区二区三区视频| 精品日韩在线观看| 国产农村妇女毛片精品久久麻豆 | 欧美一区二区三区小说| 欧美变态凌虐bdsm| 久久久久9999亚洲精品| 中文字幕一区二区三区蜜月| 伊人色综合久久天天人手人婷| 一区二区三区中文在线| 免费日韩伦理电影| 成人污污视频在线观看| 欧美在线观看禁18| 精品国产亚洲在线| 国产精品三级av| 亚洲超碰97人人做人人爱| 精品一区二区三区久久| 成+人+亚洲+综合天堂| 欧美手机在线视频| 国产欧美综合在线观看第十页| 综合久久久久久| 免费看日韩精品| 国产xxx精品视频大全| 在线观看免费视频综合| 久久人人爽人人爽| 一区二区三区欧美在线观看| 紧缚捆绑精品一区二区| 91国偷自产一区二区三区观看| 日韩欧美一级二级三级久久久| 国产精品美女视频| 久久精品国产精品亚洲精品| 不卡的看片网站| 日韩一区二区免费高清| 一区二区三区在线观看网站| 国产美女视频一区| 欧美精品aⅴ在线视频| 亚洲欧美日韩中文字幕一区二区三区| 日韩电影免费一区| 色琪琪一区二区三区亚洲区| 久久一日本道色综合| 亚洲在线观看免费视频| 国产·精品毛片| 欧美tickle裸体挠脚心vk| 一区二区三区精品视频| www.在线欧美| 国产午夜精品福利| 久久国产精品露脸对白| 欧美三电影在线| 亚洲男人天堂av网| 99综合电影在线视频| 久久久不卡网国产精品一区| 麻豆精品久久久| 日韩欧美三级在线| 青青国产91久久久久久| 欧美欧美欧美欧美首页| 亚洲午夜一区二区| 欧美色网一区二区| 亚洲日本一区二区| 91在线观看美女| 国产精品久久久久久久第一福利 | 日韩精品专区在线影院观看| 天天av天天翘天天综合网| 91免费观看国产| 一区二区三区在线免费视频| 一本一道综合狠狠老| ...中文天堂在线一区| 国产91在线观看| 国产精品女上位| 成人av网站在线| 国产精品久久久久久久久晋中| 国产91精品在线观看| 国产精品麻豆一区二区| 99国产精品久久| 亚洲女厕所小便bbb| 日本道精品一区二区三区| 亚洲自拍偷拍图区| 欧美日本韩国一区二区三区视频| 日日夜夜免费精品| 欧美大白屁股肥臀xxxxxx| 国产在线视频不卡二| 欧美激情一二三区| 色狠狠色噜噜噜综合网| 日韩不卡一区二区| 久久九九全国免费| 在线免费视频一区二区| 免费在线观看成人| 国产精品久久一卡二卡| 欧美午夜片在线观看| 黄一区二区三区| 亚洲精品免费在线| 欧美一卡2卡3卡4卡| 国产成人日日夜夜| 亚洲亚洲人成综合网络| 精品国产精品一区二区夜夜嗨| 成人精品视频一区| 日本v片在线高清不卡在线观看| 亚洲精品一区二区三区四区高清| www.激情成人| 日韩福利电影在线| 国产精品久久久久影院色老大| 在线观看日产精品| 国产宾馆实践打屁股91| 午夜伦欧美伦电影理论片| 国产欧美日韩视频一区二区 | 水野朝阳av一区二区三区| 久久理论电影网| 欧美伊人精品成人久久综合97| 国产在线播精品第三| 亚洲6080在线| 国产精品成人免费| 欧美成人免费网站| 欧美日韩国产成人在线91| 成人av集中营| 激情另类小说区图片区视频区| 亚洲自拍偷拍综合| 综合久久久久久| 国产欧美一区二区三区在线老狼 | 奇米在线7777在线精品| 亚洲蜜臀av乱码久久精品| 久久久久国产精品人| 91精品蜜臀在线一区尤物| 91成人网在线| 97成人超碰视| 国产xxx精品视频大全| 国内精品在线播放| 久久精品国产99久久6| 亚洲午夜激情网站| 亚洲三级电影全部在线观看高清| 国产午夜亚洲精品午夜鲁丝片| 欧美一级理论性理论a| 欧美三级欧美一级| 欧美在线观看一区| 欧美视频精品在线观看| 欧美最猛性xxxxx直播| 91成人免费电影| 欧美日韩中文另类| 日本韩国一区二区三区视频| 91蜜桃网址入口| 在线欧美小视频| 欧美日本一道本| 欧美一区二区三区免费大片| 欧美日韩中文字幕一区二区| 欧美日韩情趣电影| 91精品国产高清一区二区三区蜜臀| 欧美少妇性性性| 欧美一区二区三区在| 日韩一本二本av| 精品欧美一区二区三区精品久久| 日韩欧美国产wwwww| 日韩精品在线看片z| 久久女同精品一区二区| 国产丝袜美腿一区二区三区| 欧美国产精品一区二区三区| 国产精品久线观看视频| 18成人在线视频| 午夜电影网一区| 日韩av不卡一区二区| 九色porny丨国产精品| 国产成人午夜99999| 97久久精品人人澡人人爽| 色欧美日韩亚洲| 欧美一区二区高清| 久久久久久综合| 亚洲精品午夜久久久| 日韩激情中文字幕| 国产激情视频一区二区三区欧美| 成人午夜视频在线观看| 色8久久人人97超碰香蕉987| 欧美一级理论性理论a| 国产精品久久久久久福利一牛影视 | 国产成人精品影院| 91福利在线导航| 精品国产一二三区| 成人欧美一区二区三区白人 | 九九九久久久精品| 成人高清视频免费观看| 91精品国产综合久久精品图片| 久久久亚洲综合| 亚洲综合丝袜美腿| 国产一二三精品| 欧美午夜在线观看| 国产嫩草影院久久久久| 亚洲国产你懂的| 不卡一区中文字幕| 欧美成人女星排名| 亚洲国产中文字幕| 99久久精品国产一区| 精品久久一二三区|