相关疑难解决方法(0)

臂上延迟循环中每指令的周期

我试图通过arm-none-eabi-gcc来理解为stm32f103芯片组生成的一些汇编程序,它似乎只运行了我预期的一半速度.我对汇编程序并不熟悉,但是因为如果你想了解你的编译器正在做什么,每个人总是说要阅读asm,我看到我得到了多远.它的一个简单功能:

void delay(volatile uint32_t num) { 
    volatile uint32_t index = 0; 
    for(index = (6000 * num); index != 0; index--) {} 
}
Run Code Online (Sandbox Code Playgroud)

时钟速度是72MHz,上面的功能给我一个1ms的延迟,但我期望0.5ms(因为(6000*6)/ 72000000 = 0.0005).

汇编程序是这样的:

delay:
        @ args = 0, pretend = 0, frame = 16
        @ frame_needed = 0, uses_anonymous_args = 0
        @ link register save eliminated.
        sub     sp, sp, #16         stack pointer = stack pointer - 16
        movs    r3, #0              move 0 into r3 and update condition flags
        str     r0, [sp, #4]        store r0 at location …
Run Code Online (Sandbox Code Playgroud)

c assembly arm

5
推荐指数
1
解决办法
5472
查看次数

如何在STM32中延迟一个时钟周期?

问题与主题一样简单。如何在STM32中延迟确切的一个时钟周期?如果控制器以168MHz运行,则一个时钟周期等于1 / 168MHz,即5.95ns吗?

assembly clock stm32 stm32ldiscovery

3
推荐指数
1
解决办法
1万
查看次数

如何获得可靠的Cortex M4短延迟

我正在将一些代码从M3移植到使用3个NOP的M4,以在串行输出时钟更改之间提供非常短的延迟。M3指令集将NOP的时间定义为1个周期。我注意到M4中的NOP不一定会延迟任何时间。我知道我将需要禁用编译器优化,但是我正在寻找一个低级命令,该命令将给我可靠,可重复的时间。实际上,在这种特殊情况下,串行经常被使用,并且速度可能很慢,但是我仍然想知道获得周期级延迟的最佳方法。

assembly cortex-m3 delay nop

1
推荐指数
2
解决办法
2816
查看次数

标签 统计

assembly ×3

arm ×1

c ×1

clock ×1

cortex-m3 ×1

delay ×1

nop ×1

stm32 ×1

stm32ldiscovery ×1