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