#include "usmart.h"
|
#include "uart.h"
|
|
|
|
//////////////////////////////////////////////////////////////////////////////////
|
//±¾³ÌÐòÖ»¹©Ñ§Ï°Ê¹Óã¬Î´¾×÷ÕßÐí¿É£¬²»µÃÓÃÓÚÆäËüÈκÎÓÃ;
|
//ALIENTEK STM32¿ª·¢°å
|
//ÕýµãÔ×Ó@ALIENTEK
|
//¼¼ÊõÂÛ̳:www.openedv.com
|
//°æ±¾£ºV3.1
|
//°æÈ¨ËùÓУ¬µÁ°æ±Ø¾¿¡£
|
//Copyright(C) ÕýµãÔ×Ó 2011-2021
|
//All rights reserved
|
//********************************************************************************
|
//Éý¼¶ËµÃ÷
|
//V1.4
|
//Ôö¼ÓÁ˶ԲÎÊýΪstringÀàÐ͵ĺ¯ÊýµÄÖ§³Ö.ÊÊÓ÷¶Î§´ó´óÌá¸ß.
|
//ÓÅ»¯ÁËÄÚ´æÕ¼ÓÃ,¾²Ì¬ÄÚ´æÕ¼ÓÃΪ79¸ö×Ö½Ú@10¸ö²ÎÊý.¶¯Ì¬ÊÊÓ¦Êý×Ö¼°×Ö·û´®³¤¶È
|
//V2.0
|
//1,ÐÞ¸ÄÁËlistÖ¸Áî,´òÓ¡º¯ÊýµÄÍêÕû±í´ïʽ.
|
//2,Ôö¼ÓÁËidÖ¸Áî,´òӡÿ¸öº¯ÊýµÄÈë¿ÚµØÖ·.
|
//3,ÐÞ¸ÄÁ˲ÎÊýÆ¥Åä,Ö§³Öº¯Êý²ÎÊýµÄµ÷ÓÃ(ÊäÈëÈë¿ÚµØÖ·).
|
//4,Ôö¼ÓÁ˺¯ÊýÃû³¤¶Èºê¶¨Òå.
|
//V2.1 20110707
|
//1,Ôö¼Ódec,hexÁ½¸öÖ¸Áî,ÓÃÓÚÉèÖòÎÊýÏÔʾ½øÖÆ,¼°Ö´ÐнøÖÆ×ª»».
|
//×¢:µ±dec,hex²»´ø²ÎÊýµÄʱºò,¼´É趨ÏÔʾ²ÎÊý½øÖÆ.µ±ºó¸ú²ÎÊýµÄʱºò,¼´Ö´ÐнøÖÆ×ª»».
|
//Èç:"dec 0XFF" Ôò»á½«0XFFתΪ255,ÓÉ´®¿Ú·µ»Ø.
|
//Èç:"hex 100" Ôò»á½«100תΪ0X64,ÓÉ´®¿Ú·µ»Ø
|
//2,ÐÂÔöusmart_get_cmdnameº¯Êý,ÓÃÓÚ»ñȡָÁîÃû×Ö.
|
//V2.2 20110726
|
//1,ÐÞÕýÁËvoidÀàÐͲÎÊýµÄ²ÎÊýͳ¼Æ´íÎó.
|
//2,ÐÞ¸ÄÊý¾ÝÏÔʾ¸ñʽĬÈÏΪ16½øÖÆ.
|
//V2.3 20110815
|
//1,È¥µôÁ˺¯ÊýÃûºó±ØÐë¸ú"("µÄÏÞÖÆ.
|
//2,ÐÞÕýÁË×Ö·û´®²ÎÊýÖв»ÄÜÓÐ"("µÄbug.
|
//3,ÐÞ¸ÄÁ˺¯ÊýĬÈÏÏÔʾ²ÎÊý¸ñʽµÄÐ޸ķ½Ê½.
|
//V2.4 20110905
|
//1,ÐÞ¸ÄÁËusmart_get_cmdnameº¯Êý,Ôö¼Ó×î´ó²ÎÊý³¤¶ÈÏÞÖÆ.±ÜÃâÁËÊäÈë´íÎó²ÎÊýʱµÄËÀ»úÏÖÏó.
|
//2,Ôö¼ÓUSMART_ENTIM4_SCANºê¶¨Òå,ÓÃÓÚÅäÖÃÊÇ·ñʹÓÃTIM2¶¨Ê±Ö´ÐÐscanº¯Êý.
|
//V2.5 20110930
|
//1,ÐÞ¸Äusmart_initº¯ÊýΪvoid usmart_init(u8 sysclk),¿ÉÒÔ¸ù¾ÝϵͳƵÂÊ×Ô¶¯É趨ɨÃèʱ¼ä.(¹Ì¶¨100ms)
|
//2,È¥µôÁËusmart_initº¯ÊýÖеÄuart_initº¯Êý,´®¿Ú³õʼ»¯±ØÐëÔÚÍⲿ³õʼ»¯,·½±ãÓû§×ÔÐйÜÀí.
|
//V2.6 20111009
|
//1,Ôö¼ÓÁËread_addrºÍwrite_addrÁ½¸öº¯Êý.¿ÉÒÔÀûÓÃÕâÁ½¸öº¯Êý¶ÁдÄÚ²¿ÈÎÒâµØÖ·(±ØÐëÊÇÓÐЧµØÖ·).¸ü¼Ó·½±ãµ÷ÊÔ.
|
//2,read_addrºÍwrite_addrÁ½¸öº¯Êý¿ÉÒÔͨ¹ýÉèÖÃUSMART_USE_WRFUNSΪÀ´Ê¹Äܺ͹رÕ.
|
//3,ÐÞ¸ÄÁËusmart_strcmp,ʹÆä¹æ·¶»¯.
|
//V2.7 20111024
|
//1,ÐÞÕýÁË·µ»ØÖµ16½øÖÆÏÔʾʱ²»»»ÐеÄbug.
|
//2,Ôö¼ÓÁ˺¯ÊýÊÇ·ñÓзµ»ØÖµµÄÅжÏ,Èç¹ûûÓзµ»ØÖµ,Ôò²»»áÏÔʾ.Óзµ»ØÖµÊ±²ÅÏÔʾÆä·µ»ØÖµ.
|
//V2.8 20111116
|
//1,ÐÞÕýÁËlistµÈ²»´ø²ÎÊýµÄÖ¸Áî·¢Ëͺó¿ÉÄܵ¼ÖÂËÀ»úµÄbug.
|
//V2.9 20120917
|
//1,ÐÞ¸ÄÁËÐÎÈ磺void*xxx(void)ÀàÐͺ¯Êý²»ÄÜʶ±ðµÄbug¡£
|
//V3.0 20130425
|
//1,ÐÂÔöÁË×Ö·û´®²ÎÊý¶ÔתÒå·ûµÄÖ§³Ö¡£
|
//V3.1 20131120
|
//1,Ôö¼ÓruntimeϵͳָÁî,¿ÉÒÔÓÃÓÚͳ¼Æº¯ÊýÖ´ÐÐʱ¼ä.
|
//Ó÷¨:
|
//·¢ËÍ:runtime 1 ,Ôò¿ªÆôº¯ÊýÖ´ÐÐʱ¼äͳ¼Æ¹¦ÄÜ
|
//·¢ËÍ:runtime 0 ,Ôò¹Ø±Õº¯ÊýÖ´ÐÐʱ¼äͳ¼Æ¹¦ÄÜ
|
///runtimeͳ¼Æ¹¦ÄÜ,±ØÐëÉèÖÃ:USMART_ENTIMX_SCAN Ϊ1,²Å¿ÉÒÔʹÓÃ!!
|
/////////////////////////////////////////////////////////////////////////////////////
|
//ϵͳÃüÁî
|
u8 *sys_cmd_tab[]=
|
{
|
"?",
|
"help",
|
"list",
|
"id",
|
"hex",
|
"dec",
|
"runtime",
|
};
|
//´¦ÀíϵͳָÁî
|
//0,³É¹¦´¦Àí;ÆäËû,´íÎó´úÂë;
|
u8 usmart_sys_cmd_exe(u8 *str)
|
{
|
u8 i;
|
u8 sfname[MAX_FNAME_LEN];//´æ·Å±¾µØº¯ÊýÃû
|
u8 pnum;
|
u8 rval;
|
u32 res;
|
res=usmart_get_cmdname(str,sfname,&i,MAX_FNAME_LEN);//µÃµ½Ö¸Áî¼°Ö¸Á¶È
|
if(res)return USMART_FUNCERR;//´íÎóµÄÖ¸Áî
|
str+=i;
|
for(i=0;i<sizeof(sys_cmd_tab)/4;i++)//Ö§³ÖµÄϵͳָÁî
|
{
|
if(usmart_strcmp(sfname,sys_cmd_tab[i])==0)break;
|
}
|
switch(i)
|
{
|
case 0:
|
case 1://°ïÖúÖ¸Áî
|
printf("\r\n");
|
#if USMART_USE_HELP
|
printf("------------------------USMART V3.1------------------------ \r\n");
|
printf(" USMARTÊÇÓÉALIENTEK¿ª·¢µÄÒ»¸öÁéÇɵĴ®¿Úµ÷ÊÔ»¥½»×é¼þ,ͨ¹ý \r\n");
|
printf("Ëü,Äã¿ÉÒÔͨ¹ý´®¿ÚÖúÊÖµ÷ÓóÌÐòÀïÃæµÄÈκκ¯Êý,²¢Ö´ÐÐ.Òò´Ë,Äã¿É\r\n");
|
printf("ÒÔËæÒâ¸ü¸Äº¯ÊýµÄÊäÈë²ÎÊý(Ö§³ÖÊý×Ö(10/16½øÖÆ)¡¢×Ö·û´®¡¢º¯ÊýÈë\r\n");
|
printf("¿ÚµØÖ·µÈ×÷Ϊ²ÎÊý),µ¥¸öº¯Êý×î¶àÖ§³Ö10¸öÊäÈë²ÎÊý,²¢Ö§³Öº¯Êý·µ \r\n");
|
printf("»ØÖµÏÔʾ.ÐÂÔö²ÎÊýÏÔʾ½øÖÆÉèÖù¦ÄÜ,ÐÂÔö½øÖÆ×ª»»¹¦ÄÜ.\r\n");
|
printf("¼¼ÊõÖ§³Ö:www.openedv.com\r\n");
|
printf("USMARTÓÐ7¸öϵͳÃüÁî:\r\n");
|
printf("?: »ñÈ¡°ïÖúÐÅÏ¢\r\n");
|
printf("help: »ñÈ¡°ïÖúÐÅÏ¢\r\n");
|
printf("list: ¿ÉÓõĺ¯ÊýÁбí\r\n");
|
printf("id: ¿ÉÓú¯ÊýµÄIDÁбí\r\n");
|
printf("hex: ²ÎÊý16½øÖÆÏÔʾ,ºó¸ú¿Õ¸ñ+Êý×Ö¼´Ö´ÐнøÖÆ×ª»»\r\n");
|
printf("dec: ²ÎÊý10½øÖÆÏÔʾ,ºó¸ú¿Õ¸ñ+Êý×Ö¼´Ö´ÐнøÖÆ×ª»»\r\n");
|
printf("runtime:1,¿ªÆôº¯ÊýÔËÐмÆÊ±;0,¹Ø±Õº¯ÊýÔËÐмÆÊ±;\r\n");
|
printf("Çë°´ÕÕ³ÌÐò±àд¸ñʽÊäÈ뺯ÊýÃû¼°²ÎÊý²¢ÒԻسµ¼ü½áÊø.\r\n");
|
printf("--------------------------ALIENTEK------------------------- \r\n");
|
#else
|
printf("Ö¸ÁîʧЧ\r\n");
|
#endif
|
break;
|
case 2://²éѯָÁî
|
printf("\r\n");
|
printf("-------------------------º¯ÊýÇåµ¥--------------------------- \r\n");
|
for(i=0;i<usmart_dev.fnum;i++)printf("%s\r\n",usmart_dev.funs[i].name);
|
printf("\r\n");
|
break;
|
case 3://²éѯID
|
printf("\r\n");
|
printf("-------------------------º¯Êý ID --------------------------- \r\n");
|
for(i=0;i<usmart_dev.fnum;i++)
|
{
|
usmart_get_fname((u8*)usmart_dev.funs[i].name,sfname,&pnum,&rval);//µÃµ½±¾µØº¯ÊýÃû
|
printf("%s id is:\r\n0X%08X\r\n",sfname,usmart_dev.funs[i].func); //ÏÔʾID
|
}
|
printf("\r\n");
|
break;
|
case 4://hexÖ¸Áî
|
printf("\r\n");
|
usmart_get_aparm(str,sfname,&i);
|
if(i==0)//²ÎÊýÕý³£
|
{
|
i=usmart_str2num(sfname,&res); //¼Ç¼¸Ã²ÎÊý
|
if(i==0) //½øÖÆ×ª»»¹¦ÄÜ
|
{
|
printf("HEX:0X%X\r\n",res); //תΪ16½øÖÆ
|
}else if(i!=4)return USMART_PARMERR;//²ÎÊý´íÎó.
|
else //²ÎÊýÏÔʾÉ趨¹¦ÄÜ
|
{
|
printf("16½øÖƲÎÊýÏÔʾ!\r\n");
|
usmart_dev.sptype=SP_TYPE_HEX;
|
}
|
|
}else return USMART_PARMERR; //²ÎÊý´íÎó.
|
printf("\r\n");
|
break;
|
case 5://decÖ¸Áî
|
printf("\r\n");
|
usmart_get_aparm(str,sfname,&i);
|
if(i==0)//²ÎÊýÕý³£
|
{
|
i=usmart_str2num(sfname,&res); //¼Ç¼¸Ã²ÎÊý
|
if(i==0) //½øÖÆ×ª»»¹¦ÄÜ
|
{
|
printf("DEC:%lu\r\n",res); //תΪ10½øÖÆ
|
}else if(i!=4)return USMART_PARMERR;//²ÎÊý´íÎó.
|
else //²ÎÊýÏÔʾÉ趨¹¦ÄÜ
|
{
|
printf("10½øÖƲÎÊýÏÔʾ!\r\n");
|
usmart_dev.sptype=SP_TYPE_DEC;
|
}
|
|
}else return USMART_PARMERR; //²ÎÊý´íÎó.
|
printf("\r\n");
|
break;
|
case 6://runtimeÖ¸Áî,ÉèÖÃÊÇ·ñÏÔʾº¯ÊýÖ´ÐÐʱ¼ä
|
printf("\r\n");
|
usmart_get_aparm(str,sfname,&i);
|
if(i==0)//²ÎÊýÕý³£
|
{
|
i=usmart_str2num(sfname,&res); //¼Ç¼¸Ã²ÎÊý
|
if(i==0) //¶Áȡָ¶¨µØÖ·Êý¾Ý¹¦ÄÜ
|
{
|
if(USMART_ENTIMX_SCAN==0)printf("\r\nError! \r\nTo EN RunTime function,Please set USMART_ENTIMX_SCAN = 1 first!\r\n");//±¨´í
|
else
|
{
|
usmart_dev.runtimeflag=res;
|
if(usmart_dev.runtimeflag)printf("Run Time Calculation ON\r\n");
|
else printf("Run Time Calculation OFF\r\n");
|
}
|
}else return USMART_PARMERR; //δ´ø²ÎÊý,»òÕß²ÎÊý´íÎó
|
}else return USMART_PARMERR; //²ÎÊý´íÎó.
|
printf("\r\n");
|
break;
|
default://·Ç·¨Ö¸Áî
|
return USMART_FUNCERR;
|
}
|
return 0;
|
}
|
////////////////////////////////////////////////////////////////////////////////////////
|
//ÒÆÖ²×¢Òâ:±¾ÀýÊÇÒÔstm32ΪÀý,Èç¹ûÒªÒÆÖ²µ½ÆäËûmcu,Çë×öÏàÓ¦ÐÞ¸Ä.
|
//usmart_reset_runtime,Çå³ýº¯ÊýÔËÐÐʱ¼ä,Á¬Í¬¶¨Ê±Æ÷µÄ¼ÆÊý¼Ä´æÆ÷ÒÔ¼°±ê־λһÆðÇåÁã.²¢ÉèÖÃÖØ×°ÔØÖµÎª×î´ó,ÒÔ×î´óÏ޶ȵÄÑÓ³¤¼ÆÊ±Ê±¼ä.
|
//usmart_get_runtime,»ñÈ¡º¯ÊýÔËÐÐʱ¼ä,ͨ¹ý¶ÁÈ¡CNTÖµ»ñÈ¡,ÓÉÓÚusmartÊÇͨ¹ýÖжϵ÷Óõĺ¯Êý,ËùÒÔ¶¨Ê±Æ÷Öжϲ»ÔÙÓÐЧ,´Ëʱ×î´óÏÞ¶È
|
//Ö»ÄÜͳ¼Æ2´ÎCNTµÄÖµ,Ò²¾ÍÊÇÇåÁãºó+Òç³öÒ»´Î,µ±Òç³ö³¬¹ý2´Î,û·¨´¦Àí,ËùÒÔ×î´óÑÓʱ,¿ØÖÆÔÚ:2*¼ÆÊýÆ÷CNT*0.1ms.¶ÔSTM32À´Ëµ,ÊÇ:13.1s×óÓÒ
|
//ÆäËûµÄ:TIM4_IRQHandlerºÍTimer2_Init,ÐèÒª¸ù¾ÝMCUÌØµã×ÔÐÐÐÞ¸Ä.È·±£¼ÆÊýÆ÷¼ÆÊýƵÂÊΪ:10Khz¼´¿É.ÁíÍâ,¶¨Ê±Æ÷²»Òª¿ªÆô×Ô¶¯ÖØ×°Ôع¦ÄÜ!!
|
|
#if USMART_ENTIMX_SCAN==1
|
//¸´Î»runtime
|
//ÐèÒª¸ù¾ÝËùÒÆÖ²µ½µÄMCUµÄ¶¨Ê±Æ÷²ÎÊý½øÐÐÐÞ¸Ä
|
void usmart_reset_runtime(void)
|
{
|
// TIM_ClearFlag(TIM4,TIM_FLAG_Update);//Çå³ýÖжϱê־λ
|
// TIM_SetAutoreload(TIM4,0XFFFF);//½«ÖØ×°ÔØÖµÉèÖõ½×î´ó
|
// TIM_SetCounter(TIM4,0); //Çå¿Õ¶¨Ê±Æ÷µÄCNT
|
// usmart_dev.runtime=0;
|
}
|
//»ñµÃruntimeʱ¼ä
|
//·µ»ØÖµ:Ö´ÐÐʱ¼ä,µ¥Î»:0.1ms,×î´óÑÓʱʱ¼äΪ¶¨Ê±Æ÷CNTÖµµÄ2±¶*0.1ms
|
//ÐèÒª¸ù¾ÝËùÒÆÖ²µ½µÄMCUµÄ¶¨Ê±Æ÷²ÎÊý½øÐÐÐÞ¸Ä
|
u32 usmart_get_runtime(void)
|
{
|
// if(TIM_GetFlagStatus(TIM4,TIM_FLAG_Update)==SET)//ÔÚÔËÐÐÆÚ¼ä,²úÉúÁ˶¨Ê±Æ÷Òç³ö
|
// {
|
// usmart_dev.runtime+=0XFFFF;
|
// }
|
// usmart_dev.runtime+=TIM_GetCounter(TIM4);
|
return usmart_dev.runtime; //·µ»Ø¼ÆÊýÖµ
|
}
|
//ÏÂÃæÕâÁ½¸öº¯Êý,·ÇUSMARTº¯Êý,·Åµ½ÕâÀï,½ö½ö·½±ãÒÆÖ².
|
//¶¨Ê±Æ÷4ÖжϷþÎñ³ÌÐò
|
//void TIM4_IRQHandler(void)
|
//{
|
// if(TIM_GetITStatus(TIM4,TIM_IT_Update)==SET)//Òç³öÖжÏ
|
// {
|
// usmart_dev.scan(); //Ö´ÐÐusmartɨÃè
|
// TIM_SetCounter(TIM4,0); //Çå¿Õ¶¨Ê±Æ÷µÄCNT
|
// TIM_SetAutoreload(TIM4,1000);//»Ö¸´ÔÀ´µÄÉèÖÃ
|
// }
|
// TIM_ClearITPendingBit(TIM4,TIM_IT_Update); //Çå³ýÖжϱê־λ
|
//}
|
|
//ʹÄܶ¨Ê±Æ÷4,ʹÄÜÖжÏ.
|
void Timer4_Init(u16 arr,u16 psc)
|
{
|
// TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;
|
// NVIC_InitTypeDef NVIC_InitStructure;
|
|
// RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM4, ENABLE); //TIM4ʱÖÓʹÄÜ
|
//
|
// //TIM4³õʼ»¯ÉèÖÃ
|
// TIM_TimeBaseStructure.TIM_Period = arr; //ÉèÖÃÔÚÏÂÒ»¸ö¸üÐÂʼþ×°Èë»î¶¯µÄ×Ô¶¯ÖØ×°ÔؼĴæÆ÷ÖÜÆÚµÄÖµ ¼ÆÊýµ½5000Ϊ500ms
|
// TIM_TimeBaseStructure.TIM_Prescaler =psc; //ÉèÖÃÓÃÀ´×÷ΪTIMxʱÖÓÆµÂʳýÊýµÄÔ¤·ÖƵֵ 10KhzµÄ¼ÆÊýƵÂÊ
|
// TIM_TimeBaseStructure.TIM_ClockDivision = 0; //ÉèÖÃʱÖÓ·Ö¸î:TDTS = Tck_tim
|
// TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up; //TIMÏòÉϼÆÊýģʽ
|
// TIM_TimeBaseInit(TIM4, &TIM_TimeBaseStructure); //¸ù¾ÝTIM_TimeBaseInitStructÖÐÖ¸¶¨µÄ²ÎÊý³õʼ»¯TIMxµÄʱ¼ä»ùÊýµ¥Î»
|
//
|
// TIM_ITConfig( TIM4, TIM_IT_Update|TIM_IT_Trigger, ENABLE );//TIM4 ÔÊÐí¸üУ¬´¥·¢ÖжÏ
|
|
// //TIM4ÖжϷÖ×éÅäÖÃ
|
// NVIC_InitStructure.NVIC_IRQChannel = TIM4_IRQn; //TIM3ÖжÏ
|
// NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 3; //ÏÈÕ¼ÓÅÏȼ¶03¼¶
|
// NVIC_InitStructure.NVIC_IRQChannelSubPriority = 3; //´ÓÓÅÏȼ¶3¼¶
|
// NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; //IRQͨµÀ±»Ê¹ÄÜ
|
// NVIC_Init(&NVIC_InitStructure); //¸ù¾ÝNVIC_InitStructÖÐÖ¸¶¨µÄ²ÎÊý³õʼ»¯ÍâÉèNVIC¼Ä´æÆ÷
|
|
// TIM_Cmd(TIM4, ENABLE); //ʹÄÜTIM4
|
}
|
#endif
|
////////////////////////////////////////////////////////////////////////////////////////
|
//³õʼ»¯´®¿Ú¿ØÖÆÆ÷
|
//sysclk:ϵͳʱÖÓ£¨Mhz£©
|
void usmart_init(u8 sysclk)
|
{
|
#if USMART_ENTIMX_SCAN==1
|
Timer4_Init(1000,(u32)sysclk*100);//·ÖƵ,ʱÖÓΪ10K ,100msÖжÏÒ»´Î,×¢Òâ,¼ÆÊýƵÂʱØÐëΪ10Khz,ÒÔºÍruntimeµ¥Î»(0.1ms)ͬ²½.
|
#endif
|
usmart_dev.sptype=1; //Ê®Áù½øÖÆÏÔʾ²ÎÊý
|
}
|
//´ÓstrÖлñÈ¡º¯ÊýÃû,id,¼°²ÎÊýÐÅÏ¢
|
//*str:×Ö·û´®Ö¸Õë.
|
//·µ»ØÖµ:0,ʶ±ð³É¹¦;ÆäËû,´íÎó´úÂë.
|
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;
|
}
|
//usamrtÖ´Ðк¯Êý
|
//¸Ãº¯ÊýÓÃÓÚ×îÖÕÖ´ÐдӴ®¿ÚÊÕµ½µÄÓÐЧº¯Êý.
|
//×î¶àÖ§³Ö10¸ö²ÎÊýµÄº¯Êý,¸ü¶àµÄ²ÎÊýÖ§³ÖÒ²ºÜÈÝÒ×ʵÏÖ.²»¹ýÓõĺÜÉÙ.Ò»°ã5¸ö×óÓҵIJÎÊýµÄº¯ÊýÒѾºÜÉÙ¼ûÁË.
|
//¸Ãº¯Êý»áÔÚ´®¿Ú´òÓ¡Ö´ÐÐÇé¿ö.ÒÔ:"º¯ÊýÃû(²ÎÊý1£¬²ÎÊý2...²ÎÊýN)=·µ»ØÖµ".µÄÐÎʽ´òÓ¡.
|
//µ±ËùÖ´Ðеĺ¯ÊýûÓзµ»ØÖµµÄʱºò,Ëù´òÓ¡µÄ·µ»ØÖµÊÇÒ»¸öÎÞÒâÒåµÄÊý¾Ý.
|
void usmart_exe(void)
|
{
|
u8 id,i;
|
u32 res;
|
u32 temp[MAX_PARM];//²ÎÊýת»»,ʹ֧֮³ÖÁË×Ö·û´®
|
u8 sfname[MAX_FNAME_LEN];//´æ·Å±¾µØº¯ÊýÃû
|
u8 pnum,rval;
|
id=usmart_dev.id;
|
if(id>=usmart_dev.fnum)return;//²»Ö´ÐÐ.
|
usmart_get_fname((u8*)usmart_dev.funs[id].name,sfname,&pnum,&rval);//µÃµ½±¾µØº¯ÊýÃû,¼°²ÎÊý¸öÊý
|
printf("\r\n%s(",sfname);//Êä³öÕýÒªÖ´Ðеĺ¯ÊýÃû
|
for(i=0;i<pnum;i++)//Êä³ö²ÎÊý
|
{
|
if(usmart_dev.parmtype&(1<<i))//²ÎÊýÊÇ×Ö·û´®
|
{
|
printf("%c",'"');
|
printf("%s",usmart_dev.parm+usmart_get_parmpos(i));
|
printf("%c",'"');
|
temp[i]=(u32)&(usmart_dev.parm[usmart_get_parmpos(i)]);
|
}else //²ÎÊýÊÇÊý×Ö
|
{
|
temp[i]=*(u32*)(usmart_dev.parm+usmart_get_parmpos(i));
|
if(usmart_dev.sptype==SP_TYPE_DEC)printf("%lu",temp[i]);//10½øÖƲÎÊýÏÔʾ
|
else printf("0X%X",temp[i]);//16½øÖƲÎÊýÏÔʾ
|
}
|
if(i!=pnum-1)printf(",");
|
}
|
printf(")");
|
usmart_reset_runtime(); //¼ÆÊ±Æ÷ÇåÁã,¿ªÊ¼¼ÆÊ±
|
switch(usmart_dev.pnum)
|
{
|
case 0://ÎÞ²ÎÊý(voidÀàÐÍ)
|
res=(*(u32(*)())usmart_dev.funs[id].func)();
|
break;
|
case 1://ÓÐ1¸ö²ÎÊý
|
res=(*(u32(*)())usmart_dev.funs[id].func)(temp[0]);
|
break;
|
case 2://ÓÐ2¸ö²ÎÊý
|
res=(*(u32(*)())usmart_dev.funs[id].func)(temp[0],temp[1]);
|
break;
|
case 3://ÓÐ3¸ö²ÎÊý
|
res=(*(u32(*)())usmart_dev.funs[id].func)(temp[0],temp[1],temp[2]);
|
break;
|
case 4://ÓÐ4¸ö²ÎÊý
|
res=(*(u32(*)())usmart_dev.funs[id].func)(temp[0],temp[1],temp[2],temp[3]);
|
break;
|
case 5://ÓÐ5¸ö²ÎÊý
|
res=(*(u32(*)())usmart_dev.funs[id].func)(temp[0],temp[1],temp[2],temp[3],temp[4]);
|
break;
|
case 6://ÓÐ6¸ö²ÎÊý
|
res=(*(u32(*)())usmart_dev.funs[id].func)(temp[0],temp[1],temp[2],temp[3],temp[4],\
|
temp[5]);
|
break;
|
case 7://ÓÐ7¸ö²ÎÊý
|
res=(*(u32(*)())usmart_dev.funs[id].func)(temp[0],temp[1],temp[2],temp[3],temp[4],\
|
temp[5],temp[6]);
|
break;
|
case 8://ÓÐ8¸ö²ÎÊý
|
res=(*(u32(*)())usmart_dev.funs[id].func)(temp[0],temp[1],temp[2],temp[3],temp[4],\
|
temp[5],temp[6],temp[7]);
|
break;
|
case 9://ÓÐ9¸ö²ÎÊý
|
res=(*(u32(*)())usmart_dev.funs[id].func)(temp[0],temp[1],temp[2],temp[3],temp[4],\
|
temp[5],temp[6],temp[7],temp[8]);
|
break;
|
case 10://ÓÐ10¸ö²ÎÊý
|
res=(*(u32(*)())usmart_dev.funs[id].func)(temp[0],temp[1],temp[2],temp[3],temp[4],\
|
temp[5],temp[6],temp[7],temp[8],temp[9]);
|
break;
|
}
|
usmart_get_runtime();//»ñÈ¡º¯ÊýÖ´ÐÐʱ¼ä
|
if(rval==1)//ÐèÒª·µ»ØÖµ.
|
{
|
if(usmart_dev.sptype==SP_TYPE_DEC)printf("=%lu;\r\n",res);//Êä³öÖ´Ðнá¹û(10½øÖƲÎÊýÏÔʾ)
|
else printf("=0X%X;\r\n",res);//Êä³öÖ´Ðнá¹û(16½øÖƲÎÊýÏÔʾ)
|
}else printf(";\r\n"); //²»ÐèÒª·µ»ØÖµ,Ö±½ÓÊä³ö½áÊø
|
if(usmart_dev.runtimeflag) //ÐèÒªÏÔʾº¯ÊýÖ´ÐÐʱ¼ä
|
{
|
printf("Function Run Time:%d.%1dms\r\n",usmart_dev.runtime/10,usmart_dev.runtime%10);//´òÓ¡º¯ÊýÖ´ÐÐʱ¼ä
|
}
|
}
|
//usmartɨÃ躯Êý
|
//ͨ¹ýµ÷Óøú¯Êý,ʵÏÖusmartµÄ¸÷¸ö¿ØÖÆ.¸Ãº¯ÊýÐèҪÿ¸ôÒ»¶¨Ê±¼ä±»µ÷ÓÃÒ»´Î
|
//ÒÔ¼°Ê±Ö´ÐдӴ®¿Ú·¢¹ýÀ´µÄ¸÷¸öº¯Êý.
|
//±¾º¯Êý¿ÉÒÔÔÚÖжÏÀïÃæµ÷ÓÃ,´Ó¶øÊµÏÖ×Ô¶¯¹ÜÀí.
|
//Èç¹û·ÇALIENTEKÓû§,ÔòUSART_RX_STAºÍUSART1_RX_BUF[]ÐèÒªÓû§×Ô¼ºÊµÏÖ
|
void usmart_scan(void)
|
{
|
u8 sta,len;
|
if(USART_RX_STA&0x8000)//´®¿Ú½ÓÊÕÍê³É£¿
|
{
|
len=USART_RX_STA&0x3fff; //µÃµ½´Ë´Î½ÓÊÕµ½µÄÊý¾Ý³¤¶È
|
USART1_RX_BUF[len]='\0'; //ÔÚĩβ¼ÓÈë½áÊø·û.
|
sta=usmart_dev.cmd_rec(USART1_RX_BUF);//µÃµ½º¯Êý¸÷¸öÐÅÏ¢
|
if(sta==0)usmart_dev.exe(); //Ö´Ðк¯Êý
|
else
|
{
|
len=usmart_sys_cmd_exe(USART1_RX_BUF);
|
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;
|
}
|
}
|
}
|
USART_RX_STA=0;//״̬¼Ä´æÆ÷Çå¿Õ
|
}
|
}
|
|
#if USMART_USE_WRFUNS==1 //Èç¹ûʹÄÜÁ˶Áд²Ù×÷
|
//¶Áȡָ¶¨µØÖ·µÄÖµ
|
u32 read_addr(u32 addr)
|
{
|
return *(u32*)addr;//
|
}
|
//ÔÚÖ¸¶¨µØÖ·Ð´ÈëÖ¸¶¨µÄÖµ
|
void write_addr(u32 addr,u32 val)
|
{
|
*(u32*)addr=val;
|
}
|
#endif
|