当前位置:首页 > 嵌入式 > 嵌入式微处理器
[导读]1.介绍本以为暂停线程是一条语句的事,结果发现事情并没有那么简单,而且我相信很多人都用错了,就是因为踩了这么一个坑,所以准备发这么一个帖子,让后面的人少踩坑。2.应用场景有三个线程,分别为A、B和C,把A线程比作是大脑,B和C线程分别是扫地和洗碗,首先处于空闲状态,大脑让我去扫地...


1.介绍
本以为暂停线程是一条语句的事,结果发现事情并没有那么简单,而且我相信很多人都用错了,就是因为踩了这么一个坑,所以准备发这么一个帖子,让后面的人少踩坑。
2.应用场景
有三个线程,分别为A、B和C,把A线程比作是大脑,B和C线程分别是扫地和洗碗,首先处于空闲状态,大脑让我去扫地,这时A线程中会开启B线程,第一次开启线程可以调用【rt_thread_startup】这个函数,没啥毛病,当老婆大人让我去洗碗,大脑瞬间做出反应去洗碗,这时A线程会关闭B线程然后打开C线程,那么A线程关闭B线程是调用【rt_thread_suspend】这个函数吗?看着没啥问题哦,但是里面存在很大的问题!这里先不说,继续往下走,当洗完碗还得继续扫地,让A线程恢复B线程需要调用【rt_thread_resume】这个函数。
上面这个应用场景就实现了,A线程暂停和恢复B线程,看着是没什么问题,我们先来实际操作一下,看看有什么问题!
3.场景再现
硬件:STM32F407VET6RTThread版本:3.1.3Nano首先按照上面的应用场景走一遍,设计三个线程,分别为A、B和C,然后开始运行,具体代码如下:
#include ALIGN(RT_ALIGN_SIZE)static rt_uint8_t a_thread_stack[ 512 ];ALIGN(RT_ALIGN_SIZE)static rt_uint8_t b_thread_stack[ 512 ];ALIGN(RT_ALIGN_SIZE)static rt_uint8_t c_thread_stack[ 512 ];static struct rt_thread a_thread;static struct rt_thread b_thread;static struct rt_thread c_thread;static void a_thread_entry(void *parameter){unsigned int count = 0;while (1) { count ;if(count == 10) { rt_kprintf("b start!\n"); rt_thread_startup(
嵌入式ARM

扫描二维码,关注更多精彩内容

本站声明: 本文章由作者或相关机构授权发布,目的在于传递更多信息,并不代表本站赞同其观点,本站亦不保证或承诺内容真实性等。需要转载请联系该专栏作者,如若文章内容侵犯您的权益,请及时联系本站删除( 邮箱:macysun@21ic.com )。
换一批
延伸阅读
关闭