2011-06-06 85 views
1

我需要编写一个微控制器,该控制器将在一个虚拟串口通信上的非常基本的命令解释程序。在我继续编写自己的版本之前,我想知道是否有人知道任何库文件是非常简单的,像shell一样的文本处理。我希望shell中的标准功能,例如在用户输入新行后接收到的文本可用,按退格键删除队列中的最后一个字符,而不是在队列中添加另一个字符,像这样的东西。壳牌文本处理库

任何想法?

感谢

+2

你想[GNU readline库(http://cnswww.cns.cwru.edu/php/chet/readline/rltop.html)可能? – pmg 2011-06-06 18:13:12

+2

@pmg:GNU readline很可能是* far *对于基于微控制器的花园系统来说,内存密集程度太高。 – Gilles 2011-06-06 19:08:18

+0

+1 @Gilles。我没有想到这一点。我同意它可能太大:( – pmg 2011-06-06 19:13:48

回答

1

真正实现了简单的“壳”与行缓冲在微控制器(行缓冲只是一个“输入”或“\ 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_input()功能,在那里你会解析命令及其参数,所以你可以调用相应的函数来处理它们

这只是一个想法相去甚远。完成后,您需要对'\n'之前收到的字符数进行限制,以防止流。

+0

我落得这样做与此非常相似的东西。看起来像所有其他解决问题的办法太大了,也许当我接触到它的时候,我会清理我的源代码并发布一个基本的文本前端。 – sbilstein 2011-08-26 21:37:20

1

尝试寻找一个Forth解释。这是一个大型的生态系统,你会发现许多实现,意在固件中使用,如Open Firmware¹实现OpenBIOS。例如Open Firmware²是BSD许可的,并包含终端访问代码,您可以重复使用。我不知道Open Firmware代码的便携性,但如果它不适合您,我建议您搜索符合您的可移植性和许可要求并具有终端访问组件的其他Forth系统。

¹规范 ²程序