【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

  • 3
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值