【问题标题】:Formatting characters on serial output!在串行输出上格式化字符!
【发布时间】:2009-07-20 13:14:13
【问题描述】:

我正在使用 EFSL 将 SD 卡连接到 ATmega128。 卡已初始化,但我在串行端口输出上收到一条错误消息“未知错误 0xff(请参阅sandisk 文档 p5-13)”。

这还不是全部,我使用'sprintf'来形成我在串口上显示的字符串。令人费解的是,我还在输出中得到了像“%02d”这样的实际格式字符!我认为我的应用程序本身正在崩溃。我可以给我的源代码,但是它太大了。如果有人想看,我复制粘贴在这里。

我还检查了sandisk docs p5-13,但我无法弄清楚...

我需要这方面的帮助... 请让我知道是否有人对此有所了解 谢谢...

【问题讨论】:

  • 我认为你应该把它分成两个问题。一个用于 sprintf,一个用于 SD 卡问题。在两者中,请发布相关代码 sn-ps 和相关文档的链接(板原理图、“sandisk 文档”等)。
  • 我打算把代码放在这里,但它太大了。生成的 .hex 文件刚好超过 28kB。但是,您对“sprintf”的看法是正确的,我认真地认为这是“sprintf”的问题......对为什么 sprintf 会这样做有任何想法吗?有没有人遇到过这个问题???

标签: embedded avr avr-gcc


【解决方案1】:

我碰巧为 ATmega8 编写了一些代码,并编写了自己的 printf 函数,输出到串行端口here

SerWrite 函数是将一个以 0 结尾的无符号字符数组传输到串行端口的函数。

#define SIZE_STATUS 80

void ser_printf(const char *fmt, ...) {
    va_list args;
    uchar STATUS[SIZE_STATUS];
    va_start(args, fmt);
    uchar s = (uchar) vsnprintf(STATUS, SIZE_STATUS, fmt, args);
    va_end(args);
    SerWrite(STATUS, s); 
}

【讨论】:

    【解决方案2】:

    我不知道怎么做,但是当我使用另一张卡时问题就解决了。我尝试了两张 FAT32 格式的 1/2 GB 卡;两者都没有工作,但工作的卡是 16 MB 的 FAT12 格式的佳能卡。我正在努力解决这个问题。如果我找到答案,我会发布, 还是谢谢大家...

    【讨论】:

      猜你喜欢
      • 2012-03-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-11-06
      • 1970-01-01
      • 1970-01-01
      • 2012-01-04
      相关资源
      最近更新 更多