This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

关于C6748的DDR的内存软件配置

Other Parts Discussed in Thread: SYSBIOS

我现在使用是C6748的芯片,我有一个疑问啊,就是如果改变外部的DDR的大小,软件是否需要重新配置,否则,系统如何得知我当前使用的内存是多少,如果我内存使用完了呢?

Thanks

  • DDR大小与软件配置相关的是列地址宽度(page size). bank数等.

    系统没办法知道内存大小。需要你人为设定。或者自己通过一些技巧性的方法来判断内存大小。

  • 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.

  • 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节.