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

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

?? nandsparescheme.c

?? IAR5.2下 AT91SAM9260 ARM 對 MCP2515 控制源化碼
?? C
字號:
/* ----------------------------------------------------------------------------
 *         ATMEL Microcontroller Software Support 
 * ----------------------------------------------------------------------------
 * Copyright (c) 2008, Atmel Corporation
 *
 * All rights reserved.
 *
 * Redistribution and use in source and binary forms, with or without
 * modification, are permitted provided that the following conditions are met:
 *
 * - Redistributions of source code must retain the above copyright notice,
 * this list of conditions and the disclaimer below.
 *
 * Atmel's name may not be used to endorse or promote products derived from
 * this software without specific prior written permission.
 *
 * DISCLAIMER: THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR
 * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
 * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE
 * DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR ANY DIRECT, INDIRECT,
 * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
 * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA,
 * OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
 * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
 * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
 * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 * ----------------------------------------------------------------------------
 */

//------------------------------------------------------------------------------
//         Headers
//------------------------------------------------------------------------------

#include "NandSpareScheme.h"
#include <utility/assert.h>

//------------------------------------------------------------------------------
//         Exported variables
//------------------------------------------------------------------------------

/// Spare area placement scheme for 256 byte pages.
const struct NandSpareScheme nandSpareScheme256 = {

    // Bad block marker is at position #5
    5,
    // 3 ecc bytes
    3,
    // Ecc bytes positions
    {0, 1, 2},
    // 4 extra bytes
    4,
    // Extra bytes positions
    {3, 4, 6, 7}
};

/// Spare area placement scheme for 512 byte pages.
const struct NandSpareScheme nandSpareScheme512 = {

    // Bad block marker is at position #5
    5,
    // 6 ecc bytes
    6,
    // Ecc bytes positions
    {0, 1, 2, 3, 6, 7},
    // 8 extra bytes
    8,
    // Extra bytes positions
    {8, 9, 10, 11, 12, 13, 14, 15}
};

/// Spare area placement scheme for 2048 byte pages.
const struct NandSpareScheme nandSpareScheme2048 = {

    // Bad block marker is at position #0
    0,
    // 24 ecc bytes
    24, 
    // Ecc bytes positions
    {40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58,
     59, 60, 61, 62, 63},
    // 38 extra bytes
    38,
    // Extra bytes positions
    {2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21,
     22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39}
};

//------------------------------------------------------------------------------
//         Exported functions
//------------------------------------------------------------------------------

//------------------------------------------------------------------------------
/// Reads the bad block marker inside a spare area buffer using the provided
/// scheme.
/// \param scheme  Pointer to a NandSpareScheme instance.
/// \param spare  Spare area buffer.
/// \param marker  Pointer to the variable to store the bad block marker.
//------------------------------------------------------------------------------
void NandSpareScheme_ReadBadBlockMarker(
    const struct NandSpareScheme *scheme,
    const unsigned char *spare,
    unsigned char *marker)
{
    *marker = spare[scheme->badBlockMarkerPosition];
}

//------------------------------------------------------------------------------
/// Modifies the bad block marker inside a spare area, using the given scheme.
/// \param scheme  Pointer to a NandSpareScheme instance.
/// \param spare  Spare area buffer.
/// \param marker  Bad block marker to write.
//------------------------------------------------------------------------------
void NandSpareScheme_WriteBadBlockMarker(
    const struct NandSpareScheme *scheme,
    unsigned char *spare,
    unsigned char marker)
{
    spare[scheme->badBlockMarkerPosition] = marker;
}

//------------------------------------------------------------------------------
/// Reads ECC information from a spare area using the provided scheme.
/// \param scheme  Pointer to a NandSpareScheme instance.
/// \param spare  Spare area buffer.
/// \param ecc  ECC buffer.
//------------------------------------------------------------------------------
void NandSpareScheme_ReadEcc(
    const struct NandSpareScheme *scheme,
    const unsigned char *spare,
    unsigned char *ecc)
{
    unsigned int i;
    for (i=0; i < scheme->numEccBytes; i++) {

        ecc[i] = spare[scheme->eccBytesPositions[i]];
    }
}

