void my_led_test(void){ rt_thread_t tid; /* ????1 */ tid = rt_thread_create("led", led, RT_NULL, THREAD_STACK_SIZE, THREAD_PRIORITY, THREAD_TIMESLICE); if (tid != RT_NULL) rt_thread_startup(tid);}int main(void){ my_led_test(); return 0;}
void my_led_test(void)
{
rt_thread_t tid;
/* ????1 */
tid = rt_thread_create("led",
led, RT_NULL,
THREAD_STACK_SIZE,
THREAD_PRIORITY,
THREAD_TIMESLICE);
if (tid != RT_NULL)
rt_thread_startup(tid);
}
int main(void)
my_led_test();
return 0;
以上是我在官方历程中加入的线程相关代码.请问为什么主函数中my_led_test()会执行,而return 0不执行?
my_led_test()
return 0
查看更多
调用main的调用者没有使用此返回值,被编译器就优化掉了
这个应该会执行到的吧?return 0之后,有rt_thread_exit()回收掉.
这个在main函数中加入return后准备返回到那里去?CPU指针跳转到main后就执行你的代码了,如果return,程序就会出现异常中断——指针飞了!从代码看,你通过启动led线程,程序已经运行在led线程上,不会执行到return 0这个位置。
早晚会执行到的,应该是你的led线程优先级线程比main线程的额优先级高 导致main执行完那个函数之后,立刻跳转到led线程运行去了。
欢迎发表与嵌入式相关的技术分享、开发技巧、工具介绍、技术设想、职业心得、行业评论等对他人有启发,排版优雅的文章
回到 顶部
发布 问题
分享 好友
手机 浏览
投诉 建议
回到 底部
您好,可以详细解释一下吗?我的理解是:主函数 return 0 ,整个程序就运行结束了. 而RT-Thread还可以继续运行,请问是什么原理?
因为系统在启动时创建了main线程,main函数作为线程函数被调用,main函数结束只是导致main线程结束,系统还是照常运行的
@JQRR_7669 好的,懂了,谢谢大佬!