当前位置:网站首页>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内装的
指针是指向第二块头指针。

边栏推荐
猜你喜欢

卷积神经网络入门
ASP.NET MVC3的伪静态实现

Let small program development into ` tailwind jit ` era

梯度下降、反向传播
代码没写完,哪里有脸睡觉!17 张程序员壁纸推荐

Kettle 从资源库中载入新的转换出错(Invalid byte 1 of 1-byte UTF-8 sequence)

Qlik Sense 临时处理表数据详解(Resident)

交叉熵(第六周)

IPC 通信 - IPC

自监督论文阅读笔记 Multi-motion and Appearance Self-Supervised Moving Object Detection
随机推荐
理论上的嵌入式跑马灯
磁盘空间管理
Execute the mysql script file in the docker mysql container and solve the garbled characters
中国食品产业园区行业前景规划建议及投融资模式分析报告2022~2028年
Kettle 从资源库中载入新的转换出错(Invalid byte 1 of 1-byte UTF-8 sequence)
VSCODE 常见问题
Kettle Spoon 安装配置详解
SAP HANA 新增一列时报错详解
微信小程序 自定义tabBar
嵌入汇编-1 格式讲解
[Rebound shell and privilege escalation]
Invalid signature file digest for Manifest main attributes解决方法
Dynamic adjustment subject web system?Look at this one is enough
联邦学习摘录
page fault-页异常流程
中国生物反应器行业市场投资分析及前景预测报告2022~2028年
东南亚跨境电商
【解读合约审计】Harmony的跨链桥是如何被盗一亿美金的?
神经网络基础
设备树解析源码分析<devicetree>-1.基础结构