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

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

?? w25x32_wr.c

?? C語言源代碼及相關資料
?? C
?? 第 1 頁 / 共 2 頁
字號:
#if defined(UART_SEMCONTROL)
				OSSemPost(gw_pSysFlashSem);
#else
				OSSchedUnlock();
#endif // end of #if defined(SYSTEM_SEMCONTROL)
		return	FALSE;
	}
#if defined(UART_SEMCONTROL)
				OSSemPost(gw_pSysFlashSem);
#else
				OSSchedUnlock();
#endif // end of #if defined(SYSTEM_SEMCONTROL)			
	return	TRUE;
		    	
}

//寫盲區數據
uint8	W25X32_WRITE_2_BlindSection(uint8	*	uiReviceBuf0,uint32	uiNum)
{
	uint8	i=0;
	const	uint8	pageLen=0xff;
	//保存到盲區,Flash
#if defined(SYSTEM_SEMCONTROL)
				INT8U SysFlashErr;
				OSSemPend(gw_pSysFlashSem, 0, &SysFlashErr);
#else
				OSSchedLock();
#endif // end of #if defined(SYSTEM_SEMCONTROL)

	if(cur_BlindSection_SaveAddr==0)
	{
		W25X32_Erase_2(FIRSTSEC,FIRSTSEC);
	}
	else
	{
		if((uint32)((cur_BlindSection_SaveAddr+uiNum)/SEC_SIZE) > (uint32)(cur_BlindSection_SaveAddr/SEC_SIZE))
		{
			W25X32_Erase_2((cur_BlindSection_SaveAddr+uiNum)/SEC_SIZE,(cur_BlindSection_SaveAddr+uiNum)/SEC_SIZE);
		}
	}
	for(i=0;i<uiNum/pageLen;i++)
	{	
		W25X32_WR_2(cur_BlindSection_SaveAddr+i*pageLen,uiReviceBuf0+i*pageLen,pageLen);
		OSTimeDly(3);
		
	}
	if(uiNum%pageLen>0)
	{
		OSTimeDly(3);
		W25X32_WR_2(cur_BlindSection_SaveAddr+i*pageLen,uiReviceBuf0+i*pageLen,uiNum%pageLen);
	}
	cur_BlindSection_SaveAddr+=uiNum;
	
#if defined(UART_SEMCONTROL)
				OSSemPost(gw_pSysFlashSem);
#else
				OSSchedUnlock();
#endif // end of #if defined(SYSTEM_SEMCONTROL)	

	{//盲區保存的當前地址
	
		uint8	tempBuff[4];
		uint8	i=0;
		memset(tempBuff,0,sizeof(tempBuff));
		for(i=0;i<sizeof(tempBuff);i++)
			tempBuff[i]=(uint8)(cur_BlindSection_SaveAddr>>(8*(sizeof(tempBuff)-i-1)));
		SaveCustomValue(0x0014,tempBuff);
	}
	
	return 	TRUE;
	
}

uint8	W25X32_READ_2_BlindSection(uint8	*	uiReviceBuf0,uint32	*	puiNum)
{
	uint16	len=0;
	uint8	buff[2];
	memset(buff,0,sizeof(buff));
	
	W25X32_READ_2_Semphore(cur_BlindSection_RepairAddr,sizeof(buff),buff);	//讀長度
	len=(uint16)(buff[0]<<8)+(uint16)buff[1];
	if((len>(GPRSINFOLEN-50))||(len<0x11))	//非法數據	
		return	FALSE;
	*puiNum=(uint32)len;	//數據包長度
	W25X32_READ_2_Semphore(cur_BlindSection_RepairAddr,*puiNum,uiReviceBuf0);	//讀數據包所有內容
	
	return 	TRUE;
	
}

