有图有真相:
如果我的代码没问题的话,应该就是这个速度了,
把原子哥提供的LCD例程进行了些改动,还没完全消化成自己的,
现在只能刷屏和填充矩形,
把一些支持其它我没见过的型号的屏的代码给删了,虽然这些对效率影响不大,
为了提高刷屏速度,我把编译器的优化开到了最大,
还有其它改动,这里简单说明,
void finline LCD_WriteData(u16 data){
WriteDataPort(data);
LCD_WriteTrig();
}
原本有 CS 和 RS 的设置,但是这个函数是在刷屏的循环中的,对刷屏速度的影响至关重要,所以CS把抽出来交给用户处理,而RS默认就是高电平就行了,因为设置LCD的内部index的频率比较小。
//清屏函数
//Color:要清屏的填充 {MOD}
void LCD_ClearScreen(u16 Color)
{
LCD_SetCursor(0x00,0x0000);//设置光标位置
LCD_WriteRAM_Prepare(); //开始写入GRAM
for(u32 index=width*height;index;index--) {
LCD_WriteData(Color);
}
}
这里的
for(u32 index=width*height;index;index--)
递增式循环和递减式循环的效率是不一样的,递减式循环把速度从78帧/s提升到了85帧/s
另外我还把读延时去掉了,不知会不会导致以后出现问题
不过我的LCD屏怪怪的,现在要把开始板以特殊的姿势放着才能正常显示,怀疑是接触不良,又好像是速度太快造成的。。。
两种方式生成的代码
而递增式,ADD完还得来个CMP才能转递减式,SUB完就可以直接跳转了
这种优化应该归为汇编指令上的优化,效果最差,意义不大。也只能说稍微懂一点汇编有点帮助罢了。
一周热门 更多>