C fgets()不响应PuTTY命令
我在使用PuTTY和fgets()与嵌入式项目接口时遇到一些问题。我要求用户在PuTTY终端中输入,并根据命令运行寄存器读/写 我认为问题在于PuTTY,因为代码使用Tera术语(我想使用PuTTY,这样我就可以使用本地行编辑功能) 代码的相关部分很简单:C fgets()不响应PuTTY命令,c,embedded,putty,fgets,C,Embedded,Putty,Fgets,我在使用PuTTY和fgets()与嵌入式项目接口时遇到一些问题。我要求用户在PuTTY终端中输入,并根据命令运行寄存器读/写 我认为问题在于PuTTY,因为代码使用Tera术语(我想使用PuTTY,这样我就可以使用本地行编辑功能) 代码的相关部分很简单: int main(void) { bool connected = false; bool quit = false; char strcom[100]; /* other variable declarati
int main(void) {
bool connected = false;
bool quit = false;
char strcom[100];
/* other variable declarations */
connected = device_good(); // read version register, if correct, return true
if (connected) {
printf("Connected to LAN8770 device...\r\n");
} else {
quit = true;
}
while (!quit) {
printf(">> ");
fgets(strcom, sizeof(strcom), stdin);
/* rest of code and input processing */
}
}
在调试时,我看到代码从未超出fgets()
调用。但是,我知道PuTTY可以从处理器接收信息,因为我确实在if(connected)
块中看到printf()
语句的输出
我读到PuTTY有时只发送回车(\r
),这不适用于fgets()
,但我检查了“每个CR中的隐式LF”设置:
是否有一个设置在腻子,我错过了?或者是我的代码中的一个问题,出于某种原因,导致了PuTTY的错误行为
欢迎提出任何建议/想法
-肖恩
编辑:请注意,“每个LF中的隐式CR”选项似乎也不起作用。按Enter键时,PuTTY似乎不发送换行。它只发送一个回车。在行尾追加
Ctrl+J
可以完成任务,但这不是一个很好的解决方案。感谢Eugene Sh.提供的故障排除技术
正如Clifford指出的,这个问题并不是一个真正的问题。我已经投票决定关闭它。先用
fgetc
试试看它是否能收到任何东西。fgetc
有效。我可以键入一个字符,按enter键,它会打印回来。您的stdin
是否实际映射到串行端口?是的。正如我在原始帖子中所说,此代码与其他串行终端(例如Tera Term)一起工作。打印使用fgetc
获得的所有代码,并查看按Enter键时得到的结果。也许您需要“隐式CR with LF”看起来您的代码运行在一个中等复杂的系统上,而不是裸机硬件上,因此您也可以使用类似于stty
(或pogram中的各种IOCTL)的东西来配置串行端口,以将传入CR转换为LF(icrnl)