Pic32以太网开发板Generic TCPIP Servo演示程序功能定制咨询
嘿,看来你已经把PIC32 Ethernet Starter Kit 2上的Harmony TCPIP Servo演示基础Telnet交互跑通了呀!现在想从单个字符响应升级成处理字符串输入是吧?我给你一步步捋清楚怎么改:
调整Telnet输入处理逻辑,实现字符串级响应
原程序之所以输入单个字符(比如"h")会返回"hH",是因为它每次只读取一个字符,先回显输入内容,再返回转大写后的字符。要实现输入"hello"返回对应内容,得从这几个地方改:
1. 先找到核心输入处理代码
一般在演示工程的app.c或者专门的Telnet处理文件(比如telnet_server.c,具体看你用的Harmony版本)里,原代码大概长这样:
char inputChar; if (TCPIP_TELNET_GetCharacter(telnetHandle, &inputChar, 0)) { // 回显输入的字符 TCPIP_TELNET_PutCharacter(telnetHandle, inputChar); // 转大写后发送回去 char upperChar = toupper(inputChar); TCPIP_TELNET_PutCharacter(telnetHandle, upperChar); }
2. 修改为读取完整字符串的逻辑
我们需要用一个缓冲区来存储用户输入的字符,直到用户按下回车(Telnet里换行一般是\r或\n),代表输入结束。修改后的代码可以这样写:
#define INPUT_BUF_SIZE 64 // 根据需求调整缓冲区大小 char inputBuf[INPUT_BUF_SIZE]; static uint8_t bufIndex = 0; // 缓冲区当前存储的字符索引 char inputChar; if (TCPIP_TELNET_GetCharacter(telnetHandle, &inputChar, 0)) { // 处理回车:输入结束,开始处理字符串 if (inputChar == '\r' || inputChar == '\n') { inputBuf[bufIndex] = '\0'; // 给字符串加结束符 bufIndex = 0; // 重置缓冲区,准备下一次输入 // 调用自定义函数处理完整输入 ProcessUserInput(telnetHandle, inputBuf); } // 处理退格:删除缓冲区最后一个字符,同时清理屏幕显示 else if (inputChar == '\b' && bufIndex > 0) { bufIndex--; TCPIP_TELNET_PutString(telnetHandle, "\b \b"); // 回显退格+空格+退格,清除屏幕字符 } // 普通字符:存入缓冲区并回显 else if (bufIndex < INPUT_BUF_SIZE - 1) { TCPIP_TELNET_PutCharacter(telnetHandle, inputChar); inputBuf[bufIndex++] = inputChar; } }
3. 实现字符串处理函数
接下来写ProcessUserInput函数,根据你的需求返回对应内容。比如输入"hello"返回"Hello",或者你提到的"Wor..."(比如"World!"),代码示例:
void ProcessUserInput(TCPIP_TELNET_HANDLE telnetHandle, char* inputStr) { // 先换行,区分输入和输出内容 TCPIP_TELNET_PutString(telnetHandle, "\r\n"); // 示例1:把整个输入字符串转大写后返回 char upperStr[INPUT_BUF_SIZE]; strcpy(upperStr, inputStr); for (int i = 0; upperStr[i] != '\0'; i++) { upperStr[i] = toupper(upperStr[i]); } TCPIP_TELNET_PutString(telnetHandle, upperStr); // 示例2:如果输入是"hello",返回指定内容(比如你说的"Wor...") if (strcmp(inputStr, "hello") == 0) { TCPIP_TELNET_PutString(telnetHandle, "World!"); } // 最后加换行,方便下一次输入 TCPIP_TELNET_PutString(telnetHandle, "\r\n"); }
如果你的需求是输入"hello"同时控制舵机动作,只需要在strcmp的判断里加上舵机控制的代码就行(比如调用Harmony的PWM驱动函数)。
4. 注意边界处理
- 一定要限制缓冲区大小,避免输入过长导致内存溢出
- 处理退格键很重要,不然用户输入时删除字符会出现显示混乱的情况
改完之后烧录程序,Telnet登录输入"hello",就能得到你想要的响应啦!
内容的提问来源于stack exchange,提问作者PBSnake
相关产品推荐
相关产品推荐

