C Shell文本处理库

C Shell文本处理库,c,shell,serial-port,microcontroller,C,Shell,Serial Port,Microcontroller,我需要在微控制器上编写一个非常基本的命令解释器,它将通过虚拟串行端口进行通信。在我开始编写我自己的版本之前,我想知道是否有人知道任何用于非常简单、类似shell的文本处理的库。我喜欢shell中的标准功能,例如只有在用户键入新行后才能使用接收的文本,按backspace键删除队列中的最后一个字符,而不是在队列中添加另一个字符,诸如此类 有什么想法吗 谢谢试着找个翻译。这是一个大型的生态系统,您会发现许多打算在固件中使用的实现,例如:ª实现。例如,²是BSD许可的,包括终端访问代码,您可以重用这些

我需要在微控制器上编写一个非常基本的命令解释器,它将通过虚拟串行端口进行通信。在我开始编写我自己的版本之前,我想知道是否有人知道任何用于非常简单、类似shell的文本处理的库。我喜欢shell中的标准功能,例如只有在用户键入新行后才能使用接收的文本,按backspace键删除队列中的最后一个字符,而不是在队列中添加另一个字符,诸如此类

有什么想法吗

谢谢

试着找个翻译。这是一个大型的生态系统,您会发现许多打算在固件中使用的实现,例如:ª实现。例如,²是BSD许可的,包括终端访问代码,您可以重用这些代码。我不知道开放固件代码的可移植性如何,但如果它不适合您,我建议搜索其他符合您的可移植性和许可要求的Forth系统,并使用终端访问组件

⑨规范 ²程序是平台的一部分,请签出

.

为了在微控制器中实现真正简单的带行缓冲的“外壳”(行缓冲意味着只有在“回车”或“\n”之后才进行处理),我会这样做(在主循环的中间:

char * p = my_read_buffer; //this is in the initialization, rather than the main loop

if (byte_from_my_uart_avaliable()) {
    *p = read_uart_byte();

    if (*p == '\n') {
        process_input(my_read_buffer);
        p = my_read_buffer; //reset the linebuffer
    }
    else 
        p++;
}
秘密在于
process\u input()
函数,您可以在其中解析命令及其参数,以便调用适当的函数来处理它们


这只是一个远未完成的想法,您需要在
'\n'
之前限制接收的字符数,以防止溢出。

您想知道吗?@pmg:GNU readline对于您的基于花园式微控制器的系统来说可能太内存密集了。+1@Gilles。我没有想到这一点。我同意这可能是o big:(GNU readline接近我的意思。我需要一些东西来简化通过串行端口实现命令行接口的过程。我最终做了一些非常类似的事情。看起来其他解决方案都太大了,无法解决这个问题。也许等我着手解决这个问题时,我会清理我的源代码并发布一个基本的文本前端。:)