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

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

?? mprintf.c

?? 基于ARM7處理器的中斷與串口在ucos下切換的演示程序
?? C
字號:
/* mprintf.c:
 *  A small, but useful printf.
 *
 *  General notice:
 *  This code is part of a boot-monitor package developed as a generic base
 *  platform for embedded system designs.  As such, it is likely to be
 *  distributed to various projects beyond the control of the original
 *  author.  Please notify the author of any enhancements made or bugs found
 *  so that all may benefit from the changes.  In addition, notification back
 *  to the author will allow the new user to pick up changes that may have
 *  been made by other users after this version of the code was distributed.
 *
 *  Note1: the majority of this code was edited with 4-space tabs.
 *  Note2: as more and more contributions are accepted, the term "author"
 *         is becoming a mis-representation of credit.
 *
 *  Original author:    Ed Sutter
 *  Email:              esutter@lucent.com
 *  Phone:              908-582-2351
 */
#include "Config.h"
#include <stdarg.h>

/* printf.c...
 *  This is my homegrown printf.  It is VERY limited, but useful
 *  for small applications that should avoid wasting memory.
 *  The %s, %c, %d, %x formats are supported to some degree.
 *  I also added %I and %M...
 *  %I assumes that the argument is a long and it converts it to
 *      a string in IP format (a.b.c.d).
 *  %M assumes that the argument is a pointer to an array of 6 bytes
 *      and it converts it to a string in MAC format (x:y:z:a:b:c).
 *
 *  So why don't I use varargs?...
 *  Yep, it sure would look nicer, and would eliminate the clumsy limit
 *  of 12 arguments, but so far I haven't had a problem with any of the
 *  CPUs I've ported to and it eliminates the headache of dealing
 *  with varargs vs stdargs depending on the compiler.
 *  
 */

#define MAXARGS     12
#define HDRSIZE     4
#define PSIZE       600 //128
#define NEGATIVE    1
#define POSITIVE    2
#define SCREENWIDTH 80
#define FRMWRI_BUFSIZE  512
#define NULL_PTR        0
#define Str_Length      FRMWRI_BUFSIZE 

static int ucos_vsprintf(char * str,const char *format,va_list argument);


/* printf():
 *  Yep, it breaks if there are more than PSIZE characters in the string
 *  built by sprintf.
 */
static char pbuf[PSIZE];  
int myprintf( const char* fmt, ... )
{
	va_list arg;
	register int nc;

	va_start(arg, fmt);
	nc = ucos_vsprintf((char *)&pbuf, (const char *) fmt, arg);
	va_end(arg);

	UART0_PutData( pbuf, nc );

	return nc;
}

void
comio(unsigned char output, void *number,char * strbuf)
{
   /* (*((int *) number))++;*/

    if (output == '\n')
       *(strbuf+*((int *)number))=('\r');
    
       *(strbuf+*((int *)number))=output;

	(*((int *)number))++;

    if( (*((int *)number)) == (Str_Length-1))  *((int *)number)-=1;

}

/* -------------------------------------------------------------------------- */
/*                                                                            */
/*                      - _C_formatter -                                      */
/*                                                                            */
/* This routine forms the core and entry of the formatter.  The conversion    */
/* performed conforms rather well to the ANSI specification for "printf".     */
/*                                                                            */
/* -------------------------------------------------------------------------- */

