zoukankan      html  css  js  c++  java
  • DSP 知识点

    1:自定义数据段

    #pragma DATA_SECTION(symbol,".section")
    Int32 symbol[LENGTH];

    2:前几天遇到一个问题。dsp在执行某一块算法执行的时间太长达到100多ms。这个时间后面通过设置ccs的一些优化选项。减少到42ms。这还是不能达到我们的需求。后来知道我没打开cache。所以执行的时间很长。

    在网上找了好久也没一个确切的办法打开cache。因此在此我详细的给出打开cache的方法。希望能给菜鸟们一点帮助。我也是菜鸟。大家一起进步。如果又不对的地方请老鸟们指正,谢谢。

    #define L2CFG            *(unsigned int*)(0x01840000)  //6747 L2配置缓冲区寄存器宏定义
    #define L1PCFG          *(unsigned int*)(0x01840020)  //6747 L1程序配置缓冲区寄存器宏定义
    #define L1DCFG          *(unsigned int*)(0x01840040)  //6747 L1数据配置缓冲区寄存器宏定义

    void init_cache(void)  
    {
        L1PCFG = 4;
        L1DCFG = 4;
        L2CFG  = 0x01010002;
    }

     

    CMD文件

    -l rts64plus.lib
    -l C6747bsl.lib


    -stack           0x00001000      /* Stack Size */
    -heap            0x00001000      /* Heap Size */

    MEMORY
    {
        VECS:             o = 0x80000000  l = 0x00000f00
        ARMRAM:        o = 0xFFFF0080  l = 0x00001f80

        DSPL2RAM:     o = 0x00800000  l = 0x00040000
        DSPL1PRAM:    o = 0x00E00000  l = 0x00008000
        DSPL1DRAM:   o = 0x00F00000  l = 0x00008000

        DSPL2RAM2:    o = 0x11800000  l = 0x0003FFFF
        DSPL1PRAM2:   o = 0x11E00000  l = 0x00008000
        DSPL1DRAM2:  o = 0x11F00000  l = 0x00008000


        SHAREDRAM:   o = 0x80000f00  l = 0x0001ffff
        SDRAM:           o = 0xC0000000  l = 0x20000000

    }

    SECTIONS

    ".vectors"       >   VECS
        .bss            >   DSPL2RAM
        .cinit           >   DSPL2RAM
        .cio             >   DSPL2RAM
        .const         >   DSPL2RAM
        .stack         >   DSPL2RAM
        .sysmem     >   DSPL2RAM
        .text           >   DSPL2RAM
        .switch        >   DSPL2RAM
        .far             >   DSPL2RAM
        .calcbuffer    >   DSPL2RAM
        .compxbuf   >   DSPL2RAM

        .bufs           >   SHAREDRAM

        .audiobuffer  >   SDRAM
        .buffertemp   >   SDRAM
        .compxbuffer >   SDRAM
    }

    The DATA_SECTION pragma allocates space for the symbol in a section called section name.
    The syntax for the pragma in C is:

    #pragma DATA_SECTION (symbol, "section name");

    定义一个数据段:
              段名为:    "section name"
              段的内容在: symbol 里
    在CCS编程中,如果我们不指定变量的存放位置,编译器会自动的给变量分配一个位置,但是如果有的时候需要把变量放在一个特定的空间内,我们应该如何操作呢,CCS提供了如下的两个指令
    #pragma CODE_SECTION
    #pragma DATA_SECTION
    其中data_section是针对数据空间的,code_section是针对程序空间的,具体的使用办法是
    #pragma DATA_SECTION(bufferB, ”my_sect”)
    char bufferB[512];
    在.cmd文件中建立对应的section就可以使用了。

    注意:在使用#pragma DATA_SECTION时,应该先开辟一个空间,即:#pragma DATA_SECTION(bufferB, ”my_sect”),然后再定义该空间的大小:char bufferB[512];

    #pragma,是一个编译控制指令,可以在编译时动态地调整编译选项,这种指令在不同的编译系统中是不同的.

    #pragma DATA_ALIGN( symbol,constant)

    指令的作用是:排列排列symbol到constant指点的列边界上.

    #pragma DATA_ALIGN( rxdata_stream,   128)
    就是让rxdata_stream地址的末尾7位是0(二进制地址),就是128字节对齐。
    对齐的目的,一般是位了CACHE读写外存。
    如果一个CACHE的line是128字节。这样,如果数据128字节对齐,那么取一个128字节的数据,只使用一个CACHE行就够了。

    char efd;
    #prgma DATA_ALIGN(efd, 8)
    编译时一定会把efd变量的地址安排在8字节对齐的位置上,也即efd地址的低3位一定为0。

    自定义段
    #pragma DATA_SECTION(函数名或全局变量名,"用户自定义在数据空间的段名");
    #pragma CODE_SECTION(函数名或全局变量名,"用户自定义在程序空间的段名");
    不能在函数体内声明。必须在定义和使用前声明
    #pragma可以阻止对未调用的函数的优化
    #pragma DATA_ALIGN( symbol,constant)

    指令的作用是:排列排列symbol到constant指点的列边界上.
    例如

    #pragma DATA_ALIGN( rxdata_stream,   128)
    就是让rxdata_stream地址的末尾7位是0(二进制地址),就是128字节对齐。
    对齐的目的,一般是位了CACHE读写外存。
    如果一个CACHE的line是128字节。这样,如果数据128字节对齐,那么取一个128字节的数据,只使用一个CACHE行就够了。
    #prgma DATA_ALIGN(efd, 8)
    编译时一定会把efd变量的地址安排在8字节对齐的位置上,也即efd地址的低3位一定为0。

     

    3:疑问

    1:我把程序中的一个数组定义到DSPL2RAM段。不知道怎么回事。该数组的值始终全部为0。定义到SHAREDRAM或者SDRAM就正常了。

    2:同样一个程序。昨天那一块算法执行时间为6ms。今天却跑了18ms。很奇怪。谁能帮我解释一下呀?

  • 相关阅读:
    深入浅出Mybatis系列(一)Mybatis入门
    LinkedList其实就那么一回事儿之源码分析
    深入浅出Mybatis系列(八)mapper映射文件配置之select、resultMap
    ArrayList其实就那么一回事儿之源码浅析
    springMVC 源码解读系列(一)初始化
    深入浅出Mybatis系列(三)配置详解之properties与environments(mybatis源码篇)
    深入浅出Mybatis系列(四)配置详解之typeAliases别名(mybatis源码篇)
    深入浅出Mybatis系列(六)objectFactory、plugins、mappers简介与配置
    深入浅出Mybatis系列(二)配置简介(mybatis源码篇)
    深入浅出Mybatis系列(七)mapper映射文件配置之insert、update、delete
  • 原文地址:https://www.cnblogs.com/ldjrl2013/p/3835277.html
Copyright © 2011-2022 走看看