在阅读rtt代码是发现RT_USING_HEAP宏(/* Using Dynamic Heap Management */)scheduler.c --> void rt_system_scheduler_init(void)中有#ifdef RT_USING_HEAP/* init th ...
线程删除rt_thread_delete() 接口的参数和返回值见下表: 这个函数仅在使能了系统动态堆时才有效(即 RT_USING_HEAP 宏定义已经定义了)。 3.2初始化和脱离线程 线程的初始化可以使用下面的函数接口完成,来初始化静态线程对象: rt_err_trt_thread_init(structrt_thread*thread,constchar*name,void(*entry)(void*p...
静态的main线程,未使能:RT_USING_HEAP,退出后,内存资源不会释放。 动态的main线程,使能了:RT_USING_HEAP后,退出后,内存资源得到释放。 实际对比内存资源的释放大小,发现,动态申请,会额外占用一点内存资源,如12字节,这部分在后面内存管理后再深入的梳理。 动态线程的资源回收: RT_USING_HEAP main存在时:线程栈大小...
静态的main线程,未使能:RT_USING_HEAP,退出后,内存资源不会释放。 动态的main线程,使能了:RT_USING_HEAP后,退出后,内存资源得到释放。 实际对比内存资源的释放大小,发现,动态申请,会额外占用一点内存资源,如12字节,这部分在后面内存管理后再深入的梳理。 动态线程的资源回收: RT_USING_HEAP main存在时:线程栈大小...
在使用堆内存RT_USING_HEAP时,必须要在系统初始化的时候进行堆内存的初始化。这个函数会把参数begin_addr,end_addr区域的内存空间作为内存堆来使用。由源代码可知,初始化时小内存管理算法通过传进来的起始地址和末尾地址将动态堆内存初始化为两个内存块:第一个内存块指向动态堆内存首地址,可用空间为整个可分配的内存...
void rt_system_heap_init(void *begin_addr, void *end_addr); 在使用堆内存RT_USING_HEAP时,必须要在系统初始化的时候进行堆内存的初始化。这个函数会把参数begin_addr,end_addr区域的内存空间作为内存堆来使用。 由源代码可知,初始化时小内存管理算法通过传进来的起始地址和末尾地址将动态堆内存初始化为两个...
这个函数仅在使能了系统动态堆时才有效(即RT_USING_HEAP 宏定义已经定义了)。 2.初始化和脱离线程 (1)初始化线程 线程的初始化可以使用下面的函数接口完成,来初始化静态线程对象: 代码语言:javascript 复制 rt_err_trt_thread_init(struct rt_thread*thread,constchar*name,void(*entry)(void*parameter),void*...
#ifdefined(RT_USING_USER_MAIN) && defined(RT_USING_HEAP) #defineRT_HEAP_SIZE 1024 staticuint32_trt_heap[RT_HEAP_SIZE];// heap default size: 4K(1024 * 4) RT_WEAKvoid*rt_heap_begin_get(void) { returnrt_heap; } RT_WEAKvoid*rt_heap_end_get(void) ...
这个函数仅在使能了系统动态堆时才有效(即RT_USING_HEAP 宏定义已经定义了)。 2.初始化和脱离线程 (1)初始化线程 线程的初始化可以使用下面的函数接口完成,来初始化静态线程对象: rt_err_t rt_thread_init(struct rt_thread* thread,const char* name,void (*entry)(void* parameter), void* parameter,void...
创建线程有两种方式,根据是否由rt分配内存,分为静态创建线程和动态创建线程。默认是静态分配线程,如果需要使用动态创建线程的话,则需要开启宏定义RT_USING_HEAP,并设置heap相关函数。 二. 静态创建线程 rt_err_t rt_thread_init(struct rt_thread* thread,const char* name,void (*entry)(void* parameter), void...