USMART 函数错误解决方法

身为电子工程师,看了马斯克的星舰飞船,真是太帅了;

深知一个良好的测试环境对产品性能的影响,对工作效率的提升。

小资源MCU调试代码的工具USMART 使用起来。

移植的文章网上有很多,但是对移植过程中使用错误的文章却很少,我把我使用这个组件中遇到的问题分享一下。

问题

移植完成后使用系统命令 提示 函数错误

解决过程

1:找到源码中函数错误的位置

void usmart_scan(void)
{
	u8 sta,len;  
	if(ucUSART1_ReceiveMessageNumber)//´®¿Ú½ÓÊÕÍê³É£¿
	{					   
		len=ucUSART1ReceiveBufferLength[ucUSART1ReadBufferIndex];	//µÃµ½´Ë´Î½ÓÊÕµ½µÄÊý¾Ý³¤¶È
		ucUSART1ReceiveBuffer[ucUSART1ReadBufferIndex][len]='\0';	//ÔÚĩβ¼ÓÈë½áÊø·û.        
		sta=usmart_dev.cmd_rec(ucUSART1ReceiveBuffer[ucUSART1ReadBufferIndex]);//µÃµ½º¯Êý¸÷¸öÐÅÏ¢
		if(sta==0)usmart_dev.exe();	//Ö´Ðк¯Êý 
		else 
		{  
			len=usmart_sys_cmd_exe(ucUSART1ReceiveBuffer[ucUSART1ReadBufferIndex]);
			if(len!=USMART_FUNCERR)sta=len;
			if(sta)
			{
				switch(sta)
				{
					case USMART_FUNCERR:
						printf("º¯Êý´íÎó!\r\n");   			
						break;	
					case USMART_PARMERR:
						printf("²ÎÊý´íÎó!\r\n");   			
						break;				
					case USMART_PARMOVER:
						printf("²ÎÊýÌ«¶à!\r\n");   			
						break;		
					case USMART_NOFUNCFIND:
						printf("δÕÒµ½Æ¥ÅäµÄº¯Êý!\r\n");   			
						break;		
				}
			}
		}
		USART1ReceiveDataReadDone(  );//״̬¼Ä´æÆ÷Çå¿Õ	    
	}
}

2:单步调试

(1):串口接收正确;

(2):usmart_dev.cmd_rec 返回1,进一步查看


u8 usmart_cmd_rec(u8*str) 
{
	u8 sta,i,rval;//״̬	 
	u8 rpnum,spnum;
	u8 rfname[MAX_FNAME_LEN];//ÔÝ´æ¿Õ¼ä,ÓÃÓÚ´æ·Å½ÓÊÕµ½µÄº¯ÊýÃû  
	u8 sfname[MAX_FNAME_LEN];//´æ·Å±¾µØº¯ÊýÃû
	sta=usmart_get_fname(str,rfname,&rpnum,&rval);//µÃµ½½ÓÊÕµ½µÄÊý¾ÝµÄº¯ÊýÃû¼°²ÎÊý¸öÊý	  
	if(sta)return sta;//´íÎó
	for(i=0;i<usmart_dev.fnum;i++)
	{
		sta=usmart_get_fname((u8*)usmart_dev.funs[i].name,sfname,&spnum,&rval);//µÃµ½±¾µØº¯ÊýÃû¼°²ÎÊý¸öÊý
		if(sta)return sta;//±¾µØ½âÎöÓÐÎó	  
		if(usmart_strcmp(sfname,rfname)==0)//ÏàµÈ
		{
			if(spnum>rpnum)return USMART_PARMERR;//²ÎÊý´íÎó(ÊäÈë²ÎÊý±ÈÔ´º¯Êý²ÎÊýÉÙ)
			usmart_dev.id=i;//¼Ç¼º¯ÊýID.
			break;//Ìø³ö.
		}	
	}
	if(i==usmart_dev.fnum)return USMART_NOFUNCFIND;	//δÕÒµ½Æ¥ÅäµÄº¯Êý
 	sta=usmart_get_fparam(str,&i);					//µÃµ½º¯Êý²ÎÊý¸öÊý	
	if(sta)return sta;								//·µ»Ø´íÎó
	usmart_dev.pnum=i;								//²ÎÊý¸öÊý¼Ç¼
    return USMART_OK;
}

if(sta)return sta;//错误

发现这个返回值错误。

进一步查看 sta=usmart_get_fname(str,rfname,&rpnum,&rval); 这个函数

while(1)
	{
		if(*strtemp==0)
		{
			res=USMART_FUNCERR;//º¯Êý´íÎó
			break;
		}else if(*strtemp=='('&&nchar==0)fover++;//À¨ºÅÉî¶ÈÔö¼ÓÒ»¼¶	 
		else if(*strtemp==')'&&nchar==0)
		{
			if(fover)fover--;
			else res=USMART_FUNCERR;//´íÎó½áÊø,ûÊÕµ½'('
			if(fover==0)break;//µ½Ä©Î²ÁË,Í˳ö	    
		}else if(*strtemp=='"')nchar=!nchar;

发现这个函数便携的有问题呀,只要命令里面没有()括号就会报错,这是想到难道我下载的源码有问题,官方下载源码对比查看,源码也是这样写的,那不对呀。

返回 usmart_dev.cmd_rec 查看才发现 原来系统命令与函数调用代码分了2个支路处理

 这里是处理系统命令的。

 进到这里看到,发送系统命令的时候不需要 回车与换行

重新测试

 正常了。

后级2023-08-14  函数错误

这次是由于输入法状态导致,切换到下图输入法后正常。

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值