shell原理和问答机制引入

《朱老师物联网大讲堂》学习笔记

学习地址:www.zhulaoshi.org


(1).

shell,
壳,
用户接口,
一种实现和调用分离的实现,

操作界面,是操作系统提供的shell,


linux中脚本编程,windows中的批处理都是shell编程,

cmdline是一种shell,GUI也是一种shell,
举个例子,创建一个文件,适合使用GUI,但是创建1000个文件呢?这就适合使用cmdline了,


cmdline运行原理,
while(1)
{
 消息接受;
 消息解析;
 命令执行;
}

uboot是一个裸机程序构成的shell,
人机交互必须要有shell,
家用路由器配置界面,就是路由器内置的一个嵌入式web服务器形式的shell,


(2).

版本1

#include <stdio.h>

#define MAX_LINE_LENGTH	256	//命令行长度

int main( void )
{	
	char str[ MAX_LINE_LENGTH ]; 	//用来存放用户输入的命令内容

	while( 1 ){
		//打印命令行提示符,这里不要加换行符哦~
		printf("YQ");
	
		memset( str, 0, sizeof( str ) );
	
		//获取用户输入的命令,
		scanf("%s", str );
	
		//解析用户输入的命令,暂时没有
	
		//处理用户输入命令,
		printf(" %s \n", str);
	}
	return 0;
}

版本2,定义命令集,

#include <stdio.h>

#define MAX_LINE_LENGTH	256	//命令行长度
#define MAX_CMD_NUM 3	//最多支持的命令数量

//定义一些标准命令
#define	led "led"
#define lcd	"lcd"
#define	pwm	"pwm"

char g_cmdset[ MAX_CMD_NUM ][ MAX_LINE_LENGTH];

void init_set( void );

int main( void )
{	
	int i = 0;
	char str[ MAX_LINE_LENGTH ]; 	//用来存放用户输入的命令内容

	init_cmd_set();
	
	while( 1 ){
		//打印命令行提示符,这里不要加换行符哦~
		printf("YQ");
	
		memset( str, 0, sizeof( str ) );
	
		//获取用户输入的命令,
		scanf("%s", str );
	
		//解析用户输入的命令,暂时没有
		for( i = 0; i<MAX_CMD_NUM; i++ )
		{
			if(!strcmp( str, g_cmdset[ i ] ) ); //此处比较相同返回0,所以要取反
			{
				//相等,就说明找到了命令,去执行命令所对应的命令,
				//处理用户输入命令,
				printf(" %s 是合法的\n", str);	
				
				break;
			}
		}
		
		if( i>= CMD_NUM )
		{
			//说明没有找到这个命令
			printf("%s不是一个合法命令,请重新输入\n",str );
		}

	}
	return 0;
}

//初始化命令列表
static void init_set( void )
{
	memset( g_cmdset, 0, sizeof(g_cmdset) );
	strcpy( g_cmdset[ 0 ], led );
	strcpy( g_cmdset[ 1 ], lcd );
	strcpy( g_cmdset[ 2 ], pwm );
	
	
}







(3).
移植到开发板上,
项目源自uart那章,


涉及到自己写stdio.c,
包含各种输入输出的函数,
由于标准库中的输入输出不是输入到串口中的,所以我们需要自己写,哪怕具体实现一样,




回车在windows和linux中不一样,


注意3个功能的细节,
1.命令回显,
2.按回车键问题,
3.按退格键问题,




start.s中,由于代码简单,不需要重定位,






(4).
//cmd.c,命令解析,
int cmd_parser( char *str );//解析命令,
void cmd_exec( char *str ); //执行命令
涉及很多的字符串函数,


可以直接从内核中学习函数的实现,比如字符串,




(5).
添加第一个命令,
led是一级命令,on,off是二级命令,
































  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值