(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.

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

如上,当我们输入 cy_up 0x8010 时,我们将在 argc[1] 中得到 “0x8010” 的字符串。注意这里是字符串!不是十六进制数。如果想得到十六进制(或者其它)我们需要调用C库标准函数 strtol() 将字符串转换为十六进制整数。

由于上述例程中的项目已经完成,下面我找了一个类似的ubuntu下的例程,来直观体验一下:

源程序:

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

输入结果:

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

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

上一篇:AtCoder Beginner Contest 155 题解


下一篇:fiddler的基本使用