RT-Thread论坛
直播中

吴藩

9年用户 807经验值
擅长:可编程逻辑
私信 关注
[问答]

rt-thread是如何在线程运行结束后识别到的呢?

我最近在仿写rt-thread内核,在这个过程中对于它线程的处理有些疑惑
代码如下

#include
#define DBG_TAG "main"
#define DBG_LVL DBG_LOG
#include
static rt_uint8_t rt_thread_task1[IDLE_THREAD_STACK_SIZE];
void task_entry(void *parameter)
{
    while(1)
    {
        LOG_D("Hello task1");
        rt_thread_mdelay(1000);
    }
}
int main(void)
{
    int count = 1;
    static struct rt_thread task1;
    rt_thread_init(&task1,
                   "task1",
                   task_entry,
                   RT_NULL,
                   &rt_thread_task1[0],
                   sizeof(rt_thread_task1),
                   16,
                   32);
    rt_thread_startup(&task1);
    {
        LOG_D("Hello RT-Thread!");
        rt_thread_mdelay(1000);
    }
    return RT_EOK;
}
总所周知,main本身就是rt-thread创建的线程,我在这个线程中创建了一个新的线程并且启动,main函数中的内容就结束了,后续我在shell中通过list_thread指令发现没有main函数,rt-thread是如何在线程运行结束后识别到的呢?请各位大佬指教

回帖(1)

王颖

2024-3-22 18:07:09
rt-thread 在初始化线程栈的时候,向 LR 寄存器写入了 _thread_exit 函数地址。所以当线程函数return的时候, 会执行 _thread_exit 的逻辑,完成线程的退出逻辑。
举报

更多回帖

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