int
_C_formatter(const char *format,
             void        put_one_char(unsigned char, void *,char *),
             void       *secret_pointer,
             va_list     ap,     char * str)
{
    char                format_flag;
    int                 precision;
    int                 length, mask, nr_of_bits, n;
    int                 field_width, nr_of_chars;
    char                flag_char, left_adjust;
    unsigned long       ulong;

#ifdef FLOAT_SUPPORT
    double              fvalue;
#endif

    long                num;
    char               *buf_pointer;
    char               *ptr, *hex;
    char                zeropad;
    char                buf[FRMWRI_BUFSIZE];

    nr_of_chars = 0;
    for (;;)    /* Until full format string read */
    {
        while ((format_flag = *format++) != '%')        /* Until '%' or '\0' */
        {
            if (!format_flag)
			{
                
	            *(str+*((int *)secret_pointer))='\0';
                return (nr_of_chars);
			}
            put_one_char (format_flag, secret_pointer,str);
            nr_of_chars++;
        }   /* while () */

        if (*format == '%')             /* %% prints as % */
        {
            format++;
            put_one_char('%',secret_pointer,str);
            nr_of_chars++;
            continue;
        }   /* if () */

        flag_char = 0;
        left_adjust = 0;
    /*=====================================*/
    /* check for leading -, + or ' 'flags  */
    /*=====================================*/
        for (;;)
        {
            if (*format == '+' || *format == ' ')
                flag_char = *format++;
            else if (*format == '-')
            {
                left_adjust++;
                format++;
            }
            else
                break;
        }   /* for (;;) */

    /*======================================*/
    /* a '0' may follow the flag character  */
    /* this is the requested fill character */
    /*======================================*/
        if (*format == '0')
        {
            zeropad = 1;
            format++;
        }
        else
            zeropad = 0;

    /*===================================*/
    /* Optional field width (may be '*') */
    /*===================================*/
        if (*format == '*')
        {
            field_width = va_arg(ap, int);
            if (field_width < 0)
            {
                field_width = -field_width;
                left_adjust = !left_adjust;
            }   /* if () */
            format++;
        }
        else
        {
            field_width = 0;
            while (*format >= '0' && *format <= '9')
                field_width = field_width * 10 + (*format++ - '0');
        }   /* if () */

    /*=============================*/
    /* Optional precision (or '*') */
    /*=============================*/
        if (*format=='.')
        {
            if (*++format == '*')
            {
                precision = va_arg(ap, int);
                format++;
            }
            else
            {
                precision = 0;
                while (*format >= '0' && *format <= '9')
                    precision = precision * 10 + (*format++ - '0');
            }   /* if () */
        }
        else
            precision = -1;

    /*======================================================*/
    /* At this point, "left_adjust" is nonzero if there was */
    /* a sign, "zeropad" is 1 if there was a leading zero   */
    /* and 0 otherwise, "field_width" and "precision"       */
    /* contain numbers corresponding to the digit strings   */
    /* before and after the decimal point, respectively,    */
    /* and "flag_char" is either 0 (no flag) or contains    */
    /* a plus or space character. If there was no decimal   */
    /* point, "precision" will be -1.                       */
    /*======================================================*/

    /*========================*/
    /* Optional "l" modifier? */
    /*========================*/
        if (*format == 'l')
        {
            length = 1;
            format++;
        }
        else
        if (*format == 'F')
        {
            length = 1;
            format++;
        }
        else
            length = 0;

    /*===================================================*/
    /* At exit from the following switch, we will emit   */
    /* the characters starting at "buf_pointer" and      */
    /* ending at "ptr"-1                                 */
    /*===================================================*/
        switch (format_flag = *format++)
        {
        case 'c':
            buf[0] = va_arg(ap, int);
            ptr = buf_pointer = &buf[0];
            if (buf[0])
                ptr++;
            break;

        case 's':
            if ((buf_pointer = va_arg(ap,char *)) == NULL_PTR)
                buf_pointer = "(null pointer)";
            if (precision < 0)
                precision = 10000;
            for (n=0; *buf_pointer++ && n < precision; n++)
                ;
            ptr = --buf_pointer;
            buf_pointer -= n;
            break;

        case 'o':
        case 'p':
        case 'X':
        case 'x':
            if (format_flag == 'p')
            {
                if (length)
                    ulong = (long)va_arg(ap,char *);
                else
                    ulong = (long)va_arg(ap,char     *);
            }
            else if (length)
                ulong = va_arg(ap,unsigned long);
            else
                ulong = (unsigned)va_arg(ap,int);

            ptr = buf_pointer = &buf[FRMWRI_BUFSIZE - 1];
            hex = "0123456789ABCDEF";
            if (format_flag == 'o')
            {
                mask = 0x7;
                nr_of_bits = 3;
            }
            else
            {
                if (format_flag == 'x')
                    hex = "0123456789abcdef";
                mask = 0xf;
                nr_of_bits = 4;
            }   /* if () */

            do
                *--buf_pointer = *(hex + ((int) ulong & mask));
                while ( ( ulong >>= nr_of_bits ) != 0 );

            if (precision < 0)          /* "precision" takes precedence */
                if (zeropad)
                    precision = field_width;
            while (precision > ptr - buf_pointer)
                *--buf_pointer = '0';
            break;

        case 'd':
        case 'i':
        case 'u':
            if (length)
                num = va_arg(ap,long);
            else
            {
                n = va_arg(ap,int);
                if (format_flag == 'u')
                    num = (unsigned) n;
                else
                    num = (long) n;
            }   /* if () */
            if ( ( n = (format_flag != 'u' && num < 0) ) != 0 )
            {
                flag_char = '-';
                ulong = -num;
            }
            else
            {
                n = flag_char != 0;
                ulong = num;
            }   /* if () */

        /*=======================*/
        /* now convert to digits */
        /*=======================*/
            ptr = buf_pointer = &buf[FRMWRI_BUFSIZE - 1];
            do
                *--buf_pointer = (ulong % 10) + '0';
                while ( (ulong /= 10) != 0 );

            if (precision < 0)        /* "precision" takes precedence */
                if (zeropad)
                    precision = field_width - n;
            while (precision > ptr - buf_pointer)
                *--buf_pointer = '0';
            break;

        case 'f':
            format_flag = 0;
        case 'e':
        case 'E':
#ifdef FLOAT_SUPPORT
            if (precision < 0)
                precision = 6;
            buf_pointer = buf;
            if ((fvalue = va_arg(ap,double)) < 0)
            {
                flag_char = '-';
                fvalue = -fvalue;
            }   /* if () */
            ptr = float_conversion (fvalue, precision, buf, format_flag);
#else
            ptr = buf_pointer = "FLOATS? wrong formatter installed!";
            while (*ptr)
                ptr++;
#endif
            break;

        case '\0':              /* Really bad place to find NUL in */
            format--;

        default:
        /*=======================*/
        /* Undefined conversion! */
        /*=======================*/
            ptr = buf_pointer = "???";
            ptr += 4;
            break;
        }   /* switch () */

    /*===========================================================*/
    /* This part emittes the formatted string to "put_one_char". */
    /*===========================================================*/
        if ((length = ptr - buf_pointer) > field_width)
            n = 0;
        else
            n = field_width - length - (flag_char != 0);

    /*=================================*/
    /* emit any leading pad characters */
    /*=================================*/
        if (!left_adjust)
            while (--n >= 0)
            {
                put_one_char(' ', secret_pointer,str);
                nr_of_chars++;
            }   /* while () */

    /*===============================*/
    /* emit flag characters (if any) */
    /*===============================*/
        if (flag_char)
        {
            put_one_char(flag_char, secret_pointer,str);
            nr_of_chars++;
        }   /* if () */

    /*========================*/
    /* emit the string itself */
    /*========================*/
        while (--length >= 0)
        {
            put_one_char(*buf_pointer++, secret_pointer,str);
            nr_of_chars++;
        }   /* while () */

    /*================================*/
    /* emit trailing space characters */
    /*================================*/
        if (left_adjust)
            while (--n >= 0)
            {
                put_one_char(' ', secret_pointer,str);
                nr_of_chars++;
            }   /* while () */
    }   /* for (;;) */

	*(str+*((int *)secret_pointer))='\0';

}   /* _C_formatter(,,,) */

