(int argc, char *argv[])在MCU中的除錯使用
阿新 • • 發佈:2021-08-27
這裡主要講了基於RTT的 finsh->MSH_CMD_EXPORT 方法,在串列埠終端中呼叫自定義函式,並傳入引數的方法。
在傳統的MCU開發中
當我們需要測試一個函式在傳入不同引數時的運算結果時,往往使用陣列或者單步修改變數值的方法來測試。這種方法不是很方面。
今天分享一個基於RTT的 finsh->MSH_CMD_EXPORT ,在串列埠終端中呼叫自定義函式,並傳入引數的方法。
例程如下:
static void _cb(uint32_t flag) { /*內容不重要*/ } static void cy_up(int argc, char *argv[]) { uint32_t bitchs; if (argc == 2) { bitchs = strtol(argv[1], NULL, 0); cy_broadcast_and_read_back(bitchs, _cb); D_LOG("send to UP %x\n", bitchs); } else { D_LOG("Input parameter error!\n"); } } MSH_CMD_EXPORT(cy_up, cyUP test);
這裡需要重點講下 argc 和 argv
argc[0] 固定為程式名,例如上述示例中 argc[0] 的內容為字串 cy_up。
argc 表示輸入輸入的形引數量。它的值永遠 ≥ 1.
如上,當我們輸入 cy_up 0x8010 時,我們將在 argc[1] 中得到 “0x8010” 的字串。注意這裡是字串!不是十六進位制數。如果想得到十六進位制(或者其它)我們需要呼叫C庫標準函式 strtol() 將字串轉換為十六進位制整數。
由於上述例程中的專案已經完成,下面我找了一個類似的ubuntu下的例程,來直觀體驗一下:
源程式:
輸入結果: