210学习日记(5)_简单命令的实现.doc

来源:互联网 发布:手机自动挂机赚钱软件 编辑:程序博客网 时间:2024/05/18 03:50

210学习日记(5)

--简单命令的实现

这章实在是没有什么好讲的,大家直接分析代码就能够明白,都是些硬件无关的程序,代码我放到了"Tiny210学习日记_代码"目录下了,名为"4_command"

分析过u-boot的朋友们,应该对readline()函数不陌生吧,我这里将实现一个简化的readline()函数,实现在终端显示输入提示符,并从终端获取命令,实现过程如下:

int readline (const char *const prompt)

{

char console_buffer[CFG_CBSIZE]; /* 定义一个缓存数组,用于接收终端输入的字符串 */

char *buf = console_buffer;          /* 定义个指针,指向上面的数组 */

int argc = 0;                       /* 用于指明命令参数的个数 */

int state = 0;                       /* 状态标志 */

puts(prompt);                      /* 显示输入提示符:WY_BOOT #  */

gets(console_buffer);                /* 从终端获取字符串,并存入缓存数组 */

while (*buf)/*while实现对终端输入的命令的解析,将命令,参数拆分,分别存入argv[n]*/

{

if (*buf != ' ' && state == 0)

{

argv[argc++] = buf;

state = 1;

}

if (*buf == ' ' && state == 1)

{

*buf = '\0';

state = 0;

}

buf++;

}

return argc;  /* 返回参数的个数 */

}

一下是大家更加熟悉的u-boot中的run_command函数的简化版本,实现过程如下,只是将argv[0]指向的数组和另外一个数组进行比较,如果相等,则执行该if分支里面的函数。strcmp()函数的实现也非常简单,我已经在共享的代码中给出,请大家自行分析之。

void run_command(int argc, char * argv[])

{

if (strcmp(argv[0], "help") == 0)

{

do_help(argc, argv);

return;

}

if (strcmp(argv[0], "md") == 0)

{

do_md(argc, argv);

return;

}

if (strcmp(argv[0], "mw") == 0)

{

do_mw(argc, argv);

return;

}

if(argc >= 1)

wy_printf("Unknown command '%s' - try 'help' \n",argv[0]);

return;

}

注意:

本章实现的命令几乎算是和硬件无关的了,以后每当写完一个具体外设的裸板程序的时候,会添加相应命令的支持,比如nand readnand write等等函数。添加的过程其实就是在run_command()函数里面多添加一个strcmp()函数的调用,然后用if判断其返回值,若相等,则调用具体的命令执行函数do_XXX

注:

如有问题,请到韦东山LINUX视频讨论群里面,我们一起讨论学习,或者加我QQ317312379