/*******************************************************************************************************
*							                    Max add for extend flash w/r area									     *
********************************************************************************************************/
uint8	Ini_Sec_counter(uint8 *sec_no, uint8 sec_mark, uint8 sec_default )
{
	INT8U	currentsec[1], newcounter[3];
	uint32	secno;
	char		temp[30];
	secno = (uint32)(*sec_no);
	
	W25X32_READ_Semphore(GetAddr(secno, SEC_SIZE-1),sizeof(currentsec), (uint8 *)currentsec);					//check the section is workable or not
	while( (currentsec[0] != sec_mark) && (secno<MAX_SEC_NO) ) 					//find the work section
	{
		secno++;
		W25X32_READ_Semphore(GetAddr(secno, SEC_SIZE-1), sizeof(currentsec), (uint8 *)currentsec);
	}
	if( secno==MAX_SEC_NO )											//if not found, set the mark and counter to default section
	{
		secno = (uint32)(*sec_no);
		currentsec[0] = sec_mark;											
		//W25X32_WRITE(GetAddr(osecno, SEC_SIZE-1), sizeof(currentsec), (uint8 *)currentsec,  sizeof(currentsec));	//set mark (S, C, W, M)
		W25X32_WR(GetAddr(secno, SEC_SIZE-1), (uint8 *)currentsec, (uint32) sizeof(currentsec));	//set mark (S, C, W, M)
		newcounter[0] = 0x00;
		newcounter[1] = 0x00;
		newcounter[2] = 0x00;
		//W25X32_WRITE(GetAddr(osecno, SEC_SIZE-4),  sizeof(newcounter), (uint8 *)newcounter,  sizeof(newcounter));	//set counter to 0
		W25X32_WR(GetAddr(secno, SEC_SIZE-4), (uint8 *)newcounter,  (uint32) sizeof(newcounter));	//set counter to 0
	}
	else
		(*sec_no) =(uint8) secno;
	
	sprintf(temp,"Ini sec:%d to mark:%c\n",secno, sec_mark);
	uartWrite(UART3,(uint8	*)temp,strlen(temp),NULL);
	return TRUE;
}

uint8	Reset_All_Sec()
{
	W25X32_Erase_Semphore(1, MAX_SEC_NO);											//erase all work section
	
	return TRUE;
}

uint8	Test_Count_Sec(uint8 sec_no, uint16 maxcount, uint8 fillchar)										//count how many time to erase & write data in one sector
{
	INT8U	currentcounter[3], newcounter[3];
	uint32	ccounter;
	if (sec_no >1 && sec_no <= MAX_SEC_NO)
	{
		ccounter=0;
		//W25X32_READ(GetAddr(sec_no, SEC_SIZE-3),2,newcounter);
		//ccounter = (uint16) newcounter;
		while(ccounter < 0xFFFF && ccounter <= maxcount )
		{
			W25X32_Erase_Semphore(sec_no,sec_no );
			currentcounter[0] = (ccounter / 0xFF) / 0xFF;
			currentcounter[1] = (ccounter / 0xFF) % 0xFF;
			currentcounter[2] = ccounter % 0xFF;
			ccounter++;
			W25X32_WRITE(GetAddr(sec_no, SEC_SIZE-4), sizeof(currentcounter),  (uint8 *)currentcounter, sizeof(currentcounter));	
			W25X32_READ_Semphore(GetAddr(sec_no, SEC_SIZE-4),sizeof(newcounter), (uint8 *)newcounter);
			UART3_output_digit((uint16)*newcounter,3);
			if( (uint32)*currentcounter != (uint32)*newcounter)
			{
				uartWrite(UART3,(uint8	*)"Flash fail\r\n",strlen("Flash fail\r\n"),NULL); 	//測試	
				UART3_output_digit(  (uint16)*currentcounter,  4);
				ccounter = 0xFFFF;
			}
		}		
	}
	else
		uartWrite(UART3,(uint8	*)"Sector NO error!\r\n",strlen("Sector NO error!\r\n"),NULL); 	//測試
	return TRUE;
}

uint8	Dump_Sec(uint8 sec_no)
{
	uint16 i;
	INT8U	data[1];
	uartWrite(UART3,(uint8	*)"Sector ",strlen("Sector "),NULL); 	//測試
	UART3_output_digit(  sec_no,  2);
	uartWrite(UART3,(uint8	*)" dump start:\r\n",strlen(" dump start:\r\n"),NULL); 	//測試
	for( i=0; i<SEC_SIZE; i++)
	{
		W25X32_READ_Semphore(GetAddr(sec_no,i),sizeof(data), (uint8  *)data);
		UART3_output_digit(  (uint16)*data,  1);
	}	
	uartWrite(UART3,(uint8	*)"\r\ndump end:\r\n",strlen("\r\ndump end:\r\n"),NULL); 	//測試
	return TRUE;
}

uint8	UART3_output_digit( uint16 val, uint8 digit)
{
	INT8U	data, asciidata[9];
	uint8 i;
	if( digit <= 4 & digit > 0 )
	{
		for(i=0; i<digit*2; i++)
		{
			data = val%16;
			if( data > 9 )
				asciidata[digit*2-i-1] = data-10 + 'A';
			else
				asciidata[digit*2-i-1] = data + '0';
			val = val / 16;	
		}
		asciidata[digit*2]='\0';
		uartWrite(UART3,(uint8	*)asciidata,digit*2,NULL); 
	}
	else
		uartWrite(UART3,(uint8	*)"DigitError\r\n",strlen("DigitError\r\n"),NULL);	
	return TRUE;	
}


