【rtt问题】:RT-Thread动态创建线程编译出错,提示:undefined reference to“rt_thread_create“


1、问题描述

小白刚学RT-Thread,问题记录,以方便查阅;

编译环境:RT-Thread Studio
RT-Thread动态创建线程编译出错,编译后出现了编译错误,代码中提示:undefined reference to"rt_thread_create";
代码没多少内容,在用户main函数写了一个动态创建线程而已,竟然也编译出错,代码如下:

int main(void)
{
    
    
    /************************************************/
    rt_thread_t result_thread = NULL;

    /*动态创建线程*/
    result_thread = rt_thread_create("dynamic_thread1",
                                    dynamic_thread1_entry,
                                    NULL,
                                    1024,
                                    10,
                                    5
                                    );


    if(result_thread == RT_NULL){
    
    

        LOG_E("dynamic_thread1 create fail...\n");
    }
    /************************************************/

    return RT_EOK;
}

2、问题解决

可以跳转到定义rt_thread_create的地方,还是提示没有定义,原因是:
rt_thread_create,属于动态线程,需要开启“内存管理”,在RT-Thread Settings中的内存管理->使能动态内存 设置中默认是Disable Heap,需要选择Small Memory Algorithm 或 SLAB Algorithm for large memory

在这里插入图片描述
配置好的源文件文件 rtconfig.h可以看见 RT_USING_HEAP的宏定义是打开的;
在这里插入图片描述
配置好之后,就不会提示rt_thread_create没有定义了;

其他:
裸机情况下使用动态内存heap:在启动文件(startup_stm32f103xe.s)中调整:

Heap_Size EQU 0x00000200
然后用malloc()获取

在RT-Thread中,如果在rtconfig.h中定义了RT_USING_HEAP,在源文件board.c中rt_hw_board_init()函数中会有一段初始化代码

/* Heap initialization */
#if defined(RT_USING_HEAP)
rt_system_heap_init((void *) HEAP_BEGIN, (void *) HEAP_END);
#endif

猜你喜欢

转载自blog.csdn.net/weixin_42640280/article/details/128380355