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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

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

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

如下是在將安富萊的dac8563模塊對接到潘多拉開發板RT-Thread SPI設備框架中時導出到RT-Thread的自定義MSH命令,需要注意的是MSH傳入的是字符串,需要自行對字符串進行解析處理。

#include "stdlib.h" /* 使用其中的函數:atoi(); */ #include "string.h" /* 使用其中的函數: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)) //兩個字符串在比較的長度內都相等則返回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);} } /* 導出到 msh 命令列表中 */ MSH_CMD_EXPORT(dac8563_spi_sample, spi dac8563 sample);

在MSH中輸入的指令如下所示:

  • 命令的名稱為"dac8563_spi_sample",存儲于argv[0]
  • 第一個參數為"A",存儲于argv[1]
  • 第2個參數為"8000",存儲于argv[2]
  • 共有3個字符串,因此argc為3,各字符串的內容被存儲與argv[]的各個元素中

在MSH中傳入到程序的各個參數均為字符串形式,因此需要用戶自行處理其中的參數,也就是說需要做嚴格的參數檢查或者進行類型的轉換。

因為dac8563有兩個電壓輸出通道,因此設置輸出電壓時就需要指定是哪個通道(A或B)?具體設置的電壓值(-10000~+10000mV)?

命令格式如上圖所示,argv[1]中存儲的內容會被解析為電壓輸出通道,因此就需要用strncmp("A", argv[1], 1)函數進行比對。若argv[1]中存儲的字符串前1個字符和“A”相等,則strncmp的返回值為0,否則為1。為0表示當前操作通道為A,則進行通道A輸出電壓的設置。具體設置的值存儲在argv[2]中,是以字符串格式進行存儲的,因此需要將字符串轉換為整型數。這里使用到了stdlib.h中的函數atoi()。該函數可將輸入的字符串轉換為帶符號整型,如“-5678”轉換為整型的-5678,“9860”轉換為整型的9860。

?

【atoi函數】

頭文件 stdlib.h

C語言中有atoi、atol、atof等庫函數,可分別把ASCII編碼的字符串轉化為int、daolong、float類型的數字。
函數原型:int atoi(const char* nptr);

示例:
char *str="996";
int num=atoi(str);
執行后,num的值被初始化為996

【strncmp函數】

頭文件 string.h  

函數名: strncmp  

函數功能: 字符串比較  

函數用法: int strncmp(char *str1, char *str2, int maxlen);  

說明:此函數功能即比較字符串str1和str2的前maxlen個字符。如果前maxlen字節完全相等,返回值就=0;在前maxlen字節比較過程中,如果出現str1[n]與str2[n]不等,則返回(str1[n]-str2[n])。

?

?

總結

以上是生活随笔為你收集整理的RT-Thread中自定义MSH命令传入的参数是字符串,需用户自行检查和解析的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。