移植系统到STM32F407下线程创建和运行失败?

发布于 2021-04-06 22:04:37

我在keil下创建了两个线程,不知道发生了什么事情一直只能运行一个线程,只能运行线程优先级高的哪一个线程,低优先级的线程不知道什么原因无法运行,我用MCU芯片是STM32F407,之前用STM32F103没有遇到这个问题,有人知道这是什么原因吗?
线程创建的代码如下:

   producer_tid = rt_thread_create("producer_tid",
                                    producer_thread_entry,
                                    RT_NULL,
                                    200,
                                    0,
                                    20);
       if (producer_tid != RT_NULL)  //创建线程成功
               rt_thread_startup(producer_tid);  //启动线程
       else 
          return -1;  //线程创建失败
    
    
    rtt_thread_ad=rt_thread_create("RTT_ADC",
                                   Rt_Semaphore_Consumption,//线程入口函数
                                   RT_NULL,
                                   200,
                                   1,
                                   20);  
        /* 启动线程,开启调度 */
         if (rtt_thread_ad != RT_NULL)
             rt_thread_startup(rtt_thread_ad);
         else
           return -1;

查看更多

关注者
0
被浏览
97
6 个回答
mii
mii 2021-04-07

检查一下线程优先级高的入口函数是不是没有释放CPU的操作?

张世争
张世争 2021-04-06

线程的优先级,不要设置为0,最高优先级,造成一直抢占。可以改低一些,如10,11

Glen_Young
Glen_Young 2021-04-06

建议提供线程的入口函数,看看是不是优先级高的线程一直占用调度器

flashman2002
flashman2002 2021-04-07

你系统的优先级是8还是32还是256?看一下线程的入口函数里面是否有rt_thread_mdelay之类的函数出现?

小小李sunny
小小李sunny 2021-04-07

线程里的死循环是不是没有释放CPU资源,可以在死循环里加个delay来释放资源,供低优先级函数执行。否则肯定会卡死在高优先级的线程里。

YZRD
YZRD 2021-04-07

应该是线程没有释放CPU资源,在每个线程里加个rt_thread_mdelay(1000)试试,推荐看一下官方文档

撰写答案

请登录后再发布答案,点击登录

发布
问题

分享
好友

手机
浏览

扫码手机浏览