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

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

?? rprintf.c

?? at91sam7s64的串口通信示例代碼。
?? C
字號:
//#########################################################################
// (r)printf.c
//
// code based on sprintf() from gcctest9.c by Volker Oth
//
// Changes made by Holger Klabunde:
// Now takes format strings from FLASH (was into RAM ! before)
// Fixed bug for %i, %I. u_val was used before it had the right value
// Added %d, %D (is same as %i, %I)
// Support for long variables %li, %ld, %Lu, %LX ....
// %x, %X now gives upper case hex characters A,B,C,D,E,F
// Output can be redirected in a single function: myputchar()
// Make printf() smaller by commenting out a few #defines
// Added some SPACE and ZERO padding %02x or % 3u up to 9 characters
// 
// Changes made by Martin Thomas:
// LPC2000 port using the R O Software UART-Interface (see myputchar)
// ARM7S   port using minimal uart interface
// reverted Klabundes "from flash" since only useful for AVR "Harvard"
//
// Todo:
// %f, %F for floating point numbers
//
//#########################################################################

#include <stdarg.h>
#include <string.h>
#include "rprintf.h"

#define SCRATCH 12	//32Bits go up to 4GB + 1 Byte for \0

//Spare some program space by making a comment of all not used format flag lines
#define USE_LONG 	// %lx, %Lu and so on, else only 16 bit integer is allowed
//#define USE_OCTAL	// %o, %O Octal output. Who needs this ?
#define USE_STRING      // %s, %S Strings as parameters
#define USE_CHAR	// %c, %C Chars as parameters
#define USE_INTEGER	// %i, %I Remove this format flag. %d, %D does the same
#define USE_HEX		// %x, %X Hexadezimal output
#define USE_UPPERHEX	// %x, %X outputs A,B,C... else a,b,c...
#ifndef USE_HEX
 #undef USE_UPPERHEX    // ;)
#endif
#define USE_UPPER	// uncommenting this removes %C,%D,%I,%O,%S,%U,%X and %L..
                        // only lowercase format flags are used
#define PADDING         //SPACE and ZERO padding

#include "serial.h"

static void myputchar(unsigned char c)
{
	if(c == '\n') uart0_putc('\r');
	uart0_putc(c); // see softuart.c
}


#if 0

#include "softuart.h"

static void myputchar(unsigned char c)
{
	if(c == '\n') softuart_putchar('\r');
	softuart_putchar(c); // see softuart.c
}
#endif

#if 0
static void myputchar(unsigned char c)
{
	while ( uart0Space() < 2 );
	if(c == '\n') uart0Putch('\r');
	uart0Putch(c); // see uart.c
}
#endif

