问题背景:
问题基于TDDI屏, 这个是不带flash的, 每次开机和亮灭屏都是需要对tp的固件进行重新download. 另外,唤醒流程中,当lcd的通知连过来通知tp进行resume时候, 主体的tp resume动作是另外起一个线程进行调度出去的.
分析问题:
综上器件情况, 当底层驱动resume完成后, 上层绘图完成后,背光亮起时,如果这时tp resume还未完成,就存在标题问题: 亮屏后第一时间划不动触控屏,第二次才ok.
修改方案:
问题大致是一个异步的优化过程,尽量去提升tp 被调度出去的resume的花费时间(当然如果不做调度处理也可以,如果不建议整体亮屏时间慢的话).接下来一个关键点,如何做到优化代码运行时间. 这样问题就变成一个如何让代码高效运行的修改了.
查看整个tp resume 代码,其中包括resume后固件升级, 会发现这家tp厂商为了等待一些不确定的硬件状态,大量使用while语句,导致即使提高tp resume线程的优先级,都不能解决这个问题.
所以最后的修改方案就是降while的开销改为sleep 或者for 的语句开销, 这样整体代码运行后时间就大大减少.
总结: C 语言运行在设备上是需要转化汇编语言和机器语言的,所以可能产用while语句的开销对于汇编语言来说是非常巨大.要使代码高效运行,尽量少用while 语句, 哪怕用do while 替换可能开销会小一些.