日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪(fǎng)問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

RT-Thread中自定义MSH命令传入的参数是字符串,需用户自行检查和解析

發(fā)布時(shí)間:2023/12/10 编程问答 37 豆豆
生活随笔 收集整理的這篇文章主要介紹了 RT-Thread中自定义MSH命令传入的参数是字符串,需用户自行检查和解析 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

如下是在將安富萊的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中輸入的指令如下所示:

  • 命令的名稱(chēng)為"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ù)均為字符串形式,因此需要用戶(hù)自行處理其中的參數(shù),也就是說(shuō)需要做嚴(yán)格的參數(shù)檢查或者進(jìn)行類(lèi)型的轉(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類(lèi)型的數(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)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。