//------------------------------------------------------------------------------
/// Writes ECC information in a spare area, using a particular scheme.
/// \param scheme  Pointer to a NandSpareScheme instance.
/// \param spare  Spare area buffer.
/// \param ecc  ECC buffer.
//------------------------------------------------------------------------------
void NandSpareScheme_WriteEcc(
    const struct NandSpareScheme *scheme,
    unsigned char *spare,
    const unsigned char *ecc)
{
    unsigned int i;
    for (i=0; i < scheme->numEccBytes; i++) {

        spare[scheme->eccBytesPositions[i]] = ecc[i];
    } 
}

//------------------------------------------------------------------------------
/// Reads extra bytes of information from a spare area, using the provided
/// scheme.
/// \param scheme  Pointer to a NandSpareScheme instance.
/// \param spare  Spare area buffer.
/// \param extra  Extra bytes buffer.
/// \param size  Number of extra bytes to read.
/// \param offset  Index where to read the first extra byte.
//------------------------------------------------------------------------------
void NandSpareScheme_ReadExtra(
    const struct NandSpareScheme *scheme,
    const unsigned char *spare,
    void *extra,
    unsigned char size,
    unsigned char offset)
{
    ASSERT((size + offset) < scheme->numExtraBytes,
           "NandSpareScheme_ReadExtra: Too many bytes\n\r");

    unsigned int i;
    for (i=0; i < size; i++) {

        ((unsigned char *) extra)[i] = spare[scheme->extraBytesPositions[i+offset]];
    }
}

