Embedded 计算lpc1788 mips

Embedded 计算lpc1788 mips,embedded,rtos,cortex-m3,lpc,Embedded,Rtos,Cortex M3,Lpc,您曾经计算过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 lon

您曾经计算过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;
}
在IAR ide中,我得到的循环数是39936,mips是79M,而在Keil中,我得到的循环数是29952,这意味着mips是59M

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


任何机构都有一些意见或其他结果?

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

核心将达到每MHz 1.25 MIPS,但这可能会根据一些因素而降低。例如,Cortex-M片上闪存和片上RAM使用单独的总线,因此当数据在RAM中,代码在闪存中时,可以实现最佳性能。如果闪存中的指令需要从闪存中提取数据,吞吐量将降低,因为指令提取和数据提取必须是顺序的,而从RAM中提取数据可以并行进行。如果您从RAM运行代码,您会注意到速度会减慢,因为所有数据和指令回迁都是顺序的。大多数Cortex-M部件使用某种闪存加速器来补偿较慢的闪存,以在大多数情况下实现零等待代码执行,尽管可能会错误地编写代码以抵消这种优势。MIPS降低的其他原因是DMA操作和外围等待状态导致的总线延迟


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

非常感谢您的回复,对于此延迟例程,它是在ASM中编写的,以确保每个延迟循环有两条指令。每一个指令都将用一个时钟执行。你可以发现我计算的mips是loops_per_ms/500,也就是说,loops_per_ms*1000*2/1000000。这些代码将在主板刚启动时运行,cpu频率设置为120MHz,系统时钟启用,每1ms生成一次irq,你认为通过这种方法,结果接近真实的mips吗?通过仔细检查,我明白你的意思。我需要考虑一下!首先,我至少要在示波器、逻辑分析仪或定时器/计数器仪器上的systicks和监视器之间切换GPIO引脚,以确保时钟设置正确。
  PUBLIC __delay
  SECTION .text:CODE:REORDER(2)
  THUMB
__delay
        subs r0, r0, #1
        bhi __delay
        mov pc, lr
  END