static int ucos_vsprintf(char * str,const char *format,va_list argument)
{
	int number=0;

	return _C_formatter(format, comio, &number, argument , str);
   
}
/*
int sprintf(char *str, const char *fmt, ...)
{
	va_list arg;
	register int nc;

	va_start(arg, fmt);
	nc = ucos_vsprintf((char *)&str, (const char *) fmt, arg);
	va_end(arg);
	return (nc);
}
*/
char isascii(char c)
{
	//if((0<=c)&&(c<=127))
	if (c<=127)
		return c;
	else 
		return 0;
}


?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲欧美视频在线观看视频| 六月丁香婷婷久久| 高清av一区二区| 精品国产凹凸成av人网站| 天堂av在线一区| 欧美疯狂性受xxxxx喷水图片| 亚洲自拍另类综合| 欧美特级限制片免费在线观看| 一区二区三区毛片| 欧美视频在线一区二区三区| 一区二区三区四区高清精品免费观看| 韩国v欧美v亚洲v日本v| 欧美大胆人体bbbb| 日韩va亚洲va欧美va久久| 欧美精品丝袜中出| 韩日欧美一区二区三区| 亚洲美女淫视频| 日韩欧美中文字幕公布| 波波电影院一区二区三区| 亚洲一区二区三区自拍| 国产欧美日本一区视频| 欧美性色aⅴ视频一区日韩精品| 色综合视频一区二区三区高清| 日韩中文字幕91| 欧美国产97人人爽人人喊| 色综合色综合色综合| 国产精品羞羞答答xxdd| 亚洲国产一区二区三区青草影视| 精品日韩一区二区| 欧美人狂配大交3d怪物一区| 国产成人午夜电影网| 奇米精品一区二区三区在线观看一 | 精品国产自在久精品国产| 99麻豆久久久国产精品免费优播| 麻豆freexxxx性91精品| 午夜成人免费电影| 洋洋成人永久网站入口| 日韩av成人高清| 欧美aaaaa成人免费观看视频| 亚洲综合成人网| 一区二区三区在线免费视频| 国产亚洲欧美中文| 欧美一级黄色片| 欧美性xxxxx极品少妇| 一本色道久久加勒比精品| 99re热这里只有精品视频| 风间由美一区二区av101| 亚洲精品国产精华液| 亚洲精品成人悠悠色影视| 国产精品高潮久久久久无| 国产蜜臀97一区二区三区| 国产欧美一区二区三区网站| 久久伊99综合婷婷久久伊| 国产亚洲福利社区一区| 国产精品久久综合| 亚洲国产日韩综合久久精品| 日韩电影免费在线看| 久久国产麻豆精品| 粉嫩嫩av羞羞动漫久久久| av不卡一区二区三区| 在线观看亚洲精品视频| 日韩欧美在线1卡| 亚洲国产精品二十页| 一区二区三区四区国产精品| 奇米在线7777在线精品| 成人18视频在线播放| 欧美美女一区二区三区| 国产女同互慰高潮91漫画| 亚洲综合久久久| 成人综合在线观看| 欧美高清视频一二三区| 中文字幕一区二区三区四区| 日韩成人dvd| 色综合中文综合网| 亚洲卡通动漫在线| 另类欧美日韩国产在线| 91黄色免费网站| 欧美经典一区二区三区| 日韩精品亚洲专区| 99久久精品一区二区| 久久嫩草精品久久久精品| 亚洲最新视频在线播放| 高清在线不卡av| 欧美一级二级在线观看| 亚洲成人www| 97久久精品人人爽人人爽蜜臀| 久久亚洲综合色一区二区三区| 亚洲18色成人| 欧美亚洲一区二区在线观看| 亚洲精品视频自拍| 91蜜桃在线观看| 国产精品久久三| 国产v综合v亚洲欧| 欧美激情一区二区三区全黄| 成人午夜av影视| 国产精品久久久久永久免费观看 | 亚洲视频一区二区免费在线观看| 国产jizzjizz一区二区| 欧美激情在线观看视频免费| 成人综合婷婷国产精品久久免费| 欧美成人精品高清在线播放 | 国产欧美日韩综合精品一区二区| 日本成人中文字幕在线视频| 欧美日韩高清影院| 精品在线播放免费| 国产日韩精品一区二区三区在线| 国产伦精品一区二区三区视频青涩 | 精品国精品国产尤物美女| 国产精品一级黄| 亚洲欧美一区二区三区国产精品 | 精品亚洲国内自在自线福利| 国产婷婷色一区二区三区 | 日本高清视频一区二区| 亚洲成人高清在线| 日韩一区二区免费在线观看| 国产一区二区不卡老阿姨| 综合色中文字幕| 91精品福利在线一区二区三区 | 激情综合亚洲精品| 日韩伦理av电影| 精品国产3级a| 91搞黄在线观看| 国产成人激情av| 夜夜嗨av一区二区三区| av中文字幕不卡| 蜜桃av一区二区三区电影| 亚洲欧美另类小说视频| 日韩欧美中文字幕一区| 成人av片在线观看| 精久久久久久久久久久| 亚洲第一主播视频| 亚洲精品乱码久久久久久黑人| 国产精品视频麻豆| 欧美mv日韩mv| 制服丝袜亚洲网站| 欧美色网站导航| 欧美日韩中文字幕一区| 波多野结衣在线aⅴ中文字幕不卡| 奇米影视在线99精品| 亚洲成人av免费| 亚洲国产日韩在线一区模特| 一区二区激情视频| 亚洲最大成人综合| 亚洲一区在线免费观看| 国产精品美女久久久久久久| 国产亚洲精品精华液| 国产欧美日韩在线视频| 日本一区二区三区国色天香| 欧美国产精品一区二区三区| 中文字幕一区二区在线观看| 亚洲丝袜另类动漫二区| 国产精品久久久久久久久晋中| 亚洲欧洲成人av每日更新| 2020国产成人综合网| 久久精品人人做| 亚洲综合av网| 美脚の诱脚舐め脚责91| 另类综合日韩欧美亚洲| 丁香一区二区三区| 欧美日韩在线播| 欧美xxx久久| 国产精品第13页| 日韩电影一区二区三区四区| 成人一级视频在线观看| 欧美手机在线视频| 久久久亚洲高清| 亚洲宅男天堂在线观看无病毒| 麻豆国产精品一区二区三区| 成人教育av在线| 欧美刺激午夜性久久久久久久| 一区精品在线播放| 蜜臀久久久久久久| 丁香激情综合五月| 欧美色图免费看| 自拍偷拍欧美精品| 国产精品1区2区| 欧美大片一区二区| 午夜视频一区二区三区| 成人午夜看片网址| 欧美大片一区二区三区| 午夜电影网一区| 91成人看片片| 中文字幕一区二区三区av| 国内精品久久久久影院薰衣草| 在线这里只有精品| 国产精品色哟哟网站| 国产精品一区三区| 欧美一区二区三区精品| 亚洲3atv精品一区二区三区| 在线视频你懂得一区| 亚洲欧洲性图库| 国产91精品免费| 国产欧美一区二区精品性色| 久久国产夜色精品鲁鲁99| 欧美日韩精品一区二区三区四区| 亚洲欧美另类图片小说| 99久久久久久| 亚洲一区中文日韩| 欧美日韩国产精品成人| 亚洲第一福利一区|