Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/58.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C fgets()不响应PuTTY命令_C_Embedded_Putty_Fgets - Fatal编程技术网

C fgets()不响应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

我在使用PuTTY和fgets()与嵌入式项目接口时遇到一些问题。我要求用户在PuTTY终端中输入,并根据命令运行寄存器读/写

我认为问题在于PuTTY,因为代码使用Tera术语(我想使用PuTTY,这样我就可以使用本地行编辑功能)

代码的相关部分很简单:

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)