//------------------------------------------------------------------------------
/// Write extra bytes of information inside a spare area, using the provided
/// scheme.
/// \param scheme  Pointer to a NandSpareScheme instance.
/// \param spare  Spare area buffer.
/// \param extra  Extra bytes to write.
/// \param size  Number of extra bytes to write.
/// \param offset  Index where to write the first extra byte.
//------------------------------------------------------------------------------
void NandSpareScheme_WriteExtra(
    const struct NandSpareScheme *scheme,
    unsigned char *spare,
    const void *extra,
    unsigned char size,
    unsigned char offset)
{
    ASSERT((size + offset) < scheme->numExtraBytes,
           "NandSpareScheme_WriteExtra: Too many bytes\n\r");

    unsigned int i;
    for (i=0; i < size; i++) {

        spare[scheme->extraBytesPositions[i+offset]] = ((unsigned char *) extra)[i];
    }
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美日韩一本到| 久久人人爽人人爽| 精品国产一区二区三区久久影院| 欧美电视剧在线观看完整版| 亚洲欧美日韩在线播放| 国产精选一区二区三区| 色国产精品一区在线观看| 精品乱人伦小说| 亚洲成av人影院在线观看网| av中文字幕一区| 久久综合资源网| 日韩精品每日更新| 91视频一区二区| 国产精品免费看片| 国模少妇一区二区三区| 91精品国产一区二区三区蜜臀| 国产亚洲一本大道中文在线| 精品午夜久久福利影院| 日韩一级精品视频在线观看| 亚洲图片欧美色图| 91福利视频在线| 亚洲欧美区自拍先锋| 丁香网亚洲国际| 国产精品丝袜一区| 国产jizzjizz一区二区| 国产三级欧美三级| 国产资源精品在线观看| 日韩精品一区二区三区在线观看| 日韩精品福利网| 欧美久久一二三四区| 亚洲国产精品久久人人爱| 欧美天堂一区二区三区| 亚洲成人第一页| 欧美电影在线免费观看| 天天影视网天天综合色在线播放| 欧美日韩在线不卡| 三级久久三级久久| 欧美一个色资源| 国产真实乱子伦精品视频| 久久久久国产精品人| 国产不卡在线视频| 亚洲少妇30p| 在线观看视频一区二区| 午夜精品福利一区二区三区蜜桃| 欧美日韩国产片| 琪琪久久久久日韩精品| 久久亚洲一级片| 国产成人在线影院| 亚洲乱码一区二区三区在线观看| 在线中文字幕一区| 日本成人中文字幕| 国产欧美一区二区精品久导航 | jlzzjlzz欧美大全| 国产精品久久久久久久久免费相片| 不卡的av在线播放| 亚洲精品日韩专区silk| 在线电影院国产精品| 精品一区二区三区在线观看| 国产精品免费视频一区| 欧美日韩高清一区| 国产在线播放一区三区四| 国产精品无码永久免费888| 日本丶国产丶欧美色综合| 蜜臀av国产精品久久久久| 亚洲国产精品黑人久久久| 97精品视频在线观看自产线路二| 肉丝袜脚交视频一区二区| 2019国产精品| 欧美午夜精品久久久久久孕妇| 久久99精品久久只有精品| 亚洲天堂中文字幕| 欧美一级黄色大片| 91丝袜国产在线播放| 美女视频黄 久久| 国产精品久久久久久久久免费相片 | 亚洲精品网站在线观看| 欧美日韩免费在线视频| 丰满白嫩尤物一区二区| 亚洲午夜激情网站| 中文字幕不卡一区| 日韩欧美电影一区| 91国产免费看| 国产成人精品1024| 性做久久久久久| 亚洲三级在线观看| 久久精品亚洲国产奇米99| 欧美福利一区二区| 一本大道久久a久久精品综合| 久久国内精品自在自线400部| 一级中文字幕一区二区| 久久久久成人黄色影片| 日韩一级大片在线| 欧美日韩中文国产| 成人精品免费视频| 韩国理伦片一区二区三区在线播放 | 一区二区三区四区中文字幕| 久久综合一区二区| 欧美一区二区三区人| 色综合久久久久久久| 高清beeg欧美| 国产原创一区二区| 蜜臀久久99精品久久久久久9| 亚洲成av人片观看| 亚洲国产另类av| 亚洲精品视频在线观看网站| 国产精品国产三级国产普通话三级| 久久亚洲综合av| 精品国产乱码久久久久久闺蜜| 欧美日本一道本在线视频| 色爱区综合激月婷婷| 色综合久久久久久久| 91老师片黄在线观看| caoporen国产精品视频| 成人精品国产一区二区4080| 国产成人在线免费观看| 国产精品一二三区在线| 成人免费毛片片v| 成人高清视频在线观看| 不卡av免费在线观看| 91玉足脚交白嫩脚丫在线播放| 99久久婷婷国产综合精品电影| 成人禁用看黄a在线| av一本久道久久综合久久鬼色| 99久久久国产精品免费蜜臀| 91日韩在线专区| 欧美色成人综合| 777亚洲妇女| 精品欧美一区二区在线观看| 久久综合999| 国产精品福利影院| 夜夜爽夜夜爽精品视频| 午夜激情久久久| 国产自产高清不卡| 99久久精品费精品国产一区二区| 91免费看视频| 欧美日本在线播放| 久久综合色播五月| 国产欧美精品一区二区色综合朱莉 | 麻豆精品一区二区三区| 狠狠色综合色综合网络| 国产精品一区在线观看你懂的| jizzjizzjizz欧美| 欧美视频一区二区三区四区| 91精品啪在线观看国产60岁| 久久久亚洲精品石原莉奈| 国产精品福利在线播放| 欧美aaaaaa午夜精品| 精品亚洲porn| 97精品超碰一区二区三区| 91精品国产欧美日韩| 久久久99久久| 亚洲h在线观看| 国产69精品久久久久777| 在线观看欧美精品| 欧美精品一区视频| 亚洲一区二区在线播放相泽| 国产一区二区三区四| 欧美最新大片在线看| 久久久久久久电影| 亚洲二区视频在线| 国产成人精品在线看| 欧美日韩国产中文| 国产精品乱码一区二区三区软件| 五月激情丁香一区二区三区| 国产a视频精品免费观看| 欧美精品高清视频| 国产精品美女www爽爽爽| 久久狠狠亚洲综合| 欧美色大人视频| 综合电影一区二区三区 | 成人一级黄色片| 91精品国产麻豆国产自产在线 | 久久久久国产精品人| 亚洲成人av一区| 色综合久久久久网| 国产欧美日本一区二区三区| 免费在线观看一区二区三区| 日本乱码高清不卡字幕| 国产欧美一区二区在线| 老司机精品视频一区二区三区| 91捆绑美女网站| 日本一区二区三区在线不卡| 免费观看在线综合| 欧美日韩精品欧美日韩精品| 国产精品久久国产精麻豆99网站| 久久精品国产一区二区| 欧美日韩一本到| 亚洲一区精品在线| 99久久精品一区| 国产精品进线69影院| 精品一区精品二区高清| 日韩欧美美女一区二区三区| 午夜欧美大尺度福利影院在线看 | 日韩精品专区在线影院重磅| 午夜电影一区二区| 欧美日韩激情一区二区| 亚洲综合在线电影| 色综合一个色综合亚洲| 亚洲欧美影音先锋| 91丨九色丨国产丨porny|