我目前正在编写代码,以逐像素写入LCD屏幕。该代码可以正常工作,但是处理代码的速度非常慢。目的只是在LCD屏幕上写数字,所以我使用带有“ for循环”功能的“开关”功能来读取我将激活的每个位。我想知道是否有人可以告诉我一种加快我的代码速度的方法...
int * switch_library_number_1(int num,int octet){
switch(num)
{
case 0 : ;
int number_0 [] = {0x80, 0x08,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x88,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xE0, 0x00, 0x00, 0x00, ...};
int * pNumber_0 = &number_0[octet];
return pNumber_0;
break;
case 1 : ;
int number_1 [] = {0x80, 0x08,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x88, ...};
int * pNumber_1 = &number_1[octet];
return pNumber_1;
break;
}
然后上升到这样的九个,我认为您不需要看起来所有情况。另外,即使我删除了大多数,我也有522字节的数字。其余代码如下:
int main(void)
{
ADC_Initialization();
SPI_Initialization();
int nombre_octet = 522;
int premier_nombre;
int deuxieme_nombre;
while(1)
{
GPIOA->BSRRL = CS;
for(int i = 0; i < nombre_octet; i++)
{
write_spi(*switch_library_number_1(0, i));
}
GPIOA -> BSRRH = CS;
for(int i = 0; i < 100; i++)
{
}
GPIOA->BSRRL = CS;
for(int i = 0; i < nombre_octet; i++)
{
write_spi(*switch_library_number_2(1, i));
}
GPIOA -> BSRRH = CS;
}
}
最后,这是write_SPI函数,但是由于它很简单,所以我认为这不是问题。
void write_spi(char data)
{
SPI1->DR = data;
while (!(SPI1->SR & SPI_I2S_FLAG_TXE));
while (!(SPI1->SR & SPI_I2S_FLAG_RXNE));
while (SPI1->SR & SPI_I2S_FLAG_BSY);
}
提前致谢!
我非常喜欢将代码分成三个片段的方式。我可以为每个建议改进之处:
switch_library_number_1():
number[][]
或者如果number_0
,number_1
......是相同长度的不是,它可能是指向这些数组。需要检查有效num
和有效期offset
。这可能是较小的速度改进。number_0
...数组当前处于堆栈中,并且是可读写的。制作它们const
,这样他们就不会使用RAM。static const
这样可以保证安全,因为它不再在堆栈中了。主循环:
switch_library_number_1/2
每次循环迭代都调用有点奇怪。您知道您的数据将只是数组。write_spi(number[0][i]);
如果number
正确设置了数组,则可能会被替换。这应该使您有一些速度上的改进,因为它极大地简化了数据获取。100
是个猜测,请注意编译器可以优化此循环)。如果可能,请使用某些库提供的延迟功能或计时器来获取精确的延迟。这是SPI从设备的实际要求吗?write_spi(char数据):
char
应该在unsigned char
这里。char
s可能是带符号的,也可能是无符号的,所以当您将它们用作字节(不是实际的字符串字符)时,应指定带符号。wait_for_SPI_ready_for_TX; SPI_TX
,您只需等待发送下一个字节。请注意,在再次拉高CS之前,您还需要等待字节完全传输。这可能是一个很大的速度改进。需要考虑的其他事项:
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句