嵌入式技术论坛
直播中

h1654155275.5741

8年用户 1013经验值
私信 关注
[问答]

borad阶段创建线程在系统运行后无法进行造成这个原因是什么

创建线程的相关函数使用自动初始化宏定义

使用INIT_BOARD_EXPORT来运行创建线程的函数

会导致线程看起来创建成功了,但是实际DEBUG中压根没有进入过一次

代码如下

static void pvd_thread_entry(void* parameter)
{
static int cnt = 0;
while(1)
{
cnt++;
rt_kprintf("%d\n",cnt);
}
}
static int start()
{
/* 初始化完成量对象 */
rt_completion_init(&pvd_completion);
rt_thread_t tid;
tid = rt_thread_create("PVD", pvd_thread_entry, RT_NULL,
1024, 0, 20);
if(tid == RT_NULL)
{
LOG_E("PVD thread start failed!");
}
else
{
rt_thread_startup(tid);
}
return RT_EOK;
}
INIT_BOARD_EXPORT(start);

看起来也创建成功了,也没有报错。实际上。。。啥事也没发生

1.jpg

使用其他级别的自动初始化宏来运行创建线程的函数

如下代码,改变只有自动初始化宏不一样

static void pvd_thread_entry(void* parameter)
{
static int cnt = 0;
while(1)
{
cnt++;
rt_kprintf("%d\n",cnt);
}
}
static int start()
{
/* 初始化完成量对象 */
rt_completion_init(&pvd_completion);
rt_thread_t tid;
tid = rt_thread_create("PVD", pvd_thread_entry, RT_NULL,
1024, 0, 20);
if(tid == RT_NULL)
{
LOG_E("PVD thread start failed!");
}
else
{
rt_thread_startup(tid);
}
return RT_EOK;
}
INIT_PREV_EXPORT(start);

这就一直在执行了

1.jpg

造成这个原因是什么?

调度器还没运行?

没有看到关于这部分的说明

还是bug?

回帖(1)

张虎豹

2022-11-24 11:44:22
这个时候调度器都还没初始化,很多都没初始化。然后后面初始化后,前面的自然就不存在了,没有放这么前初始化线程,任务这块的
举报

更多回帖

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