线程句柄struct rt_device 和 rt_device_t 引发的异常

发布于 2021-05-03 14:56:37

基于RTT Studio写了个LED闪烁函数,为其建立静态线程;发现定义线程句柄的时候,两种方式导致了一种可以运行,一种不可以运行。

/*线程 LED 的入口函数*/ void thread_led_entry(void *parameter){}
/* 初始化线程函数 */ void user_led_thread(void){}

能正常运行的情况

void user_led_thread(void)
{
    rt_err_t rst;
   static struct rt_thread led_thread;     //创建句柄

    rst = rt_thread_init(&led_thread,   
                        "ledshine",    
                        thread_led_entry,   
                        RT_NULL,  
                        rt_led_thread_stack,    
                        THREAD_LED_STACK_SIZE,   
                        THREAD_LED_PRIORITY,  
                        THREAD_LED_TIMESLICE); 
      if (rst == RT_EOK)
    {
        rt_thread_startup(&led_thread);  
    }
}

不能运行的情况

void user_led_thread(void)
{
    rt_err_t rst;
   static struct rt_thread_t led_thread;     //创建句柄

    rst = rt_thread_init(led_thread,   
                        "ledshine",    
                        thread_led_entry,   
                        RT_NULL,  
                        rt_led_thread_stack,    
                        THREAD_LED_STACK_SIZE,   
                        THREAD_LED_PRIORITY,  
                        THREAD_LED_TIMESLICE); 
      if (rst == RT_EOK)
    {
        rt_thread_startup(led_thread);  
    }
}

错误提示

(thread != RT_NULL) assertion failed at function:rt_thread_init, line number:242 

错误提示就是rt_thread_init()里面的第一句断言失败。
对RTT认知有限,不知道这是什么原因。

查看更多

关注者
0
被浏览
76
2 个回答
cxhxy12345
cxhxy12345 5 days ago

第二个当然错了,第一个参数是struct rt_thread *thread
它是一个指针,指向的地址。

你可以看下
https://www.rt-thread.org/document/site/rtthread-studio/applications/thread/rtthread-studio-thread/#_5
有创建静态线程的介绍

flashman2002
flashman2002 5 days ago

第二种情况不能只使用线程结构体的指针,需要有线程结构体的变量才行。

撰写答案

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

发布
问题

分享
好友

手机
浏览

扫码手机浏览