在嵌入式開發中,因為只有黑框框的終端,所以在終端輸入指令是比較麻煩的,每次都需要重新實現解析字符串。
本篇文章分享一個自己常用的一套終端菜單系統。
代碼如下:
#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$
審核編輯:劉清
聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。
舉報投訴
-
嵌入式
+關注
關注
5086文章
19141瀏覽量
305971 -
CMDB
+關注
關注
0文章
7瀏覽量
6744 -
LINUX內核
+關注
關注
1文章
316瀏覽量
21671
發布評論請先 登錄
相關推薦
【申精】【轉帖】一個占用內存極少的菜單系統的實現
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
?1160次閱讀
AVR期末 自選設計 菜單系統多功能使用
Avr自選設計實踐內容,綜合各個功能模塊設計基于菜單的實踐作品。1)基本內容:設計菜單系統(lcd顯示菜單,或者數碼管顯示菜單編號),menu0實現具有校準功能的時鐘
發表于 11-15 18:51
?6次下載
基于Arduino UNO的編碼器菜單系統
、編碼器兩個針腳、內置按鈕一個針腳該函數控制輪次計數,菜單控制器將此計數傳遞給變量。當用戶單擊按鈕時,計數器重置為 0。還有更簡單更好的方法來控制變量。您可以使用方向變量(dir)。我
發表于 12-20 16:00
?0次下載
會議一體機單系統與雙系統的區別在哪里?怎么選擇
體機通常具有更簡單的設計,僅配備一個操作系統和應用程序,這種一體機通常更加可靠和易于維護。此外,單系統一體機價格上更便宜,適合只需要基本會議
評論