嵌入式技术论坛
直播中

ss

6年用户 8762经验值
擅长:电源/新能源 制造/封装 RF/无线
私信 关注
[问答]

RT-Thread能否终止正执行的命令?是怎么操作的?

我一直有个问题,像这种一直运行任务,没有什么命令可以终止任务
我看RT-Thread, msh其本是操作很多命令基本与Linux的shell一样的,就是没有终止任务的命令,Linux可以Ctrl+C终止任务, 但RT-Thread没有找列这个命令
现在的办法,一但执行停不下来的任务,只能关机重启,这个体验有点不好。
请教一下有可以终止任务执行命令,如果有是怎么操作的?

回帖(4)

ss

2022-3-23 14:18:27
我猜测你遇到肯定是第一种情形,即:
void thread_entry(void* paramenter)
{
    while (1)
    {
    /* 等待事件的发生 */
    /* 对事件进行服务、进行处理 */
    }
}
如果是这种情况,那么你想要退出线程的执行,你可以在while(1)中的1里做文章,比如使用一个bool变量代替这个1,类似这样:
rt_bool thread_running = true;
void thread_entry(void* paramenter)
{
    while (thread_running)
    {
    /* 等待事件的发生 */
    /* 对事件进行服务、进行处理 */
    }
}
然后你可以使用MSH_CMD_EXPORT导出一个命令,这个命令,只需要把thread_running = false即可。
这种做法,很多Java代码就是这么玩的。
当然这里有个前提是,你的线程的执行代码没有在一些阻塞接口上死等,比如等待互斥锁或者信号量这种就不行;还是有它的局限性。
仅做为一种思路参考,希望对你有所启发。

举报

ss

2022-3-23 14:18:41
目前是没有这类强操作系统层面制终止的操作的,得用户的程序自己判断是否按下了Crtl+C,好建议 但是现在没啥想法能实现这个方案,有啥好想法吗?
举报

ss

2022-3-23 14:18:50
RTOS其实没有那么复杂的动态加载,所以你线程运行了就相当于执行了。如果想中途停止其实你要做很多操作,比如申请的一些空间,malloc的如何释放,一些线程如何回收,这些都是当前占着资源的。这些处理都要考虑进去才能实现ctrl+c. 做好这些对RTOS有些困难了 。
举报

ss

2022-3-23 14:19:07
好像没有
举报

更多回帖

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