我试图在ASM中运行的Raspberry Pi上实现延迟。 (裸金属)ARM/Raspberry Pi asm延迟
但是用我的代码,我只能达到每秒13.6Mhz或13.6Million的频率,但为什么是这种情况,arm core在config.txt中设置为700Mhz。
__asm__ volatile ("1: subs %0, %0, #1 \n\t"
"bne 1b"
: : "r"(cycles));
我已经测试了它的输出GPIO接近100ms,然后分开。
我的意思是这意味着subs + bne在下一个subs + bne之前需要50个nop周期,这似乎太多了? – user1735225
您是否启用了缓存?说明可能需要多个循环,特别是如果它们是分支。另外,您可能必须设置系统时钟以700MHz运行;它只是意味着它能够快速运行。它可能无法以这种速度启动。 –
你开始的价值是多少,基本上你期望通过这个循环多少次。这是一个紧密的循环,你正在甩掉管道,即使有非常快的内存或l1缓存,它也不会接近700Mhz。它会从那里变得更慢。这是一种非常糟糕的延迟方式,对于执行时间稍微确定的一些/老式微控制器来说效果很好,但在这里它不会这样工作。 –