嵌入式系统的printf实现

时间:2017-05-24 21:30:17

标签: embedded printf

在哪里可以找到适合嵌入式系统的几乎完整的实现(浮点数,宽度等)(几个嵌套的函数调用,低堆栈和ram使用,没有堆,mo系统调用)

2 个答案:

答案 0 :(得分:0)

您是否检查过ChibiOS的chvprintf实施?它是Apache许可的,浮动支持(代价高昂)是define的编译时选项。

它的设计考虑了微控制器。这些宏几乎都只调用提供的BaseSequentialStream结构中的函数指针,您可以根据需要替换它们。 var-args列表是您的常规stdarg.h实现。

答案 1 :(得分:0)

对于在串行端口上传输,最快的方法是:

int32_t printfDebugSerial(const char *format, ...)
{
  if (strlen(format) >200) return -1;
  char tempBuff[256]; memset(tempBuff, 0, sizeof tempBuff);

  va_list arg;
  int32_t done;
  va_start (arg, format);
  done = (int32_t)vsprintf(tempBuff,format, arg);
  va_end (arg);

  pushMsgOnSerial((uint8_t*)tempBuff, done);
  return done;
}

其中pushMsgOnSerial()是您的主板特定功能,用于在串行端口上发送字节。