// 將buff寫入從地址Oid_Addr開始的Flash存儲單元里
uint8 W25X32_WRITE_BLOCK(uint32 Oid_Addr,  uint32 Oid_Len,  uint8 * Buff,  uint32  Data_Size)
{
	const	uint8	pageLen=0xff;
	uint8	i=0; 
	uint8	*	temp;
	
	OSMemQuery(IntBuffer_Big,&MemInfo);
	if(MemInfo.OSNFree > (uint8)(Data_Size/BlockSize_Big))
	{
		temp=(INT8U *)OSMemGet(IntBuffer_Big,&err);		//使用獲得的內存塊
		W25X32_READ_Semphore(GetAddr(Oid_Addr/SEC_SIZE,0),Data_Size,temp);
//		W25X32_Erase(Oid_Addr/SEC_SIZE, Oid_Addr/SEC_SIZE); 			//don't erase
		memmove(temp+Oid_Addr%SEC_SIZE,Buff,Oid_Len);
		for(i=0;i<Data_Size/pageLen;i++)
		{
			W25X32_WR(GetAddr(Oid_Addr/SEC_SIZE,i*pageLen),temp+i*pageLen,pageLen);
			OSTimeDly(3);
		}
		if(Data_Size%pageLen>0)
		{
			W25X32_WR(GetAddr(Oid_Addr/SEC_SIZE,i*pageLen),temp+i*pageLen,Data_Size%pageLen);
			OSTimeDly(3);
		}
		OSMemPut(IntBuffer_Big,temp);		//釋放獲得的內存塊
		uartWrite(UART3,(uint8	*)"WriteBlock\r\n",strlen("WriteBlock\r\n"),NULL);
	}
	else
		return	FALSE;
		
	return	TRUE;
		    	
}
/*******************************************************************************************************
*									                            End Of File										     *
********************************************************************************************************/

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国内外成人在线| 欧美探花视频资源| 91网站在线播放| 欧美二区在线观看| 国产精品第一页第二页第三页| 日本欧美久久久久免费播放网| 成人手机在线视频| 日韩久久精品一区| 日韩在线一区二区三区| 91美女精品福利| 欧美国产一区视频在线观看| 男人的天堂久久精品| 欧美日韩欧美一区二区| 亚洲欧洲日韩一区二区三区| 国产一区二区在线看| 日韩欧美在线一区二区三区| 亚洲成人福利片| 色综合色狠狠综合色| 国产精品成人网| 成人自拍视频在线| 国产欧美日韩视频一区二区| 国产乱码精品一区二区三区av| 日韩一区二区三区精品视频 | 中文字幕久久午夜不卡| 蜜臀av在线播放一区二区三区| 欧美日韩精品欧美日韩精品一 | 亚洲精品午夜久久久| 国产精品系列在线播放| 久久99精品一区二区三区| 91在线免费播放| 国产精品天美传媒| 成人久久18免费网站麻豆| 国产精品入口麻豆九色| 成人午夜激情视频| 中文字幕乱码久久午夜不卡| 成人app软件下载大全免费| 91丨九色丨蝌蚪富婆spa| 91老司机福利 在线| 免费在线看一区| 无码av中文一区二区三区桃花岛| 国产精品乡下勾搭老头1| 精品国产乱码久久久久久夜甘婷婷 | 久久久国产一区二区三区四区小说| 美女任你摸久久| 精品成人一区二区| 国v精品久久久网| 日本一区二区视频在线| 色天天综合色天天久久| 一区二区三区在线视频观看58| 91国内精品野花午夜精品| 亚洲国产婷婷综合在线精品| 91精品国产综合久久久蜜臀粉嫩 | 日日摸夜夜添夜夜添亚洲女人| 欧美挠脚心视频网站| 国产在线不卡一区| 中文欧美字幕免费| eeuss国产一区二区三区| 国产精品家庭影院| 欧美日本在线看| 国产乱人伦精品一区二区在线观看| 《视频一区视频二区| 欧美精品xxxxbbbb| 国产麻豆一精品一av一免费 | 欧美性xxxxxxxx| 美女性感视频久久| |精品福利一区二区三区| 日韩亚洲欧美一区二区三区| 成人精品视频网站| 香蕉加勒比综合久久 | 欧美一区二区三区免费大片| 丁香啪啪综合成人亚洲小说| 污片在线观看一区二区| 欧美国产日韩a欧美在线观看| 精品视频在线视频| 丁香六月综合激情| 日韩中文字幕麻豆| 亚洲天堂网中文字| 精品成人一区二区三区| 欧美日本一道本在线视频| 国产精品99久久久久久有的能看 | 国产成都精品91一区二区三| 亚洲国产精品综合小说图片区| 久久无码av三级| 欧美精选一区二区| 99久久婷婷国产综合精品电影| 男男gaygay亚洲| 亚洲最新视频在线观看| 国产精品青草久久| 日韩精品一区二区在线| 色综合久久66| 91色在线porny| 粉嫩一区二区三区在线看| 天堂成人国产精品一区| 亚洲欧美日韩中文播放| 久久精品一区二区| 2024国产精品| 欧美一级搡bbbb搡bbbb| 欧美日韩国产高清一区二区| 91麻豆国产福利精品| 国产成人精品一区二区三区四区| 久久99国产精品成人| 日韩av中文字幕一区二区三区| 一区二区不卡在线播放| 中文字幕亚洲电影| 中文字幕在线不卡一区| 亚洲国产精品t66y| 国产欧美日韩麻豆91| 欧美国产一区二区在线观看| 亚洲精品在线一区二区| 精品久久久久久久久久久久久久久 | 91精品国产乱码久久蜜臀| 欧美揉bbbbb揉bbbbb| 欧美日韩中文字幕一区二区| 色婷婷综合激情| 欧美性受极品xxxx喷水| 在线观看日韩一区| 欧美日本一区二区三区四区| 欧美一区二区三区影视| 日韩欧美国产系列| 欧美成人福利视频| www国产精品av| 中文字幕巨乱亚洲| 亚洲码国产岛国毛片在线| 悠悠色在线精品| 亚洲18色成人| 久久激情五月激情| 国产成人午夜片在线观看高清观看| 国产精品一区二区91| 9i在线看片成人免费| 色屁屁一区二区| 3d动漫精品啪啪1区2区免费 | 亚洲午夜久久久| 日日摸夜夜添夜夜添国产精品 | 国产精品一区二区果冻传媒| hitomi一区二区三区精品| 欧美亚洲国产一区二区三区| 欧美精品v国产精品v日韩精品| 精品免费一区二区三区| 国产精品久久久久久福利一牛影视 | 国产在线视频一区二区| 成人高清伦理免费影院在线观看| 99久久免费国产| 3d成人动漫网站| 久久久精品人体av艺术| 亚洲精品免费播放| 九九视频精品免费| eeuss影院一区二区三区| 欧美精品免费视频| 亚洲国产精品精华液ab| 午夜天堂影视香蕉久久| 国产精品影音先锋| 欧美三区免费完整视频在线观看| 精品福利一区二区三区免费视频| 国产精品第一页第二页第三页| 香蕉久久夜色精品国产使用方法| 国产电影精品久久禁18| 欧美精品在线观看播放| 国产精品色眯眯| 麻豆91精品91久久久的内涵| 色香蕉久久蜜桃| 久久影院电视剧免费观看| 亚洲一区二区三区国产| 国产 欧美在线| 欧美变态tickling挠脚心| 亚洲一区二区av电影| 国产成人精品aa毛片| 欧美电影免费观看高清完整版在线观看| 国产精品的网站| 国产精一区二区三区| 在线成人免费观看| 一区二区成人在线| 99国产精品久久久久久久久久| 精品日韩欧美在线| 亚洲午夜久久久久久久久电影网| 成人精品免费网站| 久久久国产精品午夜一区ai换脸| 日韩高清不卡在线| 欧美日本精品一区二区三区| 亚洲日本在线天堂| 成人听书哪个软件好| 久久久久久99久久久精品网站| 美女精品一区二区| 欧美一区二区三区成人| 亚洲制服丝袜av| 91在线观看地址| 亚洲免费观看在线视频| 成人黄色大片在线观看| 国产精品午夜在线观看| 国产露脸91国语对白| 久久综合久久鬼色中文字| 蜜桃av噜噜一区| 日韩欧美国产wwwww| 日韩精品福利网| 91麻豆精品国产91久久久使用方法| 亚洲免费观看高清完整版在线观看熊 | 在线播放中文一区| 天堂影院一区二区| 欧美一区二区在线免费播放| 日韩成人精品在线观看| 欧美一级爆毛片|