DSPC6678的片上存储空间的分配机制

https://blog.csdn.net/wssjn1994/article/details/83068009?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522160259216319195188330363%2522%252C%2522scm%2522%253A%252220140713.130102334.pc%255Fall.%2522%257D&request_id=160259216319195188330363&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~all~first_rank_v2~rank_v28-4-83068009.first_rank_ecpm_v3_pc_rank_v2&utm_term=C6678%E5%A6%82%E4%BD%95%E5%AF%B9%E4%B8%8D%E5%90%8C%E6%A0%B8%E5%88%86%E9%85%8D%E4%B8%8D%E5%90%8C%E5%9C%B0%E5%9D%80

嵌入式的设备如DSP上的栈空间是Kb级别,在函数内定义数组或申请空间都不能像linux下那样直接定义和申请,要么定义成全局的,要么指向一块划分好的空间,否则就会造成覆盖代码段等的问题。

片上有三片可读写的内存区域

L2:0x00800000-0x00880000        512Kb

L3:0x0C000000-0x0C400000      4Mb

DDR:0x80000000-0xFFFFFFFF  2Gb

DSP的所有变量,函数,以及程序员定义的地址都保存在这三片空间上,程序员在定义变量时,若没有特殊规定,则编译器自动把变量分配到可读写空间上的任意位置,所以当程序员使用int *p = 0x00810000;这种语法的时候,很有可能会覆盖掉程序保存变量和函数的空间,导致程序运行异常,因此需要一个.cmd文件来约束,哪些地方用来给程序员自己定义变量地址用,哪些地方用来给程序为变量和函数申请内存来用。


/******************************************************************************
 * Copyright (c) 2010-2011 Texas Instruments Incorporated - http://www.ti.com
 * 
 *  Redistribution and use in source and binary forms, with or without 
 *  modification, are permitted provided that the following conditions 
 *  are met:
 *
 *    Redistributions of source code must retain the above copyright 
 *    notice, this list of conditions and the following disclaimer.
 *
 *    Redistributions in binary form must reproduce the above copyright
 *    notice, this list of conditions and the following disclaimer in the 
 *    documentation and/or other materials provided with the   
 *    distribution.
 *
 *    Neither the name of Texas Instruments Incorporated nor the names of
 *    its contributors may be used to endorse or promote products derived
 *    from this software without specific prior written permission.
 *
 *  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 
 *  "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 
 *  LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
 *  A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 
 *  OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 
 *  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 
 *  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
 *  DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
 *  THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 
 *  (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 
 *  OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 * 
 *****************************************************************************/
/*
 *  Linker command file
 *
 */
 
-c
-heap  0x8000
-stack 0x5000
 
/* Memory Map 1 - the default */
MEMORY
{
 
    L1PSRAM (RWX)  : org = 0x00E00000, len = 0x7FFF
    L1DSRAM (RWX)  : org = 0x00F00000, len = 0x7FFF
 
    L2SRAM (RWX)   : org = 0x00800000, len = 0x50000
    L2SELFUSE      : org = 0x00850000, len = 0x30000
    MSMCSRAM (RWX) : org = 0xc000000, len = 0x20000
    DATASRAM       : org = 0xc100000, len = 0x200000
   // FPGADATA       : org = 0xc300000, len = 0x20000
    NOCACHE		   : org = 0x50050000,	len = 30000h
 
    DDR3DATA (RWX)  : org =0x80000000,len=0x10000000
    DDR3 (RWX)     : org = 0x90000000,len = 0x10000000
    DDR3_MID (RWX)     : org = 0xA0000000,len = 0x10000000
}
 
