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

边栏推荐
- 布尔盲注需简化代码
- The ` monorepo ` ` hoist ` mechanism lead to the change of the loading configuration file path
- 中国食品产业园区行业前景规划建议及投融资模式分析报告2022~2028年
- EIP-5058 能否防止NFT项目方提桶跑路?
- spark sql 报错 Can‘t zip RDDs with unequal numbers of partitions
- A.1#【内存管理】——1.1.2 zone: struct zone
- 当我们在看Etherscan的时候,到底在看什么?
- 【源码解读】火爆的二舅币真的跑路了吗?
- c#,.net 下载文件 设置断点
- Qemu 搭建Armv8 平台
猜你喜欢
随机推荐
中国生活垃圾处理行业十四五规划与投融资模式分析报告2022~2028年
ucos任务调度原理
中国生物反应器行业市场投资分析及前景预测报告2022~2028年
[CSRF, SSRF, XXE, PHP deserialization, Burpsuite]
【第一周】深度学习和pytorch基础
动漫 吞噬星空
Ansible installation and deployment detailed process, basic operation of configuration inventory
【HQL】(二) 查询使用正则表达式做列选择
自监督论文阅读笔记 DenseCL:Dense Contrastive Learning for Self-Supervised Visual Pre-Training
进程间通信IPC - 信号量
Hook初探索
该描述怎么写成SQL语句
MySQL 慢查询
时间盲注脚本
二阶段提问总结
中国磷化铟技术行业发展趋势与前景规划建议报告2022~2028年
中国聚氯乙烯(PVC)土工膜发展动态及投资前景预测报告2022~2028年
自监督论文阅读笔记 Self-Supervised Deep Learning for Vehicle Detection in High-Resolution Satellite Imagery
【DC-4 Range Penetration】
【DC-5 Range Penetration】









