自己写bootloader(4)——实现字符界面
2014-11-19 17:43
106 查看
在main函数中添加如下函数实现字符界面
readline的作用是循环读取串口输入并回显
run_command的作用是执行所输入的命令
首先输出一个prompt,也就是字符界面的提示信息,这是个字符串可以自己定义
在for循环里面循环getc获得串口输入,判断输入字符做相应的处理,如果是\n则return
for (;;) { len = readline (CFG_PROMPT); flag = 0; /* assume no special flags for now */ if (len > 0) strcpy (lastcommand, console_buffer); else if (len == 0) flag |= CMD_FLAG_REPEAT; if (len == -1) puts ("<INTERRUPT>\n"); else rc = run_command (lastcommand, flag); if (rc <= 0) { /* invalid command or not repeatable, forget it */ lastcommand[0] = 0; } }
readline的作用是循环读取串口输入并回显
run_command的作用是执行所输入的命令
/* * Prompt for input and read a line. * If CONFIG_BOOT_RETRY_TIME is defined and retry_time >= 0, * time out when time goes past endtime (timebase time in ticks). * Return: number of read characters * -1 if break * -2 if timed out */ int readline (char * prompt) { char *p = console_buffer; int n = 0; /* buffer index */ int plen = 0; /* prompt length */ int col; /* output column cnt */ char c; /* print prompt */ if (prompt) { plen = strlen (prompt); puts (prompt); } col = plen; for (;;) { //WATCHDOG_RESET(); /* Trigger watchdog, if needed */ c = getc(); /* * Special character handling */ switch (c) { case '\r': /* Enter */ case '\n': *p = '\0'; puts ("\r\n"); return (p - console_buffer); case '\0': /* nul */ continue; case 0x03: /* ^C - break */ console_buffer[0] = '\0'; /* discard input */ return (-1); case 0x15: /* ^U - erase line */ while (col > plen) { puts (erase_seq); --col; } p = console_buffer; n = 0; continue; case 0x17: /* ^W - erase word */ p=delete_char(console_buffer, p, &col, &n, plen); while ((n > 0) && (*p != ' ')) { p=delete_char(console_buffer, p, &col, &n, plen); } continue; case 0x08: /* ^H - backspace */ case 0x7F: /* DEL - backspace */ p=delete_char(console_buffer, p, &col, &n, plen); continue; default: /* * Must be a normal character then */ if (n < 256-2) { if (c == '\t') { /* expand TABs */ puts (tab_seq+(col&07)); col += 8 - (col&07); } else { ++col; /* echo input */ putc (c); } *p++ = c; ++n; } else { /* Buffer full */ putc ('\a'); } } } }
首先输出一个prompt,也就是字符界面的提示信息,这是个字符串可以自己定义
在for循环里面循环getc获得串口输入,判断输入字符做相应的处理,如果是\n则return
相关文章推荐
- jsp实现的数据库模糊搜索(可以自己设定匹配字符个数)
- 请教一个KEYDOWN的处理,想实现输入符A,但面界面上出现B(想实现在英文键盘输入其它语言的字符),重载了CEdit,但不会没出现我要的效果?
- 自己动手实现操作系统引导程序(OS bootloader)——借助QEMU/GDB/losetup/dd等工具
- linux Fedora core 6 字符界面修改分辨率实现宽屏显示
- 替换GINA.DLL实现自己的登陆界面
- 替换GINA.DLL实现自己的登陆界面
- 基于hibernate的基本dao接口与实现 及 sql模糊查询特殊字符处理 及 struts 特殊字符在界面正常回显
- 自己实现的一个字符串分割截取函数,以及查找指定字符
- 问题1:java中没有实现这种“byte a = 0xB2 --> String b = “B2””转换的简单实现需要自己实现。 答:自己编写的转换函数,思路将byte的高低4位分开,分别转换为对应的字符然后合成返回的字符串。 java 代码 1.
- 替换GINA.DLL实现自己的登陆界面[酷狗] 转
- 为在telnet自己TCP服务器程序的界面上实现shell一样的自动补齐和历史记录的功能。
- 替换GINA.DLL实现自己的登陆界面 http://www.xiaozhou.net/ReadNews.asp?NewsID=569
- 为在telnet自己TCP服务器程序的界面上实现shell一样的自动补齐和历史记录的功能
- JQuery实现个性化,可以拖拽 自定义自己的界面(四)
- 让自己的程序界面实现XP风格的两种方法
- Windows 界面:具有“删除元素”和“按列进行字符比较排序”的 CListCtrol 继承类 CListCtrolEx 的实现
- JQuery实现个性化,可以拖拽 自定义自己的界面(二)
- 自己用awt实现界面输入数据保存到Excel文件中
- linux在字符界面中,如何实现多用户多任务?