三白草

首页 » 常识 » 常识 » RTThread入门学习笔记创
TUhjnbcbe - 2021/4/23 1:25:00
前言

学习了RT-Thread的内核组件与线程管理,我忽然发现,线程创建时,名字可以使用RT_NULL。

创建无名线程,工作正常,只是,无法删除

相关代码

#includertthread.h#defineDBG_SECTION_NAME"noname"#defineDBG_LEVELDBG_LOG#includertdbg.h/*ledtest*/externvoidled_red_on(void);externvoidled_red_off(void);externvoidled_grn_on(void);externvoidled_grn_off(void);externvoidled_blu_on(void);externvoidled_blu_off(void);/*nonamethread1*/staticvoidno_name_task1(void*param){LOG_D("nonamethread1start!\n");while(1){led_red_on();rt_thread_mdelay();led_red_off();rt_thread_mdelay();}}/*nonamethread2*/staticvoidno_name_task2(void*param){LOG_D("nonamethread2start!\n");while(1){led_blu_on();rt_thread_mdelay();led_blu_off();rt_thread_mdelay();}}/*nonamethread3*/staticvoidno_name_task3(void*param){LOG_D("nonamethread3start!\n");while(1){led_grn_on();rt_thread_mdelay();led_grn_off();rt_thread_mdelay();}}voidno_name_init(void){rt_thread_ttid;tid=rt_thread_create(RT_NULL,no_name_task1,RT_NULL,,28,50);rt_thread_startup(tid);tid=rt_thread_create(RT_NULL,no_name_task2,RT_NULL,,28,50);rt_thread_startup(tid);tid=rt_thread_create(RT_NULL,no_name_task3,RT_NULL,,28,50);rt_thread_startup(tid);}voidno_name_del(void){rt_thread_ttid;tid=rt_thread_find(RT_NULL);if(tid!=RT_NULL){rt_thread_delete(tid);}else{LOG_D("Notfindthread!");}}MSH_CMD_EXPORT(no_name_init,no_name_init);MSH_CMD_EXPORT(no_name_del,no_name_del);运行效果

mshno_name_initmsh[D/noname]nonamethread1start![D/noname]nonamethread2start![D/noname]nonamethread3start!mshlist_threadthreadpristatusspstacksizemaxusedlefttickerror---------------------------------------------------------"28suspend0xc0x%0xe"28suspend0xc0x%0xe"28suspend0xc0x%0xepms28suspend0x9c0x%0xftshell20running0x840x0112%0x05serial25suspend0x880x0040013%0x0atidleready0x800x0086%0x16timer4suspend0x600x0020018%0x09mshmshno_name_del[D/noname]Notfindthread!解读

之所能创建无名的线程,因为内核对象初始化时,并不判断name的长度

之所无法删除没有名字的线程,是因为内核对象的查找,是用名字来查找的。

总结

需要继续研究RT-Thread内核代码、线程管理代码,正确使用RT-Thread

加深基础理论知识的积累。

张世争

1
查看完整版本: RTThread入门学习笔记创