RT-Thread中自定义MSH命令传入的参数是字符串,需用户自行检查和解析
如下是在將安富萊的dac8563模塊對(duì)接到潘多拉開(kāi)發(fā)板RT-Thread SPI設(shè)備框架中時(shí)導(dǎo)出到RT-Thread的自定義MSH命令,需要注意的是MSH傳入的是字符串,需要自行對(duì)字符串進(jìn)行解析處理。
#include "stdlib.h" /* 使用其中的函數(shù):atoi(); */ #include "string.h" /* 使用其中的函數(shù):strncmp(); */static void dac8563_spi_sample(int argc, char *argv[]) {int16_t i16_volt = 0;rt_kprintf("input para is: %s %s %s \n", argv[0], argv[1], argv[2]);if (3 != argc){rt_kprintf("error cmd! please input as: (A 5000) \n");return;}if (!strncmp("A", argv[1], 1)) //兩個(gè)字符串在比較的長(zhǎng)度內(nèi)都相等則返回0{i16_volt = atoi(argv[2]);DAC8563_set_output_volt(WRITE_AND_UPDATE_DAC_A, i16_volt);}else if (!strncmp("B", argv[1], 1)){i16_volt = atoi(argv[2]);DAC8563_set_output_volt(WRITE_AND_UPDATE_DAC_B, i16_volt);} } /* 導(dǎo)出到 msh 命令列表中 */ MSH_CMD_EXPORT(dac8563_spi_sample, spi dac8563 sample);在MSH中輸入的指令如下所示:
- 命令的名稱為"dac8563_spi_sample",存儲(chǔ)于argv[0]
- 第一個(gè)參數(shù)為"A",存儲(chǔ)于argv[1]
- 第2個(gè)參數(shù)為"8000",存儲(chǔ)于argv[2]
- 共有3個(gè)字符串,因此argc為3,各字符串的內(nèi)容被存儲(chǔ)與argv[]的各個(gè)元素中
在MSH中傳入到程序的各個(gè)參數(shù)均為字符串形式,因此需要用戶自行處理其中的參數(shù),也就是說(shuō)需要做嚴(yán)格的參數(shù)檢查或者進(jìn)行類型的轉(zhuǎn)換。
因?yàn)閐ac8563有兩個(gè)電壓輸出通道,因此設(shè)置輸出電壓時(shí)就需要指定是哪個(gè)通道(A或B)?具體設(shè)置的電壓值(-10000~+10000mV)?
命令格式如上圖所示,argv[1]中存儲(chǔ)的內(nèi)容會(huì)被解析為電壓輸出通道,因此就需要用strncmp("A", argv[1], 1)函數(shù)進(jìn)行比對(duì)。若argv[1]中存儲(chǔ)的字符串前1個(gè)字符和“A”相等,則strncmp的返回值為0,否則為1。為0表示當(dāng)前操作通道為A,則進(jìn)行通道A輸出電壓的設(shè)置。具體設(shè)置的值存儲(chǔ)在argv[2]中,是以字符串格式進(jìn)行存儲(chǔ)的,因此需要將字符串轉(zhuǎn)換為整型數(shù)。這里使用到了stdlib.h中的函數(shù)atoi()。該函數(shù)可將輸入的字符串轉(zhuǎn)換為帶符號(hào)整型,如“-5678”轉(zhuǎn)換為整型的-5678,“9860”轉(zhuǎn)換為整型的9860。
?
【atoi函數(shù)】
頭文件 stdlib.h
C語(yǔ)言中有atoi、atol、atof等庫(kù)函數(shù),可分別把ASCII編碼的字符串轉(zhuǎn)化為int、daolong、float類型的數(shù)字。
函數(shù)原型:int atoi(const char* nptr);
示例:
char *str="996";
int num=atoi(str);
執(zhí)行后,num的值被初始化為996
【strncmp函數(shù)】
頭文件 string.h
函數(shù)名: strncmp
函數(shù)功能: 字符串比較
函數(shù)用法: int strncmp(char *str1, char *str2, int maxlen);
說(shuō)明:此函數(shù)功能即比較字符串str1和str2的前maxlen個(gè)字符。如果前maxlen字節(jié)完全相等,返回值就=0;在前maxlen字節(jié)比較過(guò)程中,如果出現(xiàn)str1[n]與str2[n]不等,則返回(str1[n]-str2[n])。
?
?
總結(jié)
以上是生活随笔為你收集整理的RT-Thread中自定义MSH命令传入的参数是字符串,需用户自行检查和解析的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 小程序 --- 项目小练手Ⅰ
- 下一篇: 微信团购小程序怎么做?一般要多少钱?