我现在使用是C6748的芯片,我有一个疑问啊,就是如果改变外部的DDR的大小,软件是否需要重新配置,否则,系统如何得知我当前使用的内存是多少,如果我内存使用完了呢?
Thanks
Tony Tang:
DDR大小与软件配置相关的是列地址宽度(page size). bank数等.
系统没办法知道内存大小。需要你人为设定。或者自己通过一些技巧性的方法来判断内存大小。
chenyu zhang2:
回复 Tony Tang:
hi Tony:
我现在是C6748的sysbios程序,这个page size.bank在哪里设置的?
“系统没办法知道内存大小。需要你人为设定。”
对于你说的这个,我们先不考虑那么复杂,就假设我是知道我的DDR内存大小的,比如64M,那么我这个内存管理是如何进行的呢?比如我现在写一个malloc(),那他申请的这个内存是从哪里申请的呢?是从片上内存还是从DDR?如果从DDR的话,我理解我应该先从总线上把这部分内存初始化管理起来才对啊。
我看有一段参考例程它是这样写的:
Ptr bufs[4]; IHeap_Handle heap = HeapMem_Handle_upCast(heapMem0); System_printf("Initial task1 heap status\n"); PrintHeapStatus(heap); bufs[0] = Memory_alloc(heap, 16, 0, NULL); bufs[1] = Memory_alloc(heap, 32, 0, NULL); bufs[2] = Memory_alloc(heap, 64, 0, NULL); System_printf("Current HeapBuf status 1\n"); PrintHeapStatus(heap); Memory_free(heap, bufs[1], 32); Memory_free(heap, bufs[2], 64);
但是我没有找到Memory_alloc定义的地方,我不知道他到底是如何管理的,所以我现在对这一部分可以说是完全不理解。
Thanks.
Tony Tang:
回复 chenyu zhang2:
chenyu zhang2我现在是C6748的sysbios程序,这个page size.bank在哪里设置的?
这是硬件初始部分的,与操作系统无关,在DDR的寄存器初始化配置里。
chenyu zhang2比如我现在写一个malloc(),那他申请的这个内存是从哪里申请的呢?是从片上内存还是从DDR?如果从DDR的话,我理解我应该先从总线上把这部分内存初始化管理起来才对啊。
这是纯软件的问题,malloc是从heap里分配的。在C环境初始化时就把heap的指针初始化好了,然后针对这个指针进行操作。而heap的分配是在cmd里指令的,用BIOS的情况下是在BIOS的配置做的。跟cmd里的配置其实是一回事。
可以看一下BIOS安装目录下的文档:C:\ti\bios_6_45_01_29\docs\Bios_User_Guide.pdf的7.7.2节.
TI中文支持网





