嵌入式技术论坛
直播中

杜喜喜

7年用户 1480经验值
私信 关注
[问答]

Finsh自定义命令如何退出循环执行的函数?

大家好!我们经常会用Finsh自定义一些测试函数,比如下面这样的:

void test_led()
{
led_on();
}
MSH_CMD_EXPORT(test_led, test_led);
在终端输入命令test_led,这个函数执行完了就自动退出了。
但是有的时候,我们需要测试一些需要循环执行的函数,比如这样的:

void test_button()
{
while(1)
{
printf("%d\n", read_button());
rt_mdelay(10);
}
}
MSH_CMD_EXPORT(test_button, test_button);
像这种,一旦在终端执行test_button命令,就无法退出了,只能重启。
不知道大家有没有什么办法,测试完这种循环执行的函数后,能够退出回到终端界面?类似在linux中按ctrl+c,就能中断退出程序
谢谢大家!

回帖(4)

刘满贵

2023-2-10 14:50:13
这种循环没法通过命令来退出了,在你输入finsh命令进入该循环后,会发现什么命令都输入不了了。循环中加入延时可以不影响其他线程的执行,但是finsh仍然是输入不了任何指令,除非退出该循环。
也没啥好办法,可以通过在循环中加入定时、计数让循环执行一段时间自动退出,或者依据button的值,按下几次就退出。想要主动退出的话,也可以通过自定义finsh命令创建一个按键测试线程,并运行,退出时再通过自定义的finsh命令来删除这个线程。
举报

訾存贵

2023-2-10 14:50:29
定义执行测试函数:

static uint8_t g_test_running = 1;
void test_button()
{
    while(g_test_running)
    {
        printf("%dn", read_button());
        rt_mdelay(10);
    }
}
MSH_CMD_EXPORT(test_button, test_button);
定义退出测试函数:

void test_button_exit()
{
    g_test_running = 0;
}
MSH_CMD_EXPORT(test_button_exit, test_button_exit);
简单实现,试试看?
举报

杜喜喜

2023-2-10 14:50:39
这种方式应该可以,但是不是太好,我们是在终端一直打印按键的状态的同时,输入test_button_exit并回车,如何能直接按ctrl+c把它就直接停了就好了。
举报

訾存贵

2023-2-10 14:50:54
要退出它有N种方法,你可以根据你的需求去实现。
举报

更多回帖

发帖
×
20
完善资料,
赚取积分