⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 genie-shell4ucosii.txt

📁 lwip在ucos上的移植
💻 TXT
字号:
	Genie shell for UCOS II 详细说明及使用指南
              作者:杨晔 yangye@163.net
	       2003-2-19     ver0.1

 Genie shell目前是一个UART 串口shell,也就是只能通过UART远程登录的方式使用。

  1。Genie shell与硬件相关的部份有两个函数:
    CommRxIntEn(UART0);	       初始化串口硬件

    CommGetChar(RS485,0,&err); 从串口接收一个字符,这个串口最好是中断方式的,否则用轮询方式Genie shell就会占用全部cpu。
   以上两个函数由用户根据自己的串口去实现。

  2。Genie shell本身分为两大部份:shell task部份和Command命令部份

     2.1 shell task部份:

	 void shelltask(void);
      应该由用户在ucosII中用OSTaskCreate建立的task。首先做以下初始化工作:
	    CommRxIntEn(UART0);     //初始化串口
	     InitCommands();        //初始化命令对象数组
	    CommandBuf[0] = '\0';
      然后进入无限循环(for(;;))中,用CommGetChar函数接收输入字符。对不同的输入字符分别做不同的处理:
        退格键:      光标回退,删除显示的字符,光标再回退

	回车键:      命令输入结束,调用CommandAnalys函数分析命令格式和参数,			    CommandAnalys会返回命令号,然后根据命令号从ShellComms			    对象数组中找到相应的命令对象,然后执行这个命令对象的			    方法(也就是命令函数),命令参数也会传递过去。

	普通合法字符:先显示(printf),再放入CommandBuf中等待分析

        非法字符:    不接收输入。
      此外还做了一些简化,如不接收连续两个空格,不接收行首的空格。嵌入式系统嘛,简单一些。       


         INT8U CommandAnalys(char *Buf);
	对用户输入的字符串做分析,根据字符串的内容,分析出命令名称,命令参数。
        

	2.2 Command命令部份
	Genie Shell 把每个命令看成一个对象,在c语言中实际是一个带函数指针的结构体:
	typedef struct{
	  int num;         //命令号
	  char *name;      //命令名称(目前的设定是小于20个字符)
	  INT8U (*CommandFunc)(INT8U argc,char **argv);  //命令函数
	}command; 

      每条命令对应一个command对象,所有的命令对象都存放在command数组ShellComms[MAX_COMMAND_NUM]中。MAX_COMMAND_NUM是总的命令个数,用户应该根据自己shell的命令个数设置,注意MAX_COMMAND_NUM应该正好等于总的命令个数,不能多也不能少。
       用户增加自己的命令时,首先把在commands.h中把MAX_COMMAND_NUM加1;然后在commands.c中InitCommands()函数里增加如下语句:
	ShellComms[i].num = 0;
	ShellComms[i].name = "hello";
	ShellComms[i].CommandFunc = HelloFunc;
       其中的i和具体值由用户根据情况决定。最后实现一个名字和ShellComms[i].CommandFunc相同的命令函数就可以了。请参照commands.c中已经有的两个例子。


    3. 目前的例子
   目前的genie shell带有两条命令,hostname命令在屏幕上打印一句话。hello 命令可以带多个参数,如hello a b c d,回车后会显示:
      hello,I am Genie
      your argv is:
      a
      b
      c
      d

    4。对回车键和退格键的补充
   我在ez80单片机上运行genie shell并用超级终端连接时,回车键和退格键的值分别是‘13’和‘8’,但在skyeye下运行时,用这两个值又不行了,必须使用‘10’和‘127’来代表回车和退格,这点请注意。


  

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -