嵌入式 实现自己的printf函数小示例

原创 2013年12月02日 14:58:27

my_printf.h:

  1. extern voidmy_printf(const char*format,...);
extern void my_printf(const char *format,...);


my_printf.c:

  1. #include "my_printf.h"
  2. #include"stdarg.h"
  3. voidprintch(const charch)
  4. {
  5. putchar(ch);
  6. }
  7. voidprintint(const intdec)
  8. {
  9. if(dec ==0)
  10. {
  11. return;
  12. }
  13. printint(dec / 10);
  14. putchar((char)(dec % 10 +'0'));
  15. }
  16. voidprintstr(const char*ptr)
  17. {
  18. while(*ptr)
  19. {
  20. putchar(*ptr);
  21. ptr++;
  22. }
  23. }
  24. voidprintfloat(const floatflt)
  25. {
  26. int tmpint =(int)flt;
  27. int tmpflt =(int)(100000 * (flt -tmpint));
  28. if(tmpflt % 10 >=5)
  29. {
  30. tmpflt = tmpflt / 10 + 1;
  31. }
  32. else
  33. {
  34. tmpflt = tmpflt / 10;
  35. }
  36. printint(tmpint);
  37. putchar('.');
  38. printint(tmpflt);
  39. }
  40. voidmy_printf(const char*format,...)
  41. {
  42. va_list ap;
  43. va_start(ap,format);
  44. while(*format)
  45. {
  46. if(*format !='%')
  47. {
  48. putchar(*format);
  49. format++;
  50. }
  51. else
  52. {
  53. format++;
  54. switch(*format)
  55. {
  56. case 'c':
  57. {
  58. char valch =va_arg(ap,int);
  59. printch(valch);
  60. format++;
  61. break;
  62. }
  63. case 'd':
  64. {
  65. int valint =va_arg(ap,int);
  66. printint(valint);
  67. format++;
  68. break;
  69. }
  70. case 's':
  71. {
  72. char *valstr =va_arg(ap,char *);
  73. printstr(valstr);
  74. format++;
  75. break;
  76. }
  77. case 'f':
  78. {
  79. float valflt =va_arg(ap,double);
  80. printfloat(valflt);
  81. format++;
  82. break;
  83. }
  84. default:
  85. {
  86. printch(*format);
  87. format++;
  88. }
  89. }
  90. va_end(ap);
  91. }
  92. }
  93. }
  94. intmain()
  95. {
  96. char ch ='A';
  97. char *str ="holleworld";
  98. int dec =1234;
  99. float flt =1234.3456789;
  100. my_printf("str = %s,dec = %d,ch = %c,flt =%f\n",str,dec,ch,flt);
  101. return 0;
  102. }

相关文章推荐

嵌入式C语言中printf函数的使用(二)——SWO引脚的巧妙应用

在Cortex-M3\M4系列MCU中,内核的调试组件都有一个仪器化跟踪单元(ITM)。ITM的一个主要的用途,就是支持调试信息的输出(例如,printf格式输出)。ITM包含了32个刺激端口,允许不...

嵌入式学习笔记5-静态函数库设计示例

本文基于国嵌的视频教程以及Red Hat Enterprise Linux Server (Release 6.3)系统,总结一下在Linux系统下关于动态、静态函数库的设计。  Linux应用序设...

嵌入式调试方法——printf和fprintf

除了人工的分析之外,最简单最直接的调试方法要算printf了。不过,我们这里推荐使用的并不是初学C语言时使用的函数int printf(const char *format, ...),而是稍微复杂一...

嵌入式 C语言实现进度条以及实现带进度条的CP命令等编程示例收集二

1、脚本shell root@u12d32:/home/kongjun/work/hi_test/time_count_down# cat time_test.sh #!/bin/bash COU...
  • skdkjxy
  • skdkjxy
  • 2014年02月26日 14:02
  • 989

嵌入式 信号机制经典详解以及示例

一,前言  信号是进程之间互传消息的一种方法俗称软件中断。很多比较重要的应用程序都需处理信号。信号提供了一种  处理异步事件的方法:终端用户键入中断键,则会通过信号机构停止一个程序。所以,信号可...
  • skdkjxy
  • skdkjxy
  • 2013年12月05日 09:47
  • 1229

嵌入式 在uboot中添加硬件看门狗小示例

2Uboot添加硬件看门狗 uboot中默认看门狗策略由两个宏CONFIG_HW_WATCHDOG和CONFIG_WATCHDOG来使能。 此策略是在代码执行中的不同阶段,添加喂狗代码。 ...
  • skdkjxy
  • skdkjxy
  • 2014年04月24日 10:40
  • 1077

嵌入式 sqlite3数据库创建、插入、更新、查询、删除、多线程等C编程示例以及多并发完成

/* Author : kj Time : 2014-09-07 Function : josep cvr manage by sqlite3 db */ #include #...
  • skdkjxy
  • skdkjxy
  • 2014年09月12日 19:33
  • 1335

使用嵌入式jetty在Eclipse中部署struts2示例程序struts2-blank

使用内嵌jetty在Eclipse中部署struts2示例

嵌入式测试:IAR单元测试示例

嵌入式测试通常涉及硬件的模拟与控制,需要在单元测试用例中随意模拟和控制硬件行为,以及模拟中断对全局变量的修改,并解决死循环、超时等问题。使用Visual Unit 4,通过在测试用例中设置内部输入,可...
  • dellfox
  • dellfox
  • 2014年02月26日 09:52
  • 3124
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:嵌入式 实现自己的printf函数小示例
举报原因:
原因补充:

(最多只允许输入30个字)