在嵌入式开发中,因为只有黑框框的终端,所以在终端输入指令是比较麻烦的,每次都需要重新实现解析字符串。
本篇文章分享一个自己常用的一套终端菜单系统。
代码如下:
#include
#include
#include
typedef enum CmdType
{
CMD1, CMD2, CMD3, CMD4, CMD5, QUIT
}CmdType;
typedef struct CmdList
{
CmdType type;
unsigned char info[50];
}CmdList;
CmdList g_cmd_list[] =
{
{CMD1, "run cmd1"},
{CMD2, "run cmd2"},
{CMD3, "run cmd3"},
{CMD4, "run cmd4"},
{CMD5, "run cmd5"},
{QUIT, "to quit"},
};
void printf_cmd_str()
{
int size = sizeof(g_cmd_list) / sizeof(g_cmd_list[0]);
printf("support cmd:\\n");
for (int i = 0; i < size; i++) {
printf(" .%d-->%s\\n", i, g_cmd_list[i].info);
}
printf("eg. you can input \".0\" to run this cmd.\\n");
}
int main(int argc, char *argv[])
{
int cmd_size = sizeof(g_cmd_list) / sizeof(g_cmd_list[0]);
while (1) {
printf_cmd_str();
char data[20] = {0};
if (fgets(data, 20, stdin) < 0) {
printf("fgets error\\n");
continue;
}
if (data[0] == '.') {
int id = atoi(&data[1]);
if (id >= cmd_size || id < 0) {
printf("input err\\n");
continue;
}
int cmd = g_cmd_list[id].type;
if (cmd == CMD1) {
printf("run cmd1\\n");
}
else if (cmd == CMD2) {
printf("run cmd2\\n");
}
else if (cmd == CMD3) {
printf("run cmd3\\n");
}
else if (cmd == CMD4) {
printf("run cmd4\\n");
}
else if (cmd == CMD5) {
printf("run cmd5\\n");
}
else if (cmd == QUIT) {
printf("to quit\\n");
break;
}
else {
printf("this cmd is not supported\\n");
}
}
else {
printf("input invalid\\n");
}
}
return 0;
}
运行结果如下:
****@****:~/zcl$ ./a.out
support cmd:
.0-->run cmd1
.1-->run cmd2
.2-->run cmd3
.3-->run cmd4
.4-->run cmd5
.5-->to quit
eg. you can input ".0" to run this cmd.
.0
run cmd1
support cmd:
.0-->run cmd1
.1-->run cmd2
.2-->run cmd3
.3-->run cmd4
.4-->run cmd5
.5-->to quit
eg. you can input ".0" to run this cmd.
.5
to quit
****@****:~/zcl$
审核编辑:刘清
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。
举报投诉
-
嵌入式
+关注
关注
5082文章
19114浏览量
304886 -
CMDB
+关注
关注
0文章
7浏览量
6742 -
LINUX内核
+关注
关注
1文章
316浏览量
21645
发布评论请先 登录
相关推荐
【申精】【转帖】一个占用内存极少的菜单系统的实现
LCD上直接使用这份代码为什么公布这份代码,使用的话需要授权什么的么? 文件目录:1. MenuSampleCode目录是代码这份代码我在我的硬件上测试过。2.说明文档是:一个占用内存极少的菜单系统
发表于 01-22 15:53
基于VS2010单列树形结构文本菜单系统设计
在公司闲着,于是写了一个菜单系统。这个菜单系统不是很复杂的,功能简单。总共300多行代码。实现1~255级和1~255相目录显示。这里放在VS上实现,主要是便于调试,其实它主要用于带普
发表于 07-31 14:58
深联华单片机实现菜单系统
在各类仪器仪表的设计中,常常需要透过液晶和键盘来实现人机交互,当整个系统需要管理的内容较多的时候,如何透过键盘和液晶实现有效管理便是个问题。通常软件的设计者会设计一个
发表于 10-31 09:16
Ubuntu终端常用的快捷键
Ubuntu中的许多操作在终端(Terminal)中十分的快捷,记住一些快捷键的操作更得心应手。在Ubuntu中打开终端的快捷键是Ctrl+Alt+T。其他的一些
发表于 10-28 13:47
STC15单片机驱动5寸屏幕做多级菜单显示,用什么屏幕比较好?
最近在做一个项目,想用STC15来写一个多级菜单系统,显示在5寸屏幕上。
1、请问各位朋友,选择哪种屏幕比较好?请各位推荐几块屏幕,不胜感激!
2、还有就是做多级
发表于 10-07 07:33
Visual FoxPro使用教程之菜单设计与建立应用程序系统
菜单是应用程序的一个重要组成部分,VFP中可以通过以往的常规程序设计方法,直接编写代码进行菜单设计,但通过VFP提供的菜单设计器,可以更为方
发表于 09-20 11:42
•0次下载
英创信息技术ARM9 Linux智能终端菜单界面设计介绍
、LCD128x64、LCD160x160等。在实际应用中有许多对于菜单界面操作的需求,需要客户根据应用的具体要求自行构建菜单显示界面,本文将重点介绍这方面的内容。
linux系统中如何创建文本菜单
当使用Linux系统时,最常见的Shell脚本交互类型是应用菜单(文本菜单),文本菜单的核心是case命令。 H. L.使用case命令完成菜单
发表于 09-25 15:45
•1155次阅读
AVR期末 自选设计 菜单系统多功能使用
Avr自选设计实践内容,综合各个功能模块设计基于菜单的实践作品。1)基本内容:设计菜单系统(lcd显示菜单,或者数码管显示菜单编号),menu0实现具有校准功能的时钟
发表于 11-15 18:51
•6次下载
基于Arduino UNO的编码器菜单系统
、编码器两个针脚、内置按钮一个针脚该函数控制轮次计数,菜单控制器将此计数传递给变量。当用户单击按钮时,计数器重置为 0。还有更简单更好的方法来控制变量。您可以使用方向变量(dir)。我
发表于 12-20 16:00
•0次下载
会议一体机单系统与双系统的区别在哪里?怎么选择
体机通常具有更简单的设计,仅配备一个操作系统和应用程序,这种一体机通常更加可靠和易于维护。此外,单系统一体机价格上更便宜,适合只需要基本会议
评论