C6748程序运行速度 - TMS320C6748 - 嵌入式开发者社区 - 51ele.net
设为首页收藏本站

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 665|回复: 3

[已解决] C6748程序运行速度

[复制链接]

36

主题

70

帖子

1340

积分

金牌会员

Rank: 6Rank: 6

积分
1340
发表于 2018-12-7 15:26:33 | 显示全部楼层 |阅读模式
写了一小段程序,测C6748程序运行速度,实际上就是通过用for循环对数组循环赋值,测试运行速度,程序如下:

unsigned char  buffer[1024];
void RunSpeedTest(void)
{
    unsigned short i;
    char put_char[50];
    // 计数器(用于性能测试)
    long long t_start, t_stop, t_overhead;
    TSCL = 0;
    TSCH = 0;
    t_start = _itoll(TSCH, TSCL);
    t_stop = _itoll(TSCH, TSCL);
    t_overhead = t_stop - t_start;

    t_start = _itoll(TSCH, TSCL);

    for(i = 0; i < 1024; i++)
    {
        buffer[i] = 12;
    }

    t_stop = _itoll(TSCH, TSCL);

    sprintf(put_char,"\t run_speed_test Speed: %f MB/s \n",
            (float)1024 / 1024 / 1024 * 456000000/((t_stop - t_start) - t_overhead));
    UARTPuts(put_char, -2);
}

结果输出: run_speed_test Speed: 1.516573 MB/s
程序是放在DDR里运行的,感觉这也太太太慢了吧,还请高人指点下,这速度正常吗?

CMD文件如下:
/****************************************************************************/
/*                                                                          */
/*              DSP C6748 内存空间分配定义                      */
/*                                                                          */
/*                                                                          */
/****************************************************************************/

MEMORY
{
#ifdef DSP_CORE
/****************************************************************************/
/*                                                                          */
/*              DSP 专有内存区域                                            */
/*                                                                          */
/****************************************************************************/
    DSPL2ROM     o = 0x00700000  l = 0x00100000  /* 1MB   L2 DSP 本地 ROM (DSP ROM Bootloader) */
    DSPL2RAM     o = 0x00800000  l = 0x00040000  /* 256kB L2 DSP 本地 RAM */
    DSPL1PRAM    o = 0x00E00000  l = 0x00008000  /* 32kB  L1 DSP 本地程序 RAM */
    DSPL1DRAM    o = 0x00F00000  l = 0x00008000  /* 32kB  L1 DSP 本地数据 RAM */
#endif

/****************************************************************************/
/*                                                                          */
/*              公共内存区域                                                */
/*                                                                          */
/****************************************************************************/
    SHDSPL2ROM   o = 0x11700000  l = 0x00100000  /* 1MB   L2 共享内置 ROM */
    SHDSPL2RAM   o = 0x11800000  l = 0x00040000  /* 256KB L2 共享内置 RAM */
    SHDSPL1PRAM  o = 0x11E00000  l = 0x00008000  /* 32KB  L1 共享内置程序 RAM */
    SHDSPL1DRAM  o = 0x11F00000  l = 0x00008000  /* 32KB  L1 共享内置数据 RAM */

    EMIFACS0     o = 0x40000000  l = 0x20000000  /* 512MB SDRAM (CS0) */
    EMIFACS2     o = 0x60000000  l = 0x02000000  /* 32MB  异步          (CS2) */
    EMIFACS3     o = 0x62000000  l = 0x02000000  /* 32MB  异步          (CS3) */
    EMIFACS4     o = 0x64000000  l = 0x02000000  /* 32MB  异步          (CS4) */
    EMIFACS5     o = 0x66000000  l = 0x02000000  /* 32MB  异步          (CS5) */

    SHRAM        o = 0x80000000  l = 0x00020000  /* 128KB 共享 RAM */
    DDR2         o = 0xC0001000  l = 0x08000000  /* 128MB  DDR2 分配给 DSP */
       
        EntryPoint   o = 0xC0000000  l = 0x00000800  /* 2 KB  C 语言入口点 */
        Vector       o = 0xC0000800  l = 0x00000800  /* 2 KB  中断向量表 */

/****************************************************************************/
/*                                                                          */
/*              外设内存区域                                                */
/*                                                                          */
/****************************************************************************/
    SYSCFG0      o = 0x01C14000  l = 0x00001000  /* 4K    SYSCFG0 */
    uPP          o = 0x01E16000  l = 0x00001000  /* 4K    uPP */
    GPIO         o = 0x01E26000  l = 0x00001000  /* 4K    GPIO */
    McBSP1       o = 0x01D11000  l = 0x00000800  /* 2K    McBSP1 */

#ifndef DSP_CORE
/****************************************************************************/
/*                                                                          */
/*              ARM 专有内存区域                                            */
/*                                                                          */
/****************************************************************************/
    ARMROM       o = 0xFFFD0000  l = 0x00010000  /* 64kB  ARM 本地 ROM (ARM ROM Bootloader) */
    ARMRAM       o = 0xFFFF0000  l = 0x00002000  /* 8kB   ARM 本地 RAM */
#endif
}

