- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
SYS-BIOS中malloc和Memory_alloc的区别
2013.3
TI CI FAE
SYS-BIOS中malloc和Memory_alloc的区别 1
2013.3 1
TI CI FAE 1
1 关于malloc和Memory_alloc的区别 2
1.1 Summary 2
1.2 在BIOS的cfg文件中通过脚本创建heap 2
1.3 在map文件中的线索 3
1.4 HeapBuf的使用 3
1.5 HeapMem的使用 4
1.6 Malloc的使用 5
1.7 Example 5
关于malloc和Memory_alloc的区别
Summary
Malloc是标准C的函数,它是从system heap上分配buffer。在使用BIOS的情况下,通过BIOS.heapSize = 0x2000设定system heap的大小,在不使用BIOS的情况下要在cmd文件中用-heap设定sytem heap的大小。函数API是 void *malloc(unsigned int num_bytes);定义在stdilb.h头文件中。Malloc得到的buffer用free释放,API是void free(void *_ptr);
Memory_alloc是从用户创建的heap(不是system heap)上分配bufer,它是BIOS的API,有下面4个入参。用户通过编辑BIOS的cfg文件可以创建自己的heap,参见下文。
参数1 heap handler,即 指向heap object的handler
参数2 size 需要分配的heap的size
参数3 align 对齐特性要求
参数4 Error_block 可以设成NULL
Memory_alloc得到的buffer用Memory_free释放,API有3个参数
参数1 Heap_Handle,即指向heap object的handler
参数2 block, 即要释放的buffer的指针
参数3 size, 即要释放的buffer的size
两年国外需要注意的是,用户可以创建Heapbuf和HeapMem两种堆,它们使用的区别是HeapBuf是以固定size的block为单位分配的,block的size在HeapBuf创建的时候就定死了。HeapMem和我们常用heap用法一样,要多少分多少。
在BIOS的cfg文件中通过脚本创建heap
/*
* The BIOS module will create the default heap for the system.
* Specify the size of this default heap.
*/
BIOS.heapSize = 0x2000;
var heapBufParams = new HeapBuf.Params;
heapBufParams.blockSize = 32; // heapBuf是以block为单位分配的
heapBufParams.numBlocks = 2;
heapBufParams.align = 8;
Program.global.task0Heap = HeapBuf.create(heapBufParams);
var heapMemParams2 = new HeapMem.Params;
heapMemParams2.size = 512; // heapMem是要多少分多少
heapMemParams2.align = 8;
Program.global.task1Heap = HeapMem.create(heapMemParams2);
下面是这3个heap在memory中的示意图,上图的物理地址是根据后面运行的结果推出来的,heap的具体位置是在link的时候确定的。
在map文件中的线索
Map文件显示了link以后这些heap被分配在哪个section:
.far 0 0080d4a0 00003a68 UNINITIALIZED
0080d4a0 00002a50 memory_pe66.oe66 (.far)
// 从上面可以看出BIOS中定义的heap段被分配在.far section
0080fef0 memory_pe66.oe66 (.far:taskStackSection)
00810ef0 memory.obj (.far)
文档评论(0)