0

因此,知道 HAL 被认为是“慢”的事实后,我决定使用直接寄存器访问在我的程序中重写一个小例程。我决定看看,我赢得了什么。令人惊讶的是,我真的输了。

所以代码是

this->chip_select();
HAL_SPI_Transmit(hspi, spi_array, 3, HAL_MAX_DELAY);
this->chip_deselect();

this->chip_select();
SPI1->DR = spi_array[0];
while (!(SPI1->SR & SPI_SR_TXE));
SPI1->DR = spi_array[1];
while (!(SPI1->SR & SPI_SR_TXE));
SPI1->DR = spi_array[2];
while(SPI1->SR & SPI_SR_BSY);
this->chip_deselect();

所以首先我使用 HAL 发送 3 个字节,然后使用寄存器和相同的 SPI 发送相同的 3 个字节。

使用 HAL,“字节间”暂停为 0,848 毫秒。 使用 HAL 的示波器

并使用寄存器 - 1.192ms使用寄存器的 OSC

怎么来的?用寄存器做事不应该更快吗?

PS stm32是l071,32 Mhz,SPI是16Mhz。

4

1 回答 1

1

好的,所以我的错误是 - 这是在 0 优化的 Debug build 上完成的。通过优化,寄存器方法更快。问题是如何在 Eclipse 中查看汇编代码。

于 2021-03-09T09:18:51.840 回答