正点原子的USMART使用说明,接收函数名字符串调用相应的函数

想把USMART改成一个可以随便变得代码都可以用的库,只用调用接口就行。

  1. USMART是由ALIENTEK开发的一个灵巧的串口调试互交组件,通过 它,你可以通过串口助手调用程 序里面的任何函数,并执行.因此,你可以随意更改函数的输入参数(支持数字(10/16进制,支持负数) 、字符串、函数入口地址等作为参数),单个函数最多支持10个输入参数,并支持函数返 回值显示. V2.1版本以后新增hex和dec两个指令.他们可以用于设置函数参数的显示格式.也可以用于数据的进 制转换,例如: 输入"hex 100"  会在串口调试助手上看到 HEX 0X64. 输入"dec 0X64" 会在串口调试助手上看到 DEC 100.
  2. //移植注意:本例是以stm32为例,如果要移植到其他mcu,请做相应修改.
    //usmart_reset_runtime,清除函数运行时间,连同定时器的计数寄存器以及标志位一起清零.并设置重装载值为最大,以最大限度的延长计时时间.
    //usmart_get_runtime,获取函数运行时间,通过读取CNT值获取,由于usmart是通过中断调用的函数,所以定时器中断不再有效,此时最大限度
    //只能统计2次CNT的值,也就是清零后+溢出一次,当溢出超过2次,没法处理,所以最大延时,控制在:2*计数器CNT*0.1ms.对STM32来说,是:13.1s左右
    //其他的:TIM4_IRQHandler和Timer4_Init,需要根据MCU特点自行修改.确保计数器计数频率为:10Khz即可.另外,定时器不要开启自动重装载功能!!
  3. void usmart_init(u8 sysclk):初始化调用主要是进行终端扫描,中断函数中对(void usmart_scan(void); )函数扫描。设置16进制显示,中断不需要去掉,usmart_init不需要去掉,
  4. usmart_scan是要调用的函数;数据接收到后调用此函数,就可以将收到数据进行解析,调用相应的函数,进行执行。USART_RX_STA是否接收完成数据以及接收到数据的长度。USART_RX_BUF就收到的数据存放的位置,就是对此数据进行解析。
USMART V3.2
   USMART是由ALIENTEK开发的一个灵巧的串口调试互交组件,通过 它,你可以通过串口助手调用程
序里面的任何函数,并执行.因此,你可以随意更改函数的输入参数(支持数字(10/16进制,支持负数)
、字符串、函数入口地址等作为参数),单个函数最多支持10个输入参数,并支持函数返 回值显示.
V2.1版本以后新增hex和dec两个指令.他们可以用于设置函数参数的显示格式.也可以用于数据的进
制转换,例如:
输入"hex 100"  会在串口调试助手上看到 HEX 0X64.
输入"dec 0X64" 会在串口调试助手上看到 DEC 100.

升级说明
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_ENTIM2_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,才可以使用!!
V3.2 20140828
1,修改usmart_get_aparm函数,加入+/-符号的支持
2,修改usmart_str2num函数,支持负数转换

 

 

总之修改成简单的调用,接到的字符串直接解析

extern    u8  USART_RX_BUF[USART_REC_LEN]; //接收缓冲,最大USART_REC_LEN个字节.末字节为换行符
extern   u16 USART_RX_STA;         		//接收状态标记
ets_strcpy( USART_RX_BUF , "void smart_test1()");
USART_RX_STA =strlen(USART_RX_BUF);
usmart_scan();



 

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
使用usmart调用读写flash函数之前,你需要确保已经正确初始化了Flash,并且已经使能了Flash读写操作。在此之后,你可以编写读写Flash的函数,并在usmart注册该函数,以便通过串口或其他方式调用。 以下是一个示例代码: ```c #include "stm32f10x.h" #include "usmart.h" #define FLASH_PAGESIZE 0x400 void Flash_Write(uint32_t addr, uint32_t data) { FLASH_Unlock(); // 解锁Flash // 擦除地址所在的整个扇区 FLASH_ErasePage(addr & (~(FLASH_PAGESIZE - 1))); // 写入数据 FLASH_ProgramWord(addr, data); FLASH_Lock(); // 锁定Flash } uint32_t Flash_Read(uint32_t addr) { return *(volatile uint32_t *)addr; } int main(void) { // 初始化Flash // 注册函数 usmart_cmd_register("flash_write", Flash_Write); usmart_cmd_register("flash_read", Flash_Read); while (1) { // 循环处理其他任务 } } ``` 在上面的代码中,我们定义了两个读写Flash的函数:`Flash_Write`和`Flash_Read`。这两个函数分别用于写入和读取Flash中的数据。在main函数中,我们先初始化了Flash,并使用`usmart_cmd_register`函数将读写Flash的函数注册到usmart中。这样,我们就可以通过串口或其他方式调用这两个函数了。 例如,如果我们想要在Flash中写入数据`0x12345678`,我们可以在终端中输入以下命令: ``` flash_write(0x08008000, 0x12345678) ``` 这样就可以将数据写入Flash了。类似地,如果我们想要读取Flash中的数据,我们可以在终端中输入以下命令: ``` flash_read(0x08008000) ``` 这样就可以读取Flash中的数据了。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值