Blackrose's Blog Blackrose's Blog

项目开发中的若干问题

in technologyread (159) 文章转载请注明来源!

从上周开始,随着第一版的发布,项目第一期接近于尾声了。第二期是对现有的系统进行修复和优化,达到最初设计的性能要求。最近几周的迭代更新,逐渐暴露出来一些结构和性能上的缺陷。

1.适合项目的cache存储

本次的项目与硬件比较贴切,使用了CAN总线完成设备之间的通迅。最络数据是显示在10inch的液晶屏,数据的更新存储在几个大的数组中。这几个数组最终引出了一个问题,刷新数据的某个瞬间,LCD请求的数据会是空的,因为buffer被清空了,填充好新数据至少需要3秒。多次修改无果后,开始思考问题的原因。最后确定了一个方案,使用类似差异化的方法更新数据,每次相同的数据不再更新,差异的数据后5个清空,并更新数据,这样缩小时间到了毫秒级。

虽然问题解决了,但解决的方法很一般,效率上可以再提高些。

2.硬件通迅buffer

在一个以通迅为主的系统中,通迅数据的存储方式和效率很重要。最早的实现是以链表方式存储,直到最近的测试时,当通迅数据很多时,系统开销比较大,因为malloc次数比多。目前还没有24小时以上的测试,不知道是否因些会出现crash down。

现在的解决方法是,使用circularbuffer做为通迅buffer。接收与处理的过程,类似于消费者和生产者,本系统中消费的比生产的要快(生产有延时),只要size大于开销数的一半,看起来是不错的,只是目前没有测试结果。

3.GUI与后台服务端的通迅

项目开始前调研时,GUI选择使用QT图形库,前后台数据的刷新就由socket来完成了。想当然的,协议就由自己来实现了,开发到中期时,问题出现了,请求数据种类多,协议类型就比较杂和多,对类型的解析太多,处理起来就麻烦多了。受cgminer的启发,打算使用json作为通迅的协议,自己只规定数据格式和类型,解析与构造都交给json的库来完成。虽然多了一层处理,但结构清析了,以后扩展起来也比较方便。

文章二维码

扫描二维码,在手机上阅读!

发表新评论
博客已萌萌哒运行
© 2018 由 Typecho 强力驱动.Theme by Yodu
前篇 后篇
雷姆
拉姆