SECTIONS
{
    .csl_vect   >       L2SRAM//srio测试可以放在L2或者L3上
    .text       >       L2SRAM//srio测试可以放在L2或者L3上		//代码段
    GROUP (NEAR_DP)
    {
    .neardata												//已初始化的全局单变量
    .rodata													//带const修饰的已初始化的全局单变量
    .bss													//未初始化的全局单变量
    } load > L2SRAM//srio测试可以放在L2
    .stack      >       L2SRAM//srio测试可以放在L2			//栈
    .cinit      >       L2SRAM//srio测试可以放在L2或者L3上		//程序初始化段
    .cio        >       L2SRAM//srio测试可以放在L2			//printf用到的段
    .const      >       L2SRAM//srio测试可以放在L2或者L3上		//带const修饰的全局多变量
    .data       >       L2SRAM//srio测试可以放在L2或者L3上
    .switch     >       L2SRAM//srio测试可以放在L2或者L3上		//switch表
    .sysmem     >       MSMCSRAM//srio测试可以放在L2或者L3上	//堆,malloc
    .far        >       L2SRAM//srio测试必须放在L2或者L3上		//未初始化的全局多变量
    .testMem    >       L2SRAM//srio测试可以放在L2或者L3上
    .fardata    >       L2SRAM//srio测试可以放在L2或者L3上		//已初始化的全局多变量
    platform_lib > 		L2SRAM//srio测试可以放在L2或者L3上
    .L2  > 		L2SRAM//srio测试可以放在L2或者L3上
    .L3 	    >       MSMCSRAM
    .NoCache 	  >   NOCACHE
 
 
    //必须放在MSMCSRAM
    .qmssSharedMem:          load >> MSMCSRAM
    .cppiSharedMem:          load >> MSMCSRAM
    .i2ceeprom:     load >> MSMCSRAM//i2ceeprom段必须放在MSMCSRAM
    .emif16nandflash 	load >> MSMCSRAM//emif16nandflash段必须放在MSMCSRAM
    .srioSharedMem >   	MSMCSRAM//srio放在msmc上的代码
    .ChipIntc     >     MSMCSRAM //片级中断控制器的段
    .Sharemem   >       MSMCSRAM //edma3多核测试main.c程序中的段
    .timerSharedMem   >       MSMCSRAM //timer多核测试main.c程序中的段
 
    //必须放在L2上
    .srioL2Mem	>   	L2SRAM//srio放在L2上的代码
    .qmssL2Mem:          load >> L2SRAM//qmss放在L2上的代码
    .cppiL2Mem:          load >> L2SRAM//cppi放在L2上的代码
    .CoreIntcL2Mem:		load >> L2SRAM//coreintc放在L2上的代码
    .edma3				load >> L2SRAM//edma3放在L2上的代码
    .DDRDATA:			   load>> DDR3DATA
    .DDR3_MID:			   load>> DDR3_MID
}

MEMORY中定义的是所有内存的分配情况,SECTIONS定义的是每一块内存上定义了些什么东西。

    //必须放在MSMCSRAM
    .qmssSharedMem:          load >> MSMCSRAM
    .cppiSharedMem:          load >> MSMCSRAM
    .i2ceeprom:     load >> MSMCSRAM//i2ceeprom段必须放在MSMCSRAM
    .emif16nandflash 	load >> MSMCSRAM//emif16nandflash段必须放在MSMCSRAM
    .srioSharedMem >   	MSMCSRAM//srio放在msmc上的代码
    .ChipIntc     >     MSMCSRAM //片级中断控制器的段
    .Sharemem   >       MSMCSRAM //edma3多核测试main.c程序中的段
    .timerSharedMem   >       MSMCSRAM //timer多核测试main.c程序中的段
 
    //必须放在L2上
    .srioL2Mem	>   	L2SRAM//srio放在L2上的代码
    .qmssL2Mem:          load >> L2SRAM//qmss放在L2上的代码
    .cppiL2Mem:          load >> L2SRAM//cppi放在L2上的代码
    .CoreIntcL2Mem:		load >> L2SRAM//coreintc放在L2上的代码
    .edma3				load >> L2SRAM//edma3放在L2上的代码
    .DDRDATA:			   load>> DDR3DATA
    .DDR3_MID:			   load>> DDR3_MID

定义的是C6455库的内存分配方式,若要使用哪种库,就必须按照相应的规则去定义。

  • 2
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
DSP C6678 GE是德州仪器(Texas Instruments)推出的一款高性能数字信号处理器(Digital Signal Processor, DSP)芯片。该芯片采用TI的TMS320C66x DSP核心,是TMS320C66x系列中的一员。C6678 GE提供了高达1.25 GHz的工作频率,并且具备8个独立的DSP核心,每个DSP核心都有32KB的L1D缓存和32KB的L1P缓存。此外,C6678 GE还拥有多个高速片上总线和大容量的共享L2缓存,用于提供更高的数据吞吐量和更快的程序执行速度。 C6678 GE是一款面向高性能计算的DSP芯片,可以广泛应用于各种需要进行大规模数据处理和计算的领域。它在通信基础设施、医疗仪器、测量设备、雷达系统等应用中发挥着重要作用。在通信领域,C6678 GE可以用于实现高速数据传输、信号解调、信号处理、多通道数据分析和算法加速等功能。在医疗领域,C6678 GE可以用于医学图像处理、生物信号处理、医疗监控和诊断等方面。在测量和雷达系统中,C6678 GE可以用于实时数据采集和处理、目标跟踪和识别、波形分析和频谱分析等方面。 C6678 GE不仅具备强大的计算能力,还具有灵活的各种接口和通信功能,可以和其他硬件设备和外围设备进行高速数据交互。它支持多种通信接口标准,如千兆以太网、PCI Express和串行 RapidIO等,并且有较为丰富的外围设备接口,如高速SPI、I2C和UART等。这些接口和通信功能使得C6678 GE可以方便地集成到各种系统中,并与其他硬件设备和软件系统进行快速的数据交换和协作。 总的来说,DSP C6678 GE是一款高性能的数字信号处理器芯片,具备强大的计算能力和丰富的接口功能,适用于各种需要进行大规模数据处理和计算的应用领域。它在通信、医疗、测量和雷达等领域有广泛的应用前景。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值