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

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

?? flash.c

?? flash文件系統實現
?? C
?? 第 1 頁 / 共 2 頁
字號:
sectortoaddr(int sector,int *size,uchar **base){    struct flashinfo *fbnk;    struct  sectorinfo *sinfo;    int     dev, sec, i;    sec = 0;    for(dev=0;dev<FLASHBANKS;dev++) {        fbnk = &FlashBank[dev];        for(i=0;i<fbnk->sectorcnt;i++,sec++) {            if (sec == sector) {                sinfo = &fbnk->sectors[i];                if (base) *base = sinfo->begin;                if (size) *size = sinfo->size;                return(0);            }        }    }    printf("sectortoaddr(%d) failed\n",sector);    return(-1);}/* flashbankinfo(): *  Based on the incoming bank number, return the beginning, end and *  number of sectors within that bank. */intflashbankinfo(int bank,uchar **begin,uchar **end,int *sectorcnt){    struct flashinfo *fbnk;    if (bank >= FLASHBANKS)        return(-1);    fbnk = &FlashBank[bank];    if (begin)        *begin = fbnk->base;    if (end)        *end = fbnk->end;    if (sectorcnt)        *sectorcnt = fbnk->sectorcnt;    return(0);}/* lastlargesector(): *  Incoming bank number is used to populate the sector information *  (sector number, sector size and address) of the last large sector *  in the specified bank. *  Return 0 if successful; else -1. */intlastlargesector(int bank,int *sector,int *size,uchar **base){    struct flashinfo    *fbnk;    struct sectorinfo   *sinfo;    uchar               *largest_sbase;    int                 i, largest_ssize, largest_snum;    if (bank >= FLASHBANKS) {        printf("lastlargesector(%d) failed\n",bank);        return(-1);    }    fbnk = &FlashBank[bank];    sinfo = fbnk->sectors;    largest_ssize = 0;    largest_snum = 0;    largest_sbase = (uchar *)0;    for(i=0;i<fbnk->sectorcnt;i++,sinfo++) {        if (sinfo->size >= largest_ssize) {            largest_ssize = sinfo->size;            largest_snum = sinfo->snum;            largest_sbase = sinfo->begin;        }    }    if (sector)        *sector = largest_snum;    if (size)        *size = largest_ssize;    if (base)        *base = largest_sbase;    return(0);}voidLowerFlashProtectWindow(){    if (FlashProtectWindow)        FlashProtectWindow--;}/* AppFlashWrite(): *  Takes in a source, destination and byte count and converts that to *  the appropriate flashwrite() call.  This function supports the possibility *  of having one write request span across multiple devices in contiguous *  memory space. */intAppFlashWrite(dest,src,bytecnt)ulong   *src, *dest;long bytecnt;{    struct flashinfo *fbnk;    ulong   oints;    int     ret, tmpint;    long    tmpcnt;    ret = 0;    while(bytecnt > 0) {        fbnk = addrtobank((uchar *)dest);        if (!fbnk)            return(-1);            if (((int)dest + bytecnt) <= (int)(fbnk->end))            tmpcnt = bytecnt;        else            tmpcnt = ((int)(fbnk->end) - (int)dest) + 1;            oints = FLASH_INTSOFF();        ret = flashwrite(fbnk,(uchar *)dest,(uchar *)src,tmpcnt);        FLASH_INTSRESTORE(oints);        if (ret < 0) {            printf("AppFlashWrite(0x%lx,0x%lx,%ld) failed\n",                (ulong)dest,(ulong)src,bytecnt);            break;        }        tmpint = (int)dest;        tmpint += tmpcnt;        dest = (ulong *)tmpint;        tmpint = (int)src;        tmpint += tmpcnt;        src = (ulong *)tmpint;        bytecnt -= tmpcnt;    }    return(ret);}intAppFlashEraseAll(){    int     ret, i;    ulong   oints;    struct  flashinfo *fbnk;    ret = 0;    oints = FLASH_INTSOFF();    fbnk = FlashBank;    for(i=0;i<FLASHBANKS;i++,fbnk++) {        ret = flasherase(fbnk,ALL_SECTORS);        if (ret == -1)            break;    }    FLASH_INTSRESTORE(oints);    return(ret);}/* Erase the flash sector specified. */intAppFlashErase(snum) /* erase specified sector */int snum;{    ulong   oints;    uchar   *base;    int     ret, size;    struct  flashinfo *fbnk;    sectortoaddr(snum,&size,&base);    fbnk = addrtobank(base);    if (!fbnk)        return(-1);    oints = FLASH_INTSOFF();    ret = flasherase(fbnk,snum);    FLASH_INTSRESTORE(oints);    return(ret);}/* sectorProtect(): *  Set or clear (based on value of protect) the protected flag for the *  specified range of sectors... *  This supports incoming ranges that can be dash and/or comma delimited. *  For example a range can be "0", "0-3", or "0,2-4", etc... */intsectorProtect(char *range, int protect){    struct  flashinfo *fbnk;    int i, dev, snum;    snum = 0;    for(dev = 0;dev < FLASHBANKS;dev++) {        fbnk = &FlashBank[dev];        for(i = 0;i < fbnk->sectorcnt;i++,snum++) {            if (inRange(range,snum))                fbnk->sectors[i].protected = protect;        }    }    return(0);}#ifdef FLASHRAM_BASE/* FlashRamInit(): * This monitor supports TFS space allocated across multiple flash devices * that may not be in contiguous memory space.  To allow BBRAM to be seen * as a "flash-like" device to TFS, we set it up in sectors similar to * those in a real flash device. * Input... *  snum:   All the "flash" space is broken up into individual sectors. *          This is the starting sector number that is to be used for *          the block of sectors within this BBRAM space. *  fbnk:   Pointer to the structure that must be populated with the *          flash bank information.  Usually this contains pointers to the *          functions that operate on the flash; but for RAM they aren't *          necessary. *  sinfo:  Table populated with the characteristics (size, start, etc...) *          of each sector. *  ssizes: A table containing the size of each of the sectors.  This is *          copied to the sinfo space. */intFlashRamInit(int snum, int scnt, struct flashinfo *fbnk,            struct sectorinfo *sinfo, int *ssizes){    int i;    uchar   *begin;    /* FLASHRAM_SECTORCOUNT (in config.h) must match the number of sectors     * allocated to the flash ram device in flashdev.c...     */    if (scnt != FLASHRAM_SECTORCOUNT)        printf("Warning: flashram sector count inconsistency\n");    fbnk->id = FLASHRAM;                        /* Device id. */    fbnk->base = (uchar *)FLASHRAM_BASE;        /* Base address of bank. */    fbnk->end = (uchar *)FLASHRAM_END;          /* End address of bank. */    fbnk->sectorcnt = scnt;                     /* Number of sectors. */    fbnk->width = 1;                            /* Width (in bytes). */    fbnk->fltype = NotUsed;                     /* Flashtype() function. */    fbnk->flerase = NotUsed;                    /* Flasherase() function. */    fbnk->flwrite = NotUsed;                    /* Flashwrite() function. */    fbnk->flewrite = NotUsed;                   /* Flashewrite() function. */    fbnk->sectors = sinfo;                  /* Ptr to sector size table. */    begin = fbnk->base;    for(i=0;i<fbnk->sectorcnt;i++,snum++) {        sinfo[i].snum = snum;        sinfo[i].size = ssizes[i];        sinfo[i].begin = begin;        sinfo[i].end = sinfo[i].begin + sinfo[i].size - 1;        sinfo[i].protected = 0;        begin += sinfo[i].size;    }    return(snum);}#endifchar *FlashHelp[] = {    "Flash memory operations",    "{op} [args]",    "Ops...",    "  opw",    "  info [rnge]",    "  init",    "  bank [#]",    "  prot {rnge}",    "  unprot {rnge}",#if FLASH_LOCK_SUPPORTED    "  lock {rnge}",    "  unlock {rnge}",    "  lockdwn {rnge}",#endif    "  erase {rnge}",    "  write {dest} {src} {byte_cnt}",    "  ewrite {dest} {src} {byte_cnt}",    "",    "  rnge = range of affected sectors",    0,};/* FlashCmd(): *  Code that handles the user interface.  See FlashHelp[] below for usage. */intFlashCmd(int argc,char *argv[]){    int     snum, ret;    ulong   dest, src, oints;    long    bytecnt, rslt;    struct  flashinfo *fbnk;    oints = FLASH_INTSOFF();    fbnk = &FlashBank[FlashCurrentBank];    ret = CMD_SUCCESS;    if (strcmp(argv[1],"init") == 0)        FlashInit();    else if (strcmp(argv[1],"info") == 0) {        showflashinfo(fbnk,argv[2]);    }    else if (strcmp(argv[1],"bank") == 0)  {        int tmpbank;        if (argc == 3) {            tmpbank = atoi(argv[2]);            if (tmpbank < FLASHBANKS)                FlashCurrentBank = tmpbank;            printf("Subsequent flash ops apply to bank %d\n",FlashCurrentBank);        }        else             printf("Current flash bank: %d\n",FlashCurrentBank);    }    else if (strcmp(argv[1],"ewrite") == 0) {        if (argc == 5) {            dest = strtoul(argv[2],(char **)0,0);            src = strtoul(argv[3],(char **)0,0);            bytecnt = (long)strtoul(argv[4],(char **)0,0);            if (flashewrite(fbnk,(uchar *)dest,(uchar *)src,bytecnt) == -1) {                printf("ewrite failed\n");                ret = CMD_FAILURE;            }        }        else            ret = CMD_PARAM_ERROR;    }    else if (!strcmp(argv[1],"write")) {        if (argc == 5) {            dest = strtoul(argv[2],(char **)0,0);            src = strtoul(argv[3],(char **)0,0);            bytecnt = (long)strtoul(argv[4],(char **)0,0);#if 0            rslt = flashwrite(fbnk,(uchar *)dest,(uchar *)src,bytecnt);#else            rslt = AppFlashWrite((ulong *)dest,(ulong *)src,bytecnt);#endif            if (rslt == -1) {                printf("Write failed\n");                ret = CMD_FAILURE;            }        }        else            ret = CMD_PARAM_ERROR;    }    else if (!strcmp(argv[1],"opw")) {        if (getUsrLvl() != MAXUSRLEVEL)            printf("Must be user level %d\n",MAXUSRLEVEL);        else                FlashProtectWindow = 2;    }    else if (!strcmp(argv[1],"unprot")) {        if (argc != 3)            ret = CMD_PARAM_ERROR;        else            sectorProtect(argv[2],0);    }    else if (!strcmp(argv[1],"prot")) {        if (argc != 3)             ret = CMD_PARAM_ERROR;        else            sectorProtect(argv[2],1);    }    else if (!strcmp(argv[1],"erase")) {        if (argc != 3) {            ret = CMD_PARAM_ERROR;        }        else {            for(snum=fbnk->sectors[0].snum;snum<fbnk->sectorcnt;snum++) {                if (inRange(argv[2],snum)) {                    if (flasherase(fbnk,snum) == -1) {                        printf("Erase failed\n");                        ret = CMD_FAILURE;                        break;                    }                }            }        }    }#if FLASH_LOCK_SUPPORTED    else if ((!strcmp(argv[1],"lock")) || (!strcmp(argv[1],"unlock")) ||        (!strcmp(argv[1],"lockdwn"))) {        extern int flashlock(struct flashinfo *fbnk,int snum,int operation);        int operation, snum;        if (!strcmp(argv[1],"lock"))             operation = FLASH_LOCK;        else if (!strcmp(argv[1],"unlock"))             operation = FLASH_UNLOCK;        else            operation = FLASH_LOCKDWN;        if (argc != 3)            ret = CMD_PARAM_ERROR;        else {            for(snum=fbnk->sectors[0].snum;snum<fbnk->sectorcnt;snum++) {                if (inRange(argv[2],snum)) {                    if (flashlock(fbnk,snum,operation) == -1) {                        printf("Erase failed\n");                        ret = CMD_FAILURE;                        break;                    }                }            }        }    }#endif    else {        ret = CMD_PARAM_ERROR;    }    FLASH_INTSRESTORE(oints);    return(ret);}intNotUsed(){    printf("ERROR: flash operation not supported\n");    return(0);}#endif

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
久久久99精品久久| 亚洲精品国产精华液| 日韩美女精品在线| 日韩国产欧美在线播放| 国产成人在线影院| 欧美日韩一级大片网址| 日本一区免费视频| 亚洲大型综合色站| 波多野洁衣一区| 精品对白一区国产伦| 亚洲国产wwwccc36天堂| 不卡在线观看av| 精品国产99国产精品| 午夜精彩视频在线观看不卡| 99视频国产精品| 久久精品男人的天堂| 日韩av中文字幕一区二区| 色综合天天狠狠| 国产精品久久久久久一区二区三区 | 777色狠狠一区二区三区| 国产精品婷婷午夜在线观看| 久草精品在线观看| 日韩欧美综合一区| 日韩电影在线观看一区| 欧美日精品一区视频| 日韩一区中文字幕| av网站免费线看精品| 日本一二三四高清不卡| 国产乱一区二区| 久久久亚洲高清| 国产美女在线观看一区| 26uuu精品一区二区| 激情综合色综合久久综合| 欧美一级久久久久久久大片| 麻豆精品在线播放| 日韩你懂的在线播放| 久久综合综合久久综合| 91精品欧美久久久久久动漫| 日本欧美加勒比视频| 欧美一三区三区四区免费在线看| 日韩电影在线观看电影| 日韩一区二区三区在线观看| 蜜桃精品视频在线| 精品国精品自拍自在线| 国产乱人伦偷精品视频免下载| 国产午夜亚洲精品羞羞网站| 成人的网站免费观看| 综合在线观看色| 欧美日韩三级一区| 日产精品久久久久久久性色| 精品999久久久| 成人国产精品视频| 亚洲综合另类小说| 日韩一本二本av| 国产成人精品www牛牛影视| 亚洲欧美综合另类在线卡通| 欧美性生交片4| 久久av中文字幕片| 国产精品久久夜| 欧美另类一区二区三区| 精品亚洲欧美一区| 国产精品美女久久久久久久| 91久久一区二区| 久久国产生活片100| 中文字幕成人在线观看| 在线观看av不卡| 九一久久久久久| 亚洲三级理论片| 日韩一区二区三区电影在线观看 | 亚洲成a人在线观看| 日韩精品一区二区在线| jizzjizzjizz欧美| 日本系列欧美系列| 国产精品久久99| 91精品国产麻豆国产自产在线| 国产xxx精品视频大全| 亚洲午夜在线视频| 国产三级欧美三级日产三级99| 欧美色网一区二区| 国产高清精品网站| 三级在线观看一区二区| 国产精品午夜春色av| 91麻豆精品久久久久蜜臀| 99国产精品久| 精品一区二区国语对白| 亚洲国产综合91精品麻豆| 久久精品免视看| 日韩久久免费av| 欧美久久久一区| 色噜噜狠狠色综合欧洲selulu| 国产一区二区0| 日产国产欧美视频一区精品| 亚洲男人的天堂网| 国产欧美日韩激情| 日韩午夜三级在线| 欧美最猛性xxxxx直播| 夫妻av一区二区| 激情伊人五月天久久综合| 亚洲妇熟xx妇色黄| 亚洲另类中文字| 国产精品久久久久久一区二区三区| 日韩精品综合一本久道在线视频| 欧美日韩精品专区| 欧美在线999| 色88888久久久久久影院按摩| 成人av资源下载| 成人av电影在线网| 国产成人亚洲综合色影视| 激情综合色综合久久综合| 蜜臀av一区二区在线免费观看| 日韩精品三区四区| 日韩在线a电影| 日日夜夜免费精品| 午夜精品久久久久影视| 一区二区三区日本| 亚洲制服丝袜在线| 亚洲国产成人av网| 午夜精品一区二区三区三上悠亚 | 国产精品久线观看视频| 久久天堂av综合合色蜜桃网| 久久综合精品国产一区二区三区| 精品国产电影一区二区| 久久精品亚洲精品国产欧美kt∨| 精品福利视频一区二区三区| 久久精品视频网| 久久九九久精品国产免费直播| 久久久久久**毛片大全| 久久久不卡影院| 亚洲国产高清aⅴ视频| 中文字幕一区二区三中文字幕| 国产精品传媒视频| 亚洲精品一二三区| 亚洲丶国产丶欧美一区二区三区| 五月婷婷色综合| 美国欧美日韩国产在线播放| 国产一区在线看| 不卡的电视剧免费网站有什么| 色综合色综合色综合色综合色综合| 色琪琪一区二区三区亚洲区| 欧美美女激情18p| 精品少妇一区二区| 欧美国产综合一区二区| 亚洲色图色小说| 丝袜脚交一区二区| 国产在线播放一区二区三区| jlzzjlzz亚洲日本少妇| 在线精品观看国产| 日韩一级高清毛片| 国产精品嫩草影院av蜜臀| 亚洲欧美一区二区不卡| 日韩国产在线观看一区| 丁香啪啪综合成人亚洲小说 | 成人在线综合网站| 色欧美乱欧美15图片| 日韩一区二区在线观看| 国产精品麻豆网站| 亚洲mv在线观看| 高清国产一区二区| 欧美日韩午夜精品| 久久久99免费| 午夜精品久久久久久久99樱桃| 国产高清无密码一区二区三区| 欧美日韩视频第一区| 国产网站一区二区| 日韩影视精彩在线| 成人在线视频一区二区| 91麻豆精品久久久久蜜臀| 国产精品激情偷乱一区二区∴| 日本不卡一二三| 91豆麻精品91久久久久久| 久久精品网站免费观看| 一个色综合网站| 成人免费观看视频| 亚洲精品在线观看网站| 一区二区三区波多野结衣在线观看| 国产一区在线看| 日韩网站在线看片你懂的| 一区二区三区在线观看网站| 国产91丝袜在线播放| 欧美一区二区精品在线| 一区二区日韩av| 99国内精品久久| 国产精品美女久久福利网站| 激情综合色综合久久综合| 在线成人午夜影院| 亚洲最新视频在线播放| www.av精品| 国产精品国产自产拍高清av王其| 九九**精品视频免费播放| 欧美日韩国产综合视频在线观看| 亚洲免费观看在线视频| 成人动漫在线一区| 欧美激情一区不卡| 国产成人欧美日韩在线电影| 91精品国产高清一区二区三区| 一区二区三区精密机械公司| 97超碰欧美中文字幕| 国产精品久久久久久久久免费桃花 | 成人在线视频首页| 久久精品男人天堂av|