SECTIONS
{
    .text:_c_int00        >  0x11810000                                 /* 可执行代码 C 程序入口点*/
    .text                        >  DDR2                                 /* 可执行代码 */
    .stack                        >  DDR2                            /* 软件系统栈 */

    .cio                        >  DDR2                           /* C 输入输出缓存 */
    ".vectors"                >  Vector                                            /* 中断向量表 */
    .const                        >  DDR2                           /* 常量 */
    .data                        >  DDR2                           /* 已初始化全局及静态变量 */
    .switch                        >  DDR2                           /* 跳转表 */
    .sysmem            >  DDR2                           /* 动态内存分配区域 */

    .args                        >  DDR2
    .ppinfo                        >  DDR2
    .ppdata                        >  DDR2

    /* TI-ABI 或 COFF */
    .pinit                        > DDR2                           /* C++ 结构表 */
    .cinit                        >  DDR2                              /* 初始化表 */

    /* EABI */
    .binit                        >  DDR2
    .init_array                >  DDR2
    .fardata                >  DDR2

    .c6xabi.exidx        >  DDR2
    .c6xabi.extab        >  DDR2

        .init_array     >  DDR2
        GROUP(NEARDP_DATA)
        {
           .neardata
           .rodata
           .bss
        }               >  DDR2
    .far: fill = 0x0, load > DDR2

        /* DDR2 */
    .buffer                        >  DDR2

        /* 外设  */
        .Reg_SYSCFG0        >  SYSCFG0
        .Reg_uPP                    >  uPP
        .Reg_GPIO                >  GPIO
        .Reg_McBSP1        >  McBSP1

        .s_DataFIFO                        >  DDR2
        .L2RAM                 > SHDSPL2RAM
}




最佳答案

将需要连续访问的数据段放到L2RAM中,可以提高代码运行效率。
最近访问 头像模式 列表模式
回复

使用道具 举报

3

主题

312

帖子

1130

积分

广州创龙

Rank: 8Rank: 8

积分
1130
发表于 2018-12-7 16:45:39 | 显示全部楼层
将需要连续访问的数据段放到L2RAM中,可以提高代码运行效率。
回复 支持 反对

使用道具 举报

0

主题

2

帖子

1032

积分

金牌会员

Rank: 6Rank: 6

积分
1032
发表于 2018-12-19 11:15:13 | 显示全部楼层
广州创龙莫工 发表于 2018-12-7 16:45
将需要连续访问的数据段放到L2RAM中,可以提高代码运行效率。

那可以放到L1中吗?
回复 支持 反对

使用道具 举报

4

主题

188

帖子

1698

积分

广州创龙

Rank: 8Rank: 8

积分
1698
发表于 2018-12-19 17:37:55 | 显示全部楼层
可以的
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则  回帖提醒

QQ|手机版|小黑屋|嵌入式开发者社区 ( 粤ICP备15055271号-1  

GMT+8, 2019-6-25 02:58 , Processed in 0.131783 second(s), 41 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

快速回复 返回顶部 返回列表