LITE_OS_SEC_TEXT_INITUINT32LOS_MemInit(VOID *pPool,UINT32uwSize) { BOOLbRet =TRUE; UINTPTRuvIntSave; #可以支持多了不连续的内存,这样提供mempool的指针连在g_pPoolHead中 #if (LOSCFG_MEM_MUL_POOL == YES) VOID *pNext = g_pPoolHead; VOID * pCur = g_pPoolHead; UINT32uwPoolEnd; #e...
接着看下已使用内存节点结构体OsMemUsedNodeHead,该结构体比较简单,直接以动态内存节点头结构体OsMemNodeHead作为唯一的成员。 struct OsMemUsedNodeHead { struct OsMemNodeHead header; }; 我们再看下空闲内存节点结构体OsMemFreeNodeHead,除了动态内存节点头结构体OsMemNodeHead成员,还包含2个指针分别指向上一个...
Membox内存管理,支持静态内存和动态内存,二选一,分别由宏开关LOSCFG_KERNEL_MEMBOX_STATIC和LOSCFG_KERNEL_MEMBOX_DYNAMIC进行控制。Membox静态内存是默认算法,需要开发者提供一个栈中的静态内存区域;Membox动态内存支持从堆里动态分配内存,相应的内存代码在kernel\base\mem\membox\los_membox_dyn.c,代码比较简单,...
代码运行次数:0 /** * This function will print a formatted string on system console * * @param fmt the format */voidrt_kprintf(constchar*fmt,...){va_list args;rt_size_t length;staticchar rt_log_buf[RT_CONSOLEBUF_SIZE];va_start(args,fmt);/* the return value of vsnprintf is the ...
De-allocate any dynamic memory; OSTaskDel(OS_PRIO_SELF); (3) }else{/*Application code*/} } } (1)当OSTaskDelReq()返回OS_TASK_DEL_REQ给它的调用者时,它表明另一个任务请求删除这个任务。 (2)和(3)在这种情况下,要删除的任务释放所有的资源,并调用OSTaskDel(OS_PRIO_SELF)来删除自己。如前所述,...
在讨论分配内存之前,我们将先讨论释放,因为它更简单。为了释放内存,我们必须要做的惟一一件事情就是, 获得我们给出的指针,回退sizeof(struct mem_control_block)个字节,并将其 标记为可用的。这里是对应的代码: 清单4. 解除分配函数 void free(void *firstbyte) { ...
Membox内存管理,支持静态内存和动态内存,二选一,分别由宏开关LOSCFG_KERNEL_MEMBOX_STATIC和LOSCFG_KERNEL_MEMBOX_DYNAMIC进行控制。Membox静态内存是默认算法,需要开发者提供一个栈中的静态内存区域;Membox动态内存支持从堆里动态分配内存,相应的内存代码在kernel\base\mem\membox\los_membox_dyn.c,代码比较简单,...
通过make menuconfig打开内存size检查: 目前只有bestfit内存管理算法支持该功能,所以需要使能LOSCFG_KERNEL_MEM_BESTFIT。 Kernel ---> Memory Management ---> Dynamic Memory Management Algorithm ---> bestfit 同时该功能依赖于LOSCFG_BASE_MEM_NODE_SIZE_CHECK,该宏开关可以通过在菜单项中开启“Enable size ch...
(UINT32)len * msgSize); if (queueMem == NULL) { return LOS_ERRNO_QUEUE_CREATE_NO_MEMORY; } ret = OsQueueCreateInternal(len, queueId, msgSize, queueMem, OS_QUEUE_ALLOC_DYNAMIC); if (ret != LOS_OK) { (VOID)LOS_MemFree(m_aucSysMem1, queueMem); return ret; } return LOS_OK...
((VOID *)((UINT8 *)(addr) + OS_MEMBOX_NODE_HEAD_SIZE)) ⑷ #define OS_MEMBOX_NODE_ADDR(addr) \ ((LOS_MEMBOX_NODE *)(VOID *)((UINT8 *)(addr) - OS_MEMBOX_NODE_HEAD_SIZE)) 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. ...