You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.26 08:31:08