OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 680|回复: 0

RT-thread多任务为何跑不起来,只有一个任务在执行

[复制链接]

332

主题

495

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1547
金钱
1547
注册时间
2014-7-11
在线时间
256 小时
发表于 2024-5-30 10:24:26 | 显示全部楼层 |阅读模式
2金钱
原子哥,RT-thread多任务为何跑不起来,只有一个任务在执行static struct rt_thread usart3t_thread;//线程控制块
static struct rt_thread uart4t_thread;//线程控制块
static struct rt_thread usart6t_thread;//线程控制块
static struct rt_thread upsent_thread;//线程控制块

static rt_uint8_t rt_usart3t_thread_stack[1024];//线程栈
static rt_uint8_t rt_uart4t_thread_stack[1024];//线程栈
static rt_uint8_t rt_usart6t_thread_stack[1024];//线程栈
static rt_uint8_t rt_upsent_thread_stack[1024];//线程栈

static void usart3t_thread_entry(void* parameter)
{
        while(1)
        {
                usart3handler();
        //        LED0=0;  
        //        rt_thread_delay(RT_TICK_PER_SECOND/5);                //延时
     // LED3=!LED3;     
        //        LED0=1;   
                rt_thread_delay(RT_TICK_PER_SECOND/1000);                //延时1s
        }
}
static void uart4t_thread_entry(void* parameter)
{
        while(1)
        {
                uart4handler();
        //        LED0=0;  
        //        rt_thread_delay(RT_TICK_PER_SECOND/5);                //延时
   //   LED4=!LED4;     
        //        LED0=1;   
                rt_thread_delay(RT_TICK_PER_SECOND/1000);                //延时1s
        }
}
static void usart6t_thread_entry(void* parameter)
{
        while(1)
        {
                usart6handler();
        //        LED0=0;  
        //        rt_thread_delay(RT_TICK_PER_SECOND/5);                //延时
    //  LED5=!LED5;     
        //        LED0=1;   
                rt_thread_delay(RT_TICK_PER_SECOND/1000);                //延时1s
        }
}
//线程LED1
static void upsent_thread_entry(void* parameter)
{
        //u8 hour, min, sec, ampm;
        //        u8 tbuf[40];
        //        //  uint8_t flashc1, flashc2;
                //        u8 year,month, date, week;
//    uint8_t tbuf[40];
//    uint8_t t = 0;
//u8 hour1, min1, sec1, ampm1,hour2, min2, sec2, ampm2;
        while(1)
        {
        if(upsendflag)
                        {
                         Upsent();
                               
                        }
       
                rt_thread_delay(RT_TICK_PER_SECOND/1000);                //延时
        }
}



mian()
{
串口初始化
.................................;

    rt_thread_startup(&usart2t_thread);                     //启动线程led0_thread  
                         rt_thread_init(&usart3t_thread,                         //线程控制块
                   "usart3t",                               //线程名字,在shell里面可以看到
                   usart3t_thread_entry,                    //线程入口函数
                   RT_NULL,                             //线程入口函数参数
                   &rt_usart3t_thread_stack[0],             //线程栈起始地址
                   sizeof(rt_usart3t_thread_stack),          //线程栈大小
                   3,    //线程的优先级
                   20);                                 //线程时间片
    rt_thread_startup(&usart3t_thread);                     //启动线程led0_thread  

rt_thread_init(&uart4t_thread,                         //线程控制块
                   "uart4t",                               //线程名字,在shell里面可以看到
                   uart4t_thread_entry,                    //线程入口函数
                   RT_NULL,                             //线程入口函数参数
                   &rt_uart4t_thread_stack[0],             //线程栈起始地址
                   sizeof(rt_uart4t_thread_stack),          //线程栈大小
                   3,    //线程的优先级
                   20);                                 //线程时间片
    rt_thread_startup(&uart4t_thread);                     //启动线程led0_thread

rt_thread_init(&usart6t_thread,                         //线程控制块
                   "usart6t",                               //线程名字,在shell里面可以看到
                   usart6t_thread_entry,                    //线程入口函数
                   RT_NULL,                             //线程入口函数参数
                   &rt_usart6t_thread_stack[0],             //线程栈起始地址
                   sizeof(rt_usart6t_thread_stack),          //线程栈大小
                   3,    //线程的优先级
                   20);                                 //线程时间片
    rt_thread_startup(&usart6t_thread);                     //启动线程led0_thread




rt_thread_init(&upsent_thread,                         //线程控制块
                   "upsent",                              //线程名字,在shell里面可以看到
                   upsent_thread_entry,                    //线程入口函数
                   RT_NULL,                             //线程入口函数参数
                   &rt_upsent_thread_stack[0],                //线程栈起始地址
                   sizeof(rt_upsent_thread_stack),         //线程栈大小
                   3,    //线程的优先级
                   20);                                           

        rt_thread_startup(&upsent_thread);             //启动线程led1_thread

}

串口初始化没问题,至始至终只有一个在执行,其他都不执行,请问哪里出了问题

正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2024-11-25 11:13

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表