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

? 歡迎來(lái)到蟲(chóng)蟲(chóng)下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲(chóng)蟲(chóng)下載站

?? stdio.c

?? at91sam9263操作NAND FLASH代碼
?? C
字號(hào):
/* ----------------------------------------------------------------------------
 *         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 <stdio.h>
#include <stdarg.h>

//------------------------------------------------------------------------------
//         Local definitions
//------------------------------------------------------------------------------

/// Maximum string size allowed (in bytes).
#define MAX_STRING_SIZE         100

//------------------------------------------------------------------------------
//         Global variables
//------------------------------------------------------------------------------

/// Required for proper compilation.
struct _reent r = {0, (FILE *) 0, (FILE *) 1, (FILE *) 0};
struct _reent *_impure_ptr = &r;

//------------------------------------------------------------------------------
//         Local functions
//------------------------------------------------------------------------------

//------------------------------------------------------------------------------
/// Writes a character inside the given string. Returns 1.
/// \param pStr  Storage string.
/// \param c  Character to write.
//------------------------------------------------------------------------------
signed int PutChar(char *pStr, char c)
{
    *pStr = c;
    return 1;
}

//------------------------------------------------------------------------------
/// Writes a string inside the given string.
/// Returns the size of the written
/// string.
/// \param pStr  Storage string.
/// \param pSource  Source string.
//------------------------------------------------------------------------------
signed int PutString(char *pStr, const char *pSource)
{
    signed int num = 0;

    while (*pSource != 0) {

        *pStr++ = *pSource++;
        num++;
    }

    return num;
}

//------------------------------------------------------------------------------
/// Writes an unsigned int inside the given string, using the provided fill &
/// width parameters.
/// Returns the size in characters of the written integer.
/// \param pStr  Storage string.
/// \param fill  Fill character.
/// \param width  Minimum integer width.
/// \param value  Integer value.
//------------------------------------------------------------------------------
signed int PutUnsignedInt(
    char *pStr,
    char fill,
    signed int width,
    unsigned int value)
{
    signed int num = 0;

    // Take current digit into account when calculating width
    width--;

    // Recursively write upper digits
    if ((value / 10) > 0) {

        num = PutUnsignedInt(pStr, fill, width, value / 10);
        pStr += num;
    }
    // Write filler characters
    else {

        while (width > 0) {

            PutChar(pStr, fill);
            pStr++;
            num++;
            width--;
        }
    }

    // Write lower digit
    num += PutChar(pStr, (value % 10) + '0');

    return num;
}

////------------------------------------------------------------------------------
/// Writes a signed int inside the given string, using the provided fill & width
/// parameters.
/// Returns the size of the written integer.
/// \param pStr  Storage string.
/// \param fill  Fill character.
/// \param width  Minimum integer width.
/// \param value  Signed integer value.
////------------------------------------------------------------------------------
signed int PutSignedInt(
    char *pStr,
    char fill,
    signed int width,
    signed int value)
{
    signed int num = 0;
    unsigned int absolute;

    // Compute absolute value
    if (value < 0) {

        absolute = -value;
    }
    else {

        absolute = value;
    }

    // Take current digit into account when calculating width
    width--;

    // Recursively write upper digits
    if ((absolute / 10) > 0) {

        if (value < 0) {
        
            num = PutSignedInt(pStr, fill, width, -(absolute / 10));
        }
        else {

            num = PutSignedInt(pStr, fill, width, absolute / 10);
        }
        pStr += num;
    }
    else {

        // Reserve space for sign
        if (value < 0) {

            width--;
        }

        // Write filler characters
        while (width > 0) {

            PutChar(pStr, fill);
            pStr++;
            num++;
            width--;
        }

        // Write sign
        if (value < 0) {

            num += PutChar(pStr, '-');
            pStr++;
        }
    }

    // Write lower digit
    num += PutChar(pStr, (absolute % 10) + '0');

    return num;
}

//------------------------------------------------------------------------------
/// Writes an hexadecimal value into a string, using the given fill, width &
/// capital parameters.
/// Returns the number of char written.
/// \param pStr  Storage string.
/// \param fill  Fill character.
/// \param width  Minimum integer width.
/// \param maj  Indicates if the letters must be printed in lower- or upper-case.
/// \param value  Hexadecimal value.
//------------------------------------------------------------------------------
signed int PutHexa(
    char *pStr,
    char fill,
    signed int width,
    unsigned char maj,
    unsigned int value)
{
    signed int num = 0;

    // Decrement width
    width--;

    // Recursively output upper digits
    if ((value >> 4) > 0) {

        num += PutHexa(pStr, fill, width, maj, value >> 4);
        pStr += num;
    }
    // Write filler chars
    else {

        while (width > 0) {

            PutChar(pStr, fill);
            pStr++;
            num++;
            width--;
        }
    }

    // Write current digit
    if ((value & 0xF) < 10) {

        PutChar(pStr, (value & 0xF) + '0');
    }
    else if (maj) {

        PutChar(pStr, (value & 0xF) - 10 + 'A');
    }
    else {

        PutChar(pStr, (value & 0xF) - 10 + 'a');
    }
    num++;

    return num;
}

//------------------------------------------------------------------------------
//         Global functions
//------------------------------------------------------------------------------

//------------------------------------------------------------------------------
/// Stores the result of a formatted string into another string. Format
/// arguments are given in a va_list instance.
/// Return the number of characters written.
/// \param pStr    Destination string.
/// \param length  Length of Destination string.
/// \param pFormat Format string.
/// \param ap      Argument list.
//------------------------------------------------------------------------------
signed int vsnprintf(char *pStr, size_t length, const char *pFormat, va_list ap)
{
    char          fill;
    unsigned char width;
    signed int    num = 0;
    signed int    size = 0;

    // Clear the string
    if (pStr) {

        *pStr = 0;
    }

    // Phase string
    while (*pFormat != 0 && size < length) {

        // Normal character
        if (*pFormat != '%') {

            *pStr++ = *pFormat++;
            size++;
        }
        // Escaped '%'
        else if (*(pFormat+1) == '%') {

            *pStr++ = '%';
            pFormat += 2;
            size++;
        }
        // Token delimiter
        else {

            fill = ' ';
            width = 0;
            pFormat++;

            // Parse filler
            if (*pFormat == '0') {

                fill = '0';
                pFormat++;
            }

            // Parse width
            while ((*pFormat >= '0') && (*pFormat <= '9')) {
        
                width = (width*10) + *pFormat-'0';
                pFormat++;
            }

            // Check if there is enough space
            if (size + width > length) {

                width = length - size;
            }
        
            // Parse type
            switch (*pFormat) {
            case 'd': 
            case 'i': num = PutSignedInt(pStr, fill, width, va_arg(ap, signed int)); break;
            case 'u': num = PutUnsignedInt(pStr, fill, width, va_arg(ap, unsigned int)); break;
            case 'x': num = PutHexa(pStr, fill, width, 0, va_arg(ap, unsigned int)); break;
            case 'X': num = PutHexa(pStr, fill, width, 1, va_arg(ap, unsigned int)); break;
            case 's': num = PutString(pStr, va_arg(ap, char *)); break;
            case 'c': num = PutChar(pStr, va_arg(ap, unsigned int)); break;
            default:
                return EOF;
            }

            pFormat++;
            pStr += num;
            size += num;
        }
    }

    // NULL-terminated (final \0 is not counted)
    if (size < length) {

        *pStr = 0;
    }
    else {

        *(--pStr) = 0;
        size--;
    }

    return size;
}

//------------------------------------------------------------------------------
/// Stores the result of a formatted string into another string. Format
/// arguments are given in a va_list instance.
/// Return the number of characters written.
/// \param pString Destination string.
/// \param length  Length of Destination string.
/// \param pFormat Format string.
/// \param ...     Other arguments
//------------------------------------------------------------------------------
signed int snprintf(char *pString, size_t length, const char *pFormat, ...)
{
    va_list    ap;
    signed int rc;

    va_start(ap, pFormat);
    rc = vsnprintf(pString, length, pFormat, ap);
    va_end(ap);

    return rc;
}

//------------------------------------------------------------------------------
/// Stores the result of a formatted string into another string. Format
/// arguments are given in a va_list instance.
/// Return the number of characters written.
/// \param pString  Destination string.
/// \param pFormat  Format string.
/// \param ap       Argument list.
//------------------------------------------------------------------------------
signed int vsprintf(char *pString, const char *pFormat, va_list ap)
{
    return vsnprintf(pString, MAX_STRING_SIZE, pFormat, ap);
}

//------------------------------------------------------------------------------
/// Outputs a formatted string on the given stream. Format arguments are given
/// in a va_list instance.
/// \param pStream  Output stream.
/// \param pFormat  Format string
/// \param ap  Argument list.
//------------------------------------------------------------------------------
signed int vfprintf(FILE *pStream, const char *pFormat, va_list ap)
{
    char pStr[MAX_STRING_SIZE];
    char pError[] = "stdio.c: increase MAX_STRING_SIZE\n\r";

    // Write formatted string in buffer
    if (vsprintf(pStr, pFormat, ap) >= MAX_STRING_SIZE) {

        fputs(pError, stderr);
        while (1); // Increase MAX_STRING_SIZE
    }

    // Display string
    return fputs(pStr, pStream);
}

//------------------------------------------------------------------------------
/// Outputs a formatted string on the DBGU stream. Format arguments are given
/// in a va_list instance.
/// \param pFormat  Format string
/// \param ap  Argument list.
//------------------------------------------------------------------------------
signed int vprintf(const char *pFormat, va_list ap)
{
    return vfprintf(stdout, pFormat, ap);
}

//------------------------------------------------------------------------------
/// Outputs a formatted string on the given stream, using a variable number of
/// arguments.
/// \param pStream  Output stream.
/// \param pFormat  Format string.
//------------------------------------------------------------------------------
signed int fprintf(FILE *pStream, const char *pFormat, ...)
{
    va_list ap;
    signed int result;

    // Forward call to vfprintf
    va_start(ap, pFormat);
    result = vfprintf(pStream, pFormat, ap);
    va_end(ap);

    return result;
}

//------------------------------------------------------------------------------
/// Outputs a formatted string on the DBGU stream, using a variable number of
/// arguments.
/// \param pFormat  Format string.
//------------------------------------------------------------------------------
signed int printf(const char *pFormat, ...)
{
    va_list ap;
    signed int result;

    // Forward call to vprintf
    va_start(ap, pFormat);
    result = vprintf(pFormat, ap);
    va_end(ap);

    return result;
}

//------------------------------------------------------------------------------
/// Writes a formatted string inside another string.
/// \param pStr  Storage string.
/// \param pFormat  Format string.
//------------------------------------------------------------------------------
signed int sprintf(char *pStr, const char *pFormat, ...)
{
    va_list ap;
    signed int result;

    // Forward call to vsprintf
    va_start(ap, pFormat);
    result = vsprintf(pStr, pFormat, ap);
    va_end(ap);

    return result;
}

//------------------------------------------------------------------------------
/// Outputs a string on stdout.
/// \param pStr  String to output.
//------------------------------------------------------------------------------
signed int puts(const char *pStr)
{
    return fputs(pStr, stdout);
}

?? 快捷鍵說(shuō)明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲韩国精品一区| 在线观看免费一区| 一本色道久久综合亚洲91| 欧美一区二区二区| 一区二区三区成人| 国产成人啪免费观看软件| 欧美色图激情小说| 亚洲视频在线一区| 国产乱人伦偷精品视频免下载| 欧美综合亚洲图片综合区| 国产欧美一区二区三区在线看蜜臀 | 亚洲一级不卡视频| 粗大黑人巨茎大战欧美成人| 欧美老女人在线| 亚洲精品中文字幕乱码三区| 国产福利一区在线| 精品国产免费久久| 免费在线欧美视频| 欧美群妇大交群中文字幕| 中文字幕亚洲一区二区va在线| 寂寞少妇一区二区三区| 欧美日本一区二区三区| 一区二区日韩电影| 91麻豆国产福利在线观看| 国产三级欧美三级日产三级99 | 亚洲欧美激情插| 不卡大黄网站免费看| 久久久久九九视频| 国内精品久久久久影院一蜜桃| 777欧美精品| 免费在线观看视频一区| 91麻豆精品国产91久久久使用方法| 亚洲欧美另类小说视频| bt7086福利一区国产| 国产精品美女久久久久aⅴ国产馆| 国产一区二区看久久| 久久综合给合久久狠狠狠97色69| 国产在线播放一区二区三区| 精品国产a毛片| 成人免费视频免费观看| 中文字幕亚洲欧美在线不卡| av一区二区三区| 亚洲天堂中文字幕| 欧洲亚洲精品在线| 免费观看成人av| 国产亚洲综合av| thepron国产精品| 一区二区三区不卡在线观看| 欧美日韩国产小视频在线观看| 日韩激情一二三区| 2023国产精品自拍| 成人免费看视频| 亚洲宅男天堂在线观看无病毒| 欧美日韩亚洲国产综合| 蜜臀av一区二区在线观看| 久久老女人爱爱| aaa欧美日韩| 亚洲成av人片一区二区梦乃| 欧美大片免费久久精品三p| 国产精品亚洲第一| 一区二区三区四区中文字幕| 日韩一区二区麻豆国产| 成人免费视频视频在线观看免费| 亚洲国产视频一区二区| 日韩精品一区在线观看| av成人老司机| 久久国产精品99久久人人澡| 国产精品每日更新| 欧美一级爆毛片| 97se亚洲国产综合自在线不卡| 丝袜美腿亚洲综合| 国产精品免费视频网站| 91精品国产色综合久久不卡电影| 国产精品资源在线看| 香蕉久久一区二区不卡无毒影院| 精品日韩欧美在线| 在线视频中文字幕一区二区| 国产精品一区二区果冻传媒| 亚洲一线二线三线视频| 国产精品三级av| 欧美人牲a欧美精品| 99视频在线精品| 国产乱理伦片在线观看夜一区| 亚洲一本大道在线| 国产欧美一区二区三区在线老狼| 欧美精品乱码久久久久久按摩| heyzo一本久久综合| 久久99久久精品| 亚洲成人www| 一区二区三区在线播| 国产精品久久久久久久久动漫| 欧美一区二区网站| 欧洲精品在线观看| 99精品久久久久久| 懂色av一区二区三区蜜臀| 精彩视频一区二区| 久久不见久久见免费视频7| 亚洲福利视频一区二区| 亚洲综合色噜噜狠狠| 亚洲天堂av老司机| 最新热久久免费视频| 中文字幕av免费专区久久| 国产亚洲一区二区三区四区 | 国产成人在线电影| 久久激情综合网| 另类人妖一区二区av| 婷婷开心久久网| 亚洲高清久久久| 午夜在线成人av| 免费人成精品欧美精品| 日韩国产高清在线| 日本怡春院一区二区| 日韩成人午夜精品| 日产精品久久久久久久性色 | 亚洲欧美日韩系列| 日韩一区中文字幕| 国产精品高清亚洲| 亚洲免费观看高清| 一级特黄大欧美久久久| 一区二区三区日韩欧美精品 | 欧美日韩免费电影| 欧美精品在线视频| 欧美一区二区福利在线| 精品欧美久久久| 久久―日本道色综合久久| 精品国产第一区二区三区观看体验| 亚洲精品一区在线观看| 久久久久久一级片| 国产精品久久影院| 一区二区三区中文免费| 日本va欧美va精品发布| 久久精品国产久精国产| 国产精品99精品久久免费| 99视频国产精品| 欧美日韩在线电影| 久久亚区不卡日本| 一区二区中文字幕在线| 亚洲午夜在线视频| 国产一区视频导航| 99久久婷婷国产精品综合| 在线观看av一区| 亚洲精品在线电影| 一区二区三区中文字幕在线观看| 日一区二区三区| 国产精品综合二区| 在线观看日韩一区| 久久网站最新地址| 亚洲精品免费视频| 激情综合五月天| 一本到三区不卡视频| 欧美zozo另类异族| 亚洲精品免费看| 国产麻豆精品一区二区| 在线视频观看一区| 欧美变态凌虐bdsm| 亚洲一卡二卡三卡四卡无卡久久| 国产一区二区按摩在线观看| 色婷婷亚洲精品| 久久精品男人的天堂| 日韩国产在线观看| 99久久久久久| 久久中文字幕电影| 亚洲成人激情社区| 97久久超碰精品国产| 精品国产1区2区3区| 亚洲国产精品尤物yw在线观看| 成人丝袜高跟foot| 日韩欧美中文字幕精品| 亚洲香肠在线观看| 91在线免费视频观看| 久久精品一二三| 日韩**一区毛片| 欧美日韩国产天堂| 亚洲欧美激情插| 国产91丝袜在线播放0| 日韩欧美一区二区视频| 一区二区三区精密机械公司| 国产91精品免费| 精品国产91九色蝌蚪| 久久99在线观看| 欧美一区二区三区公司| 亚洲一区二区三区爽爽爽爽爽| 成人不卡免费av| 国产亚洲精品福利| 国产在线精品视频| 精品精品国产高清一毛片一天堂| 午夜精品久久久久久不卡8050| 91丨九色丨黑人外教| 国产精品天干天干在观线| 国产成人夜色高潮福利影视| 亚洲精品一区二区三区四区高清| 日本女优在线视频一区二区| 欧美日本在线播放| 日本麻豆一区二区三区视频| 欧美一区二区三区视频免费播放| 亚洲成a人v欧美综合天堂下载| 欧美日韩高清一区二区不卡| 亚洲国产美国国产综合一区二区| 欧美视频在线播放| 亚欧色一区w666天堂|