【问题标题】:Calculate lpc1788 mips计算lpc1788 mips
【发布时间】:2013-08-19 05:16:38
【问题描述】:

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

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;
}

延迟时间:

  PUBLIC __delay
  SECTION .text:CODE:REORDER(2)
  THUMB
__delay
        subs r0, r0, #1
        bhi __delay
        mov pc, lr
  END

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

MCU 速度设置为 120MHz,根据数据表 MIPS 应为 1.25x120=150M,我认为在 ROM 中运行的代码会减慢 mips。

任何物体都有一些 cmets 或其他结果?

【问题讨论】:

    标签: embedded rtos cortex-m3 lpc


    【解决方案1】:

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

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

    为您的特定应用程序测量 MIPS 的最简单和最准确的方法(由于上述原因可能与最佳值不同)是使用具有跟踪功能的调试器,它将捕获在一段时间内执行的每条指令。

    【讨论】:

    • 非常感谢您的回复,对于那个 __delay 例程,它完全是用 ASM 编写的,以保证每个延迟循环都有两条指令。每条指令都将在一个时钟内执行。所以你会发现我计算的 mips 是 loops_per_ms / 500,这意味着 loops_per_ms * 1000 * 2 / 1000000。这些代码将在板刚启动时运行,并且只有 cpu 频率设置为 120MHz 并且启用系统滴答以生成 irq每1ms,你认为通过这种方法,结果是否接近真实的mips?
    • 我明白你在仔细检查的意思。我需要考虑一下!首先,我至少会在 syssticks 和示波器、逻辑分析仪或定时器/计数器仪器上的监视器之间切换一个 GPIO 引脚,以确保您正确设置时钟。
    猜你喜欢
    • 1970-01-01
    • 2018-07-17
    • 2011-01-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多