1. 程式人生 > 其它 >(int argc, char *argv[])在MCU中的除錯使用

(int argc, char *argv[])在MCU中的除錯使用


這裡主要講了基於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下的例程,來直觀體驗一下:

源程式:

輸入結果: