这里主要讲了基于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下的例程,来直观体验一下:
源程序:
输入结果: