当前位置:网站首页>ucosII OSMemCreate()函数的解析
ucosII OSMemCreate()函数的解析
2022-08-03 05:24:00 【langaopeng】
ucosII OSMemCreate()函数的解析
OS_MEM *OSMemCreate (void *addr, INT32U nblks, INT32U blksize, INT8U *perr)
{
plink = (void **)addr;
pblk = (INT8U *)((INT32U)addr + blksize);
for (i = 0; i < (nblks - 1); i++) {
*plink = (void *)pblk;
plink = (void **)pblk;
pblk = (INT8U *)((INT32U)pblk + blksize);
}
*plink = (void *)0;
pmem->OSMemAddr = addr;
pmem->OSMemFreeList = addr;
pmem->OSMemNFree = nblks;
pmem->OSMemNBlks = nblks;
pmem->OSMemBlkSize = blksize;
*perr = OS_ERR_NONE;
return (pmem);
}
当nblk = 2,也就是说准备申请两块动态内存块时。
当执行 plink = (void **)addr;时,因为addr之前是一维指针,没有指向地址,所以需要
强转成二维指针,使用addr能指向地址,此时把addr赋给plink。但*plink还不知指向哪里。
当执行pblk = (INT8U *)((INT32U)addr + blksize);后,即把第二块的头指针赋给
pblk。
当执行*plink = (void *)pblk; 后,即把第二块头指针赋给*plink,即addr内装的指针。
即可知当传递addr时,addr是指向的是第一块内存的头指针,强转时,addr内装的
指针是指向第二块头指针。
边栏推荐
猜你喜欢
随机推荐
【解读合约审计】Harmony的跨链桥是如何被盗一亿美金的?
自监督论文阅读笔记 Incremental-DETR:Incremental Few-Shot Object Detection via Self-Supervised Learning
自监督论文阅读笔记DisCo: Remedy Self-supervised Learning on Lightweight Models with Distilled Contrastive
深度学习理论课程第四、五章总结
memblock
自监督论文阅读笔记Reading and Writing: Discriminative and Generative Modelingfor Self-Supervised Text Recogn
Qlik Sense 聚合函数及范围详解(Sum、Count、All、ToTaL、{1})
[frp intranet penetration]
观看华为AI技术领域课程--深度学习前三章总结
A.1#【内存管理】——1.1.3 page: struct page
用iPhone前摄3D人像建模,Meta:我看行
A.1#【内存管理】——1.1.2 zone: struct zone
c#,.net 下载文件 设置断点
Oracle 日历表详解(含节假日)
block底层探索
【第一周】深度学习和pytorch基础
Ansible installation and deployment detailed process, basic operation of configuration inventory
【第二周】卷积神经网络
磁盘空间管理
Convolutional Nerual Nertwork(CNN)