Heap_Size EQU 0x00000800AREA HEAP, NOINIT, READWRITE, ALIGN=3__heap_baseHeap_Mem SPACE Heap_Size__heap_limit
unsigned char Heap_Mem[Heap_Size] = {0};
__user_initial_stackheapLDR R0, = Heap_Mem ; 返回系統中堆內存起始地址LDR R1, =(Stack_Mem + Stack_Size)LDR R2, = (Heap_Mem + Heap_Size); 返回系統中堆內存的結束地址LDR R3, = Stack_MemBX LR
unsigned char mem_buffer[512];unsigned char *mem_offset = & mem_buffer;void *malloc(int size){unsigned char *tmp = mem_offset;mem_offset += size;return (void *)tmp;}void free(void *mem){mem_offset = mem;}
//內存池的描述,使用聯合體,體現窮人的智慧。就如,我一同學說的:一個字節,恨不得掰成8個字節來用。typedef union mem {struct list_head list;unsigned char buffer[MEM_BUFFER_SIZE];}mem_t;static union mem gmem[MEM_BUFFER_LEN];LIST_HEAD(mem_pool);//分配內存void *mem_pop(){union mem *ret = NULL;psr_t psr;psr = ENTER_CRITICAL();if(!list_empty(&mem_pool)) { //有可用的內存池ret = list_first_entry(&mem_pool, union mem, list);//printf("mem_pool = 0x%p ret = 0x%p\n", &mem_pool, &ret->list);list_del(&ret->list);}EXIT_CRITICAL(psr);return ret;//->buffer;}//回收內存void mem_push(void *mem){union mem *tmp = NULL;psr_t psr;tmp = (void *)mem;//container_of(mem, struct mem, buffer);psr = ENTER_CRITICAL();list_add(&tmp->list, &mem_pool);//printf("free = 0x%p\n", &tmp->list);EXIT_CRITICAL(psr);}//初始化內存池void mem_pool_init(){int i;psr_t psr;psr = ENTER_CRITICAL();for(i=0; i<MEM_BUFFER_LEN; i++) {list_add(&(gmem[i].list), &mem_pool);//printf("add mem 0x%p\n", &(gmem[i].list));}EXIT_CRITICAL(psr);}
飛機上一般是什么操作系統?
高速CAN、容錯CAN、LIN總線有什么區別?
大佬終于把鴻蒙OS講明白了,收藏了!