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

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

?? blkmem.c

?? 單片機學習資料 適合初學者進行開發學習
?? C
?? 第 1 頁 / 共 5 頁
字號:
#endif  if (failures > 0) {    printk("FLASH: %d failures programming FLASH!\n", failures);    return;  }#if 0  printk("\nFLASH: programming successful!\n");#endif  if (prog->reset) {    printk("FLASH: rebooting...\n\n");    HARD_RESET_NOW();  }}#endif /* defined(CONFIG_INTELFLASH) *//****************************************************************************/#endif /* CONFIG_FLASH_SNAPGEAR *//****************************************************************************/#ifdef CONFIG_SHGLCOREstatic DECLARE_MUTEX(spare_lock);void read_spare(struct arena_t * a, unsigned long pos, unsigned long length, char * buffer){#ifdef DEBUG  printk("rsl\n");#endif    /* Mutex all access to FLASH */  down(&spare_lock);  #ifdef DEBUG  printk("rsld\n");#endif    /* Just copy the data into target buffer */  memcpy( buffer, (void*)(a->address+pos), length);  /* Release MUTEX */  up(&spare_lock);  #ifdef DEBUG  printk("rsud\n");#endif}void write_spare(struct arena_t * a, unsigned long pos, unsigned long length, char * buffer){  unsigned long start;  unsigned char c;  volatile unsigned char * address;  unsigned char result;  unsigned long fbase = a->address;  unsigned long flags;  #if 0  for(i = pos / a->blksize; i <= ((pos+length-1) / a->blksize); i++) {    if (test_bit(i, &a->auto_erase_bits)) {      /* erase sector start */      printk("Autoerase of sector %d\n", i);      erase_spare(a, i * a->blksize);      clear_bit(i, &a->auto_erase_bits);    }  }#endif#ifdef DEBUG  printk("wsl\n");#endif    down(&spare_lock);  #ifdef DEBUG  printk("wsld\n");#endif    start = jiffies;    address = (unsigned volatile char*)(fbase+pos);    while (length>0) {      c = *buffer++;        /*printk("Checking spare_flash program of byte %lx, at address %p, value %x (%c), current %x (%c)\n", pos, address, c, c, *address, *address);*/    if (*address != c) {        /*printk("Starting spare_flash program of byte %lx, at address %p\n", pos, address);*/                  if (c & ~*address) {        printk("Unable to write byte at %p (impossible bit transition in %x, actual %x)\n", address, c, *address);        /*continue;*/      }	save_flags(flags); cli();      *(unsigned volatile char *)(fbase | 0x5555)=0x0aa;      *(unsigned volatile char *)(fbase | 0x2aaa)=0x055;      *(unsigned volatile char *)(fbase | 0x5555)=0x0a0;            *address = c;                     for(;;) {        result = *address;        /*printk("Read value %x (%c)\n", result, result);*/        if ((result & 0x80) == (c & 0x80))          break;        if (result & 0x20) {          printk("timeout of FLASH write at address %p of value %x (actual %x)\n", address, c, *address);          *(unsigned volatile char *)(fbase)=0x0f0; /* Reset */          break;        }      }            restore_flags(flags);      /*printk("Completed spare_flash program of byte %lx, at address %p\n", pos, address);*/        #if 0      if (jiffies != start) {        /*printk("Spare_flash rescheduling in write\n");*/        current->state = TASK_INTERRUPTIBLE;        current->timeout = jiffies;        schedule();        current->timeout = 0;        /*schedule();*/        start = jiffies;      }#endif    }    address++;    length--;  }    up(&spare_lock);  #ifdef DEBUG  printk("wsud\n");#endif}void erase_spare(struct arena_t * a, unsigned long pos){  unsigned long fbase = a->address;  int delay;  unsigned volatile char * address;  unsigned long flags;    if (pos >= a->length)    return;    /* Mutex all access to FLASH memory */  #ifdef DEBUG  printk("esl\n");#endif    down(&spare_lock);#ifdef DEBUG  printk("esld\n");#endif  address = (unsigned volatile char*)(fbase + pos);  printk("Starting spare_flash erase of byte %lx, at address %p\n", pos, address);    save_flags(flags); cli();again:  delay = HZ/4+1;    /* Initiate erase of FLASH sector */    *(unsigned volatile char *)(fbase | 0x5555)=0x0aa;  *(unsigned volatile char *)(fbase | 0x2aaa)=0x055;  *(unsigned volatile char *)(fbase | 0x5555)=0x080;  *(unsigned volatile char *)(fbase | 0x5555)=0x0aa;  *(unsigned volatile char *)(fbase | 0x2aaa)=0x055;                         *address = 0x030;    /* Delay until erase is complete */       for (;;) {    unsigned char result;#ifdef original_spare_erase_delay    struct wait_queue *wait = NULL;#ifdef DEBUG    printk("Spare_flash erase delaying for %d ticks, status is %x\n", delay, (unsigned int)*address);#endif        current->timeout = jiffies + delay;#if 0        current->state = TASK_INTERRUPTIBLE;    schedule();    current->timeout = 0;#endif    interruptible_sleep_on(&wait);#endif    udelay(100000);        result = *address;    if (result & 0x80)       break;    if (result & 0x20) {       printk("timeout of Spare_flash erase of address %p\n", address);       *(unsigned volatile char *)(fbase)=0x0f0; /* Reset */       printk("Sleeping a second and retrying\n");       udelay(1000000);              goto again;    }  }    restore_flags(flags);#ifdef DEBUG  printk("Completed spare_flash erase of byte %lx, at address %p\n", pos, address);#endif    up(&spare_lock);#ifdef DEBUG  printk("esud\n");#endif}#define VSP(X) (*(volatile unsigned short *)(X))#define VSC(X) (*(volatile unsigned char *)(X))#define SCSR  VSP(0xfffc0c)#define SCSR_TDRE (1<<8)#define SCDR  VSP(0xfffC0e)#define print_char(x) ({			\	while (!(SCSR & SCSR_TDRE))		\		;				\	SCDR = (x);				\})#define print_hexdigit(x) ({			\	int digit = (x) & 0xf;			\	if (digit>9)				\		print_char('a'+digit-10);	\	else					\		print_char('0'+digit);		\						\})#define print_num(x) ({				\	unsigned long num = (x);		\	print_hexdigit(num >> 28);		\	print_hexdigit(num >> 24);		\	print_hexdigit(num >> 20);		\	print_hexdigit(num >> 16);		\	print_hexdigit(num >> 12);		\	print_hexdigit(num >> 8);		\	print_hexdigit(num >> 4);		\	print_hexdigit(num >> 0);		\})/* Note: sub_program_main must not reference _any_ data or code outside of itself,   or leave interrupts enabled, due to the fact that it is probably erasing   & reloading the kernel. */#define SET_SHORT(x,y) VSP((x)) = (y)/*#define SET_SHORT(x,y) ({})*/ /*print_char('>');print_num(x);*/ /*printk("%8.8lx <= %04x\n", (x), (y))*/#define SET_CHAR(x,y) VSC((x)) = (y)/*#define SET_CHAR(x,y) ({})*/ /*print_char('>');print_num(x);*/ /*printk("%8.8lx <= %02x\n", (x), (y))*/#define GET_SHORT(x) VSP((x))/*#define GET_SHORT(x) ({0;})*/ /*({print_char('<');print_num(x);0;})*/ /*(printk("%8.8lx => ....\n", (x)),0)*/#define GET_CHAR(x) VSC((x))/*#define GET_CHAR(x) ({0;})*/ /*({print_char('<');print_num(x);0;})*/ /*(printk("%8.8lx => ..\n", (x)),0)*/void sub_program_main(struct arena_t * a, struct blkmem_program_t * prog){  volatile int i,l;  unsigned long base, offset, ptr, min, max;  unsigned char * c;  unsigned int erased = 0;  int failures;  int retry;    cli();  retry = 0;again:  SET_ALARM_LED(1);    retry++;    if (retry>5) {  	goto give_up;  }    print_char('\r');    print_char('\n');    print_char('R');    print_char('0' + retry);  failures = 0;  erased = 0;  /*  for(i=prog->blocks-1;i>=0;i--) {*/  for(i=0;i<prog->blocks;i++) {    SET_COMM_STATUS_LED(!GET_COMM_STATUS_LED());    print_char('\r');    print_char('\n');    print_num(prog->block[i].pos+a->address);    print_char('-');    print_num(prog->block[i].pos+prog->block[i].length-1+a->address);    print_char('\r');    print_char('\n');    if(prog->block[i].length > 0xE0000)      break;    for(l=prog->block[i].pos / a->blksize; l <= ((prog->block[i].pos+prog->block[i].length-1) / a->blksize); l++) {      if (!test_bit(l, &erased)) {         	print_char('E'); 	print_char('0' + l / 10); 	print_char('0' + l % 10); 	print_char('\r'); 	print_char('\n'); 	 	if (l <  1) 	  break; 	/*if (l >= 8) 	  break;*/	ptr = l * a->blksize;	offset = ptr % a->unitsize;	base = ptr - offset;		base += a->address;	ptr += a->address;		print_char('b');	print_char('a');	print_char('s');	print_char('e');	print_char(' ');	print_num(base);	print_char('\r');	print_char('\n');	print_char('o');	print_char('f');	print_char('f');	print_char(' ');	print_num(offset);	print_char('\r');	print_char('\n');	print_char('p');	print_char('t');	print_char('r');	print_char(' ');	print_num(ptr);	print_char('\r');	print_char('\n');        set_bit(l, &erased);        if (ptr <  0x020000)          break;        /*if (ptr >= 0x100000)          break;*/                print_num(ptr);         	SET_COMM_ERROR_LED(1); 	        /* Erase even half of sector */        SET_SHORT( (base | (0x5555 << 1)), 0xaa00);        SET_SHORT( (base | (0x2aaa << 1)), 0x5500);        SET_SHORT( (base | (0x5555 << 1)), 0x8000);        SET_SHORT( (base | (0x5555 << 1)), 0xaa00);        SET_SHORT( (base | (0x2aaa << 1)), 0x5500);        SET_SHORT( ptr, 0x3000);#ifdef original_erase_logic        while (!(GET_SHORT(ptr) & 0x8000))          ;#else	for (;;) {		unsigned int status = GET_SHORT(ptr);		if (status & 0x8000) {			/* Erase complete */			break;		}		if (status & 0x2000) {			/* Check again */			status = GET_SHORT(ptr);			if (status & 0x8000) {				/* Erase complete */				break;			}						/* Erase failed */			print_char('F');						/* Reset FLASH unit */			SET_SHORT( base, 0xf000);						failures++;						/* Continue (with unerased sector) */			break;		}        }#endif        print_char(':');        /* Erase odd half of sector */        SET_SHORT( (base | (0x5555 << 1)), 0x00aa);        SET_SHORT( (base | (0x2aaa << 1)), 0x0055);        SET_SHORT( (base | (0x5555 << 1)), 0x0080);        SET_SHORT( (base | (0x5555 << 1)), 0x00aa);        SET_SHORT( (base | (0x2aaa << 1)), 0x0055);        SET_SHORT( ptr, 0x0030);#ifdef original_erase_logic        while (!(GET_SHORT(ptr) & 0x0080))          ;#else	for (;;) {		unsigned int status = GET_SHORT(ptr);		if (status & 0x0080) {			/* Erase complete */			break;		}		if (status & 0x0020) {					/* Check again */						status = GET_SHORT(ptr);			if (status & 0x0080) {				/* Erase complete */				break;			}			/* Erase failed */			print_char('F');						/* Reset FLASH unit */			SET_SHO

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
久久日韩精品一区二区五区| 久久午夜羞羞影院免费观看| 国产一区二区三区香蕉| 日韩综合小视频| 亚洲成av人片在线观看无码| 一区二区三区四区亚洲| 亚洲欧美在线视频观看| 中文字幕免费在线观看视频一区| 久久人人爽爽爽人久久久| 精品久久五月天| 久久久久久久国产精品影院| 国产亚洲综合色| 国产精品久久久久久久久搜平片| 最新国产精品久久精品| 亚洲男同1069视频| 亚洲成人动漫精品| 九九精品一区二区| 不卡的电视剧免费网站有什么| eeuss鲁片一区二区三区在线看| av午夜一区麻豆| 欧美日韩在线不卡| 久久精品夜夜夜夜久久| 1000精品久久久久久久久| 亚洲欧美视频一区| 午夜视频一区二区三区| 激情综合色综合久久综合| 成人永久看片免费视频天堂| 色综合天天性综合| 5566中文字幕一区二区电影| 久久这里只有精品首页| 最新中文字幕一区二区三区| 五月天中文字幕一区二区| 久久99精品久久久久久动态图| 成人丝袜高跟foot| 欧美日韩一区在线| 国产日韩欧美精品一区| 亚洲一区二区三区四区五区黄 | 欧美大胆人体bbbb| 国产精品视频一二| 午夜国产精品影院在线观看| 精品夜夜嗨av一区二区三区| 色综合久久久久综合体| 日韩你懂的在线播放| 亚洲丝袜自拍清纯另类| 美女尤物国产一区| 色屁屁一区二区| 精品美女在线观看| 亚洲国产一区二区在线播放| 国产精品一二三在| 91精品国产综合久久香蕉麻豆| 亚洲欧美一区二区视频| 国内精品伊人久久久久av影院 | 国产亚洲精品超碰| 婷婷开心激情综合| 一本一道久久a久久精品综合蜜臀| 日韩一级片网址| 午夜在线成人av| 91亚洲永久精品| 国产人久久人人人人爽| 另类小说视频一区二区| 欧美日韩一卡二卡三卡| 亚洲手机成人高清视频| 成人午夜在线视频| 久久久国际精品| 九九久久精品视频| xnxx国产精品| 美日韩一区二区| 欧美一级片免费看| 午夜成人免费视频| 欧美日韩五月天| 亚洲影院免费观看| 欧美最新大片在线看| 一级中文字幕一区二区| 91麻豆产精品久久久久久| 国产精品成人一区二区艾草 | 成人免费精品视频| 国产精品久久久久婷婷二区次| 精品一区二区三区久久| 日韩午夜在线观看视频| 青草av.久久免费一区| 欧美日韩亚洲综合在线| 一区二区国产盗摄色噜噜| 在线观看免费一区| 性久久久久久久久久久久| 欧美精品乱码久久久久久按摩 | 国产女人水真多18毛片18精品视频| 蜜桃精品视频在线| 2020国产精品| 成人app软件下载大全免费| 国产精品视频麻豆| 色综合av在线| 精品在线播放午夜| 国产日韩精品一区二区浪潮av| 国产成a人亚洲| 亚洲天堂福利av| 欧美日韩视频专区在线播放| 美女高潮久久久| 国产精品久久久久久久久动漫| 色综合久久久久综合| 视频一区欧美精品| 精品日韩一区二区三区| 成人黄色av网站在线| 免费看黄色91| **欧美大码日韩| 欧美一区二区高清| 成人做爰69片免费看网站| 亚洲卡通动漫在线| 精品国产区一区| 91视视频在线观看入口直接观看www | 日本大胆欧美人术艺术动态| 久久综合久久鬼色中文字| 99久久久精品| 蜜臀av亚洲一区中文字幕| 久久久久久久综合色一本| 色婷婷av一区二区三区gif| 麻豆高清免费国产一区| 亚洲欧美日韩国产综合在线| 欧美一区二区三区播放老司机| 成人av电影在线观看| 美女视频黄免费的久久 | 欧美日韩一区精品| 国产91精品在线观看| 青草av.久久免费一区| 亚洲免费伊人电影| 国产欧美一区二区在线| 欧美一区二区三区四区高清| 一本色道亚洲精品aⅴ| 国产美女精品一区二区三区| 天堂午夜影视日韩欧美一区二区| 国产精品电影院| 久久久久久久久伊人| 91精品国产综合久久久蜜臀图片| 91在线观看美女| 国产精品 日产精品 欧美精品| 亚洲在线视频网站| 亚洲精品ww久久久久久p站| 久久久蜜桃精品| 欧美精品一区二区三区在线播放| 欧美日韩aaaaa| 欧美在线看片a免费观看| av一区二区久久| 成人激情开心网| 成人小视频免费观看| 国产成人av影院| 国产91在线观看| 成人综合在线观看| 国产久卡久卡久卡久卡视频精品| 美女视频黄 久久| 免费成人在线观看视频| 日韩高清一级片| 日日夜夜精品免费视频| 日韩和欧美一区二区三区| 亚洲国产另类av| 香蕉久久夜色精品国产使用方法| 亚洲gay无套男同| 日本在线播放一区二区三区| 偷拍与自拍一区| 日本怡春院一区二区| 美国三级日本三级久久99| 久久精品国产99| 激情综合亚洲精品| 岛国精品在线观看| 91在线视频免费观看| 色综合天天性综合| 欧美日韩国产精品自在自线| 欧美日韩二区三区| 日韩免费高清av| 国产亚洲1区2区3区| 国产精品久久久久久久久免费桃花| 中文字幕制服丝袜成人av| 亚洲欧美激情小说另类| 亚洲第一久久影院| 久久国产乱子精品免费女| 国产a精品视频| 色婷婷av一区二区三区之一色屋| 欧美日韩国产首页在线观看| 日韩一级免费一区| 国产精品久久久久久户外露出| 亚洲精品国产视频| 久久不见久久见免费视频1| 国产一本一道久久香蕉| 日韩午夜激情av| 国产欧美一区二区精品性色超碰| 国产精品蜜臀在线观看| 一区二区三区91| 国产一区二区三区日韩| 色婷婷激情久久| 日韩一级完整毛片| 亚洲免费观看高清完整版在线观看 | 欧美a级一区二区| 成人免费毛片aaaaa**| 欧美日韩国产美| 欧美国产欧美亚州国产日韩mv天天看完整| 国产人成一区二区三区影院| 亚洲午夜私人影院| 成人一道本在线| 日韩三级中文字幕| 亚洲私人黄色宅男| 国产精品一区二区在线观看网站| 在线观看日韩av先锋影音电影院|