gpt4 book ai didi

c - newlib printf 函数错误

转载 作者:太空宇宙 更新时间:2023-11-03 23:51:33 26 4
gpt4 key购买 nike

我正在尝试将 printf 数据发送到我的 uart 设备。我已经适本地编写了 write_r() 函数。

我遇到的问题是,

  • 当我说printf("我叫山姆\n我很好");
  • 下次我说 printf("I am back ");

第一个问题:我只能看到“我的名字是Sam”,然后光标转到下一行并停在那里。

第二个问题:“我回来了”根本没有打印出来。

我尝试通过删除 \n ,仍然没有打印第二个 printfuart 没有问题。

看起来 \ 已经到达,指针丢失了。

我的代码

    int write(int file, char *ptr, int len) {

#if !defined( OUT_8 )
#define OUT_8(p,d) (*(volatile char *)(p) = (char)(d))
#endif
#if !defined( IN_8 )
#define IN_8(p) ((*(volatile char *)(p)))
#endif

OUT_8(DUART1_UMCR1, 0x02); //Informs external modem or peripheral that the UART is ready for sending data
OUT_8(DUART1_ULCR1, 0x03);
OUT_8(DUART1_UIER1, 0x0f);
OUT_8(DUART1_UFCR1, 0x8f);

OUT_8(DUART1_UTHR, '\n');
OUT_8(DUART1_UTHR, '\r');
while (ptr!=NULL)
{
if (*ptr=='\n') // JUST A TRY to avoid \n bug
{
OUT_8(DUART1_UTHR, '\n');
wait();
*ptr++;
*ptr++;
OUT_8(DUART1_UTHR, *ptr++); // \n & \r when given through printf isNot working
wait();
}


OUT_8(DUART1_UTHR, *ptr++); // \n & \r when given through printf is not working
wait(); // TODO:

if(len==0)
break;
else
len--;
}

OUT_8(DUART1_UMCR1, 0x00); // say that modem is not not ready. Connection over
OUT_8(DUART1_UFCR1, 0x87);
OUT_8(DUART1_ULCR1, 0x00); // Clear all the interrupts ! virtually shut the UART port
errno = ENOSYS;
return -1;
}

最佳答案

确信 OP 的 I/O 在某处被缓冲。
在发送 \r 和/或 \n 之前不会出现输出。

#if !defined( OUT_8 )
#define OUT_8(p,d) (*(volatile char *)(p) = (char)(d))
#endif

// make ptr a `const char *`
int write(int file, const char *ptr, int len) {
OUT_8(DUART1_UMCR1, 0x02); //Informs UART is ready for sending data
OUT_8(DUART1_ULCR1, 0x03);
OUT_8(DUART1_UIER1, 0x0f);
OUT_8(DUART1_UFCR1, 0x8f);

while (len-- > 0) {
OUT_8(DUART1_UTHR, *ptr++);
wait();
}

// Force an EOL at the _end_ of transmission.
OUT_8(DUART1_UTHR, '\n');
OUT_8(DUART1_UTHR, '\r');
wait();

OUT_8(DUART1_UMCR1, 0x00); // say that modem is not not ready. Connection over
OUT_8(DUART1_UFCR1, 0x87);
OUT_8(DUART1_ULCR1, 0x00); // Clear all interrupts! virtually shut UART port
errno = ENOSYS;
return -1;
}

我怀疑缓冲发生在接收 端,要么是 UART,要么更可能是在查看数据的终端。 OP说“诅咒者转到下一行”。 UART 中没有“光标”。

关于c - newlib printf 函数错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18983039/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com