首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >计算lpc1788 mips

计算lpc1788 mips
EN

Stack Overflow用户
提问于 2013-08-19 13:16:38
回答 1查看 356关注 0票数 0

你有没有计算过lpc1788板卡的mips?最近,我通过在rom中运行以下代码计算了一个结果:

代码语言:javascript
复制
volatile uint32_t tick;

void SysTick_Handler()
{
    tick++;
}

unsigned long loops_per_ms;

extern void __delay(int n);

int calculate_mips()
{
    int prec = 8;
    unsigned long ji;
    unsigned long loop;

    loops_per_ms = 1 << 12;

    while (loops_per_ms) {
        ji = tick;

        while (ji == tick) ;
        ji = tick;
        __delay(loops_per_ms);

        if (ji != tick)
            break;

        loops_per_ms <<= 1;
    }

    loops_per_ms >>= 1;
    loop = loops_per_ms >> 1;

    while (prec--) {
        loops_per_ms |= loop;

        ji = tick;

        while (ji == tick) ;
        ji = tick;
        __delay(loops_per_ms);

        if (ji != tick)
            loops_per_ms &= ~loop;

        loop >>= 1;
    }

    return loops_per_ms / 500;
}

delay.s:

代码语言:javascript
复制
  PUBLIC __delay
  SECTION .text:CODE:REORDER(2)
  THUMB
__delay
        subs r0, r0, #1
        bhi __delay
        mov pc, lr
  END

使用ide,我得到的loops_per_ms是39936,mips将是79M,而使用Keil,我得到的loops_per_ms是29952,这意味着mips是59M。

单片机的速度设置为120 MCU,根据数据表,mips应该是1.25x120=150M的,我认为在ROM中运行的代码会降低MIPS的速度。

任何人有一些意见或其他结果?

EN

回答 1

Stack Overflow用户

发布于 2013-08-31 15:50:58

您不能以这种方式测量MIPS。您无法控制编译器将使用多少指令来实现特定的高级代码源,它将随优化级别的不同而不同。

核心将达到每MHz 1.25MIPS,但这可能会根据许多因素而降低。例如,在Cortex-M上,片上闪存和片内RAM使用不同的总线,因此当数据在RAM中而代码在闪存中时,可以实现最佳性能。如果闪存中的指令需要从闪存中获取数据,则吞吐量将会降低,因为指令获取和数据获取必须是顺序的,而从RAM中获取数据可以并行发生。如果您从RAM运行代码,您将真正注意到速度变慢,因为所有数据和指令的获取都将是顺序的。大多数Cortex-M部件使用某种类型的闪存加速器来补偿较慢的闪存,以在大多数情况下实现零等待代码执行,尽管可能会以反常的方式编写代码来抵消这种好处。降低MIPS的其他原因是DMA操作和外设等待状态导致的总线延迟。

测量特定应用程序的MIPS的最简单、最准确的方法(由于上面提到的原因,可能与最优值不同)是使用支持跟踪的调试器,它将捕获在一段时间内执行的每条指令。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18306799

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档