void rprintf(char const *format, ...)
{
  unsigned char scratch[SCRATCH];
  unsigned char format_flag;
  unsigned short base;
  unsigned char *ptr;
  unsigned char issigned=0;
  va_list ap;

#ifdef USE_LONG
  unsigned char islong=0;
  unsigned long u_val=0;
  long s_val=0;
#else
  unsigned int u_val=0;
  int s_val=0;
#endif

  unsigned char fill;
  unsigned char width;

  va_start (ap, format);
  for (;;){
    while ((format_flag = *(format++)) != '%'){      // Until '%' or '\0' 
      if (!format_flag){va_end (ap); return;}
      myputchar(format_flag);
    }

    issigned=0; //default unsigned
    base = 10;

    format_flag = *format++; //get char after '%'

#ifdef PADDING
    width=0; //no formatting
    fill=0;  //no formatting
    if(format_flag=='0' || format_flag==' ') //SPACE or ZERO padding  ?
     {
      fill=format_flag;
      format_flag = *format++; //get char after padding char
      if(format_flag>='0' && format_flag<='9')
       {
        width=format_flag-'0';
        format_flag = *format++; //get char after width char
       }
     }
#endif

#ifdef USE_LONG
    islong=0; //default int value
#ifdef USE_UPPER
    if(format_flag=='l' || format_flag=='L') //Long value 
#else
    if(format_flag=='l') //Long value 
#endif
     {
      islong=1;
      format_flag = *format++; //get char after 'l' or 'L'
     }
#endif

    switch (format_flag)
    {
#ifdef USE_CHAR
    case 'c':
#ifdef USE_UPPER
    case 'C':
#endif
      format_flag = va_arg(ap,int);
      // no break -> run into default
#endif

    default:
      myputchar(format_flag);
      continue;

#ifdef USE_STRING
#ifdef USE_UPPER
    case 'S':
#endif
    case 's':
      ptr = (unsigned char*)va_arg(ap,char *);
      while(*ptr) { myputchar(*ptr); ptr++; }
      continue;
#endif

#ifdef USE_OCTAL
    case 'o':
#ifdef USE_UPPER
    case 'O':
#endif
      base = 8;
      myputchar('0');
      goto CONVERSION_LOOP;
#endif

#ifdef USE_INTEGER //don't use %i, is same as %d
    case 'i':
#ifdef USE_UPPER
    case 'I':
#endif
#endif
    case 'd':
#ifdef USE_UPPER
    case 'D':
#endif
      issigned=1;
      // no break -> run into next case
    case 'u':
#ifdef USE_UPPER
    case 'U':
#endif

//don't insert some case below this if USE_HEX is undefined !
//or put       goto CONVERSION_LOOP;  before next case.
#ifdef USE_HEX
      goto CONVERSION_LOOP;
    case 'x':
#ifdef USE_UPPER
    case 'X':
#endif
      base = 16;
#endif

    CONVERSION_LOOP:

      if(issigned) //Signed types
       {
#ifdef USE_LONG
        if(islong) { s_val = va_arg(ap,long); }
        else { s_val = va_arg(ap,int); }
#else
        s_val = va_arg(ap,int);
#endif

        if(s_val < 0) //Value negativ ?
         {
          s_val = - s_val; //Make it positiv
          myputchar('-');    //Output sign
         }

        u_val = (unsigned long)s_val;
       }
      else //Unsigned types
       {
#ifdef USE_LONG
        if(islong) { u_val = va_arg(ap,unsigned long); }
        else { u_val = va_arg(ap,unsigned int); }
#else
        u_val = va_arg(ap,unsigned int);
#endif
       }
    
      ptr = scratch + SCRATCH;
      *--ptr = 0;
      do
       {
        char ch = u_val % base + '0';
#ifdef USE_HEX
        if (ch > '9')
         {
          ch += 'a' - '9' - 1;
#ifdef USE_UPPERHEX
          ch-=0x20;
#endif
         }
#endif          
        *--ptr = ch;
        u_val /= base;

#ifdef PADDING
        if(width) width--; //calculate number of padding chars
#endif
      } while (u_val);

#ifdef PADDING
     while(width--) *--ptr = fill; //insert padding chars		      
#endif

      while(*ptr) { myputchar(*ptr); ptr++; }
    }
  }
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产拍欧美日韩视频二区| 欧美日韩国产一级片| 看电视剧不卡顿的网站| 性做久久久久久免费观看| 亚洲综合丝袜美腿| 亚洲1区2区3区视频| 青青草成人在线观看| 理论片日本一区| 懂色一区二区三区免费观看| 国产91精品精华液一区二区三区| 国产99精品国产| 99国产一区二区三精品乱码| 一本色道久久综合亚洲91 | 欧美性videosxxxxx| 欧美日韩一区小说| 日韩欧美国产综合| 欧美国产日本韩| 一区二区三区蜜桃网| 五月天一区二区| 国产综合久久久久久久久久久久| 国产精品一区二区你懂的| 91麻豆.com| 日韩情涩欧美日韩视频| 久久夜色精品一区| 亚洲视频小说图片| 日本欧美一区二区在线观看| 国内一区二区在线| 色婷婷av一区二区三区gif| 4438x成人网最大色成网站| 久久久久久久久蜜桃| 亚洲激情欧美激情| 蜜乳av一区二区| 91女厕偷拍女厕偷拍高清| 欧美美女直播网站| 国产精品丝袜91| 丝袜美腿亚洲色图| av资源网一区| 精品国产一区二区三区av性色| 国产精品久久久久国产精品日日| 亚洲丰满少妇videoshd| 成人精品国产一区二区4080| 欧美日韩午夜精品| √…a在线天堂一区| 捆绑调教一区二区三区| 色欧美乱欧美15图片| 久久精品人人爽人人爽| 亚洲成人av一区二区三区| 成人免费高清视频在线观看| 欧美一区二区黄色| 一区二区三区日韩欧美精品| 精品一区二区三区免费播放| 欧美日韩视频专区在线播放| 中文字幕在线不卡| 国产精品一区二区在线观看网站| 欧美日韩精品一区二区天天拍小说 | 精品视频999| 日韩美女精品在线| 成人晚上爱看视频| 欧美精品一区二区在线播放| 婷婷久久综合九色国产成人 | 久久精品国产亚洲5555| 欧美日本免费一区二区三区| 成人欧美一区二区三区1314 | 亚洲1区2区3区视频| 91国模大尺度私拍在线视频| 国产精品久久99| 成人激情小说网站| 欧美极品另类videosde| 国产精品自拍三区| 久久久99精品久久| 成人一区二区三区| 国产精品久久久久影院| 成人小视频在线观看| 国产精品欧美一级免费| 成人永久看片免费视频天堂| 国产亚洲成av人在线观看导航| 国产综合色视频| 国产精品亲子乱子伦xxxx裸| 国产suv精品一区二区6| 国产日韩欧美高清| 99视频一区二区三区| 最新热久久免费视频| 色一情一乱一乱一91av| 亚洲成人在线免费| 日韩欧美在线一区二区三区| 久久99国产精品麻豆| 中文一区一区三区高中清不卡| 成人国产精品免费观看动漫| 中文字幕亚洲电影| 欧美日韩亚洲综合在线| 久久99国产精品免费网站| 久久久久久久av麻豆果冻| av午夜精品一区二区三区| 亚洲色图另类专区| 欧美日韩中文字幕一区| 国产成人精品三级麻豆| 亚洲国产精品黑人久久久| 94-欧美-setu| 日韩黄色免费网站| 国产精品日韩精品欧美在线| av午夜精品一区二区三区| 亚洲成人午夜电影| 精品处破学生在线二十三| 97久久超碰国产精品电影| 亚洲一区二区三区四区的| 精品精品欲导航| 成人黄页毛片网站| 日日噜噜夜夜狠狠视频欧美人| 精品国产三级a在线观看| 99久久免费精品高清特色大片| 亚洲18女电影在线观看| 欧美经典一区二区| 91精品国产色综合久久ai换脸 | 中文字幕不卡的av| 欧美日韩国产小视频在线观看| 麻豆一区二区99久久久久| 亚洲欧美日本韩国| 久久综合色鬼综合色| 欧美激情在线观看视频免费| 欧美专区亚洲专区| 国产91在线|亚洲| 日韩精品午夜视频| 亚洲美女视频在线观看| 久久综合久久综合久久综合| 欧美三级中文字幕| 91性感美女视频| 国产精品夜夜爽| 免费在线观看视频一区| 怡红院av一区二区三区| 国产精品久久久久国产精品日日| 日韩一区二区在线播放| 欧美亚洲综合色| a4yy欧美一区二区三区| 国内精品久久久久影院薰衣草| 亚洲18色成人| 亚洲h精品动漫在线观看| 一区二区三区四区激情| 最新中文字幕一区二区三区| 国产日韩三级在线| 久久午夜免费电影| 久久亚洲一级片| 日韩视频在线观看一区二区| 欧美午夜寂寞影院| 欧美中文字幕一区二区三区| 91麻豆精东视频| 99国产精品久| 91论坛在线播放| 色综合天天视频在线观看| 99久久综合国产精品| 白白色 亚洲乱淫| 成人动漫av在线| 99亚偷拍自图区亚洲| 91在线国内视频| 91麻豆.com| 欧美日韩一级视频| 欧美剧情电影在线观看完整版免费励志电影| 91亚洲精品久久久蜜桃| 欧美在线视频全部完| 欧美三片在线视频观看 | 久久成人av少妇免费| 美腿丝袜亚洲综合| 精彩视频一区二区三区| 狠狠狠色丁香婷婷综合激情 | 不卡视频一二三| 91老司机福利 在线| 日本精品视频一区二区| 欧美色图天堂网| 欧美一区二视频| 亚洲精品在线观看视频| 国产精品午夜在线| 亚洲一区二区偷拍精品| 天堂精品中文字幕在线| 免费成人美女在线观看.| 国产精品一区2区| 色欲综合视频天天天| 7777精品伊人久久久大香线蕉| 日韩精品综合一本久道在线视频| 精品国产伦一区二区三区观看体验 | 精品久久久久久亚洲综合网 | 色狠狠综合天天综合综合| 欧美绝品在线观看成人午夜影视| 欧美精品一区二区三区一线天视频 | 樱花影视一区二区| 麻豆国产欧美日韩综合精品二区| 国产精选一区二区三区| 欧美系列一区二区| 精品国产在天天线2019| 亚洲精品乱码久久久久久黑人| 日本中文一区二区三区| 成人看片黄a免费看在线| 欧美三级日本三级少妇99| 国产日本欧美一区二区| 午夜不卡av在线| 成人h版在线观看| 91麻豆精品国产自产在线| 国产精品人人做人人爽人人添 | 中文字幕亚洲一区二区av在线 | 亚洲国产精品一区二区久久恐怖片| 黄色成人免费在线| 555www色欧美视频|