在线咨询
eetop公众号 创芯大讲堂 创芯人才网
切换到宽版

EETOP 创芯网论坛 (原名:电子顶级开发网)

手机号码,快捷登录

手机号码,快捷登录

找回密码

  登录   注册  

快捷导航
搜帖子
查看: 1340|回复: 0

[原创] 如何去看懂杂乱无章的代码【2】

[复制链接]
发表于 2018-8-28 11:43:36 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?注册

x
本帖最后由 明德扬科教 于 2018-8-28 11:50 编辑

上一节介绍了如何通过逆向反推,高效去阅读他人的代码,快速地完成学习或者完成项目这种方法。现在给大家讲一下,在这个基础上,怎么能学习到更好的设计方法,掌握其精髓,从而提高设计水平。我们仍然以实现相同功能“帧率采样计算”的另外一组代码为例。


帧2.png


同样,通过反推法我们可以得知作者的思路如下:

1. 设定1秒内cnt0,不断+1; 数26'd25_25-000000表示1秒时间到;

2. 接下来对CMOS表示帧,设定值不超过100帧;

3. 设定清零cnt0,用cnt01秒的时间;

4. CMOS_FPS_DATA <= cnt1,信号给出条件end_cnt0,至此功能得到实现。


  OK,我们现在可以简单比较一下。实现相同功能,第一个例子以2秒内'd50_000000条件下计数后除以2,第二个例子用1秒内cnt0作为时间,cnt1计数来实现。第二个例子完全没有使用data等,非常轻松地完成功能要求。

如果再深入去分析,可能会发现第二个例子有个更加奇妙之处。那就是实现了模板化设计,比如上述代码第1行到第17行处,就是一个模板,只需要键入Cnt0;对于这个模块来说,设计者仅仅输入了第16行的“1”和第17行的“26'd25_000000-1”,同时进行几个条件设置,即完成设计。这样的代码,给人的感觉就像武术大师李小龙,简单粗暴但是非常直接有效地击倒对手。

在前言中我们提到,正确的学习方法非常重要。通过思考,掌握其原理,无疑是提高自己水平最好的路径之一。在本案例实现相同功能的不同代码中,不应该是去生搬硬套,看代码后学会实现这个功能,也不仅仅应该学到运用反推法去看懂别人的代码。应该明白的是实现相同功能,有很多种方法,多去比较和思考不同设计的方法、思路、技巧,学习和借鉴其精髓,并运用到实际设计中。随着不断的积累,设计水平会得到不断的提升。

正确的学习方法还有一点是能够举一反三。上文的实例只是引用了一小部分模块,对于整个的项目同样可以运用反推法来实现。反推法看懂代码的核心,是通过功能反推过程,是一个逆向的思维过程,那么我们首先要知道的是功能点。有些同学要说了,那我不知道要实现功能是什么怎么办?功能点是一个设计目标,与什么设计方法、思路、工具完全没有关系。只需要通过看相关的数据手册、问相关的项目负责人,这个项目(模块)需要实现的是什么功能即可。对于一个整体的项目来说,其实方法是一样的。比如,一个摄像头显示的程序,分别有4个模块。我们不需要从头开始向下顺序看下去,事实上也很难看懂。我们知道最后的VGA显示是一定的(最终实现功能),那么需要什么样的VGA时序才能显示出图像呢?根据VGA的时序图、数据手册等资料,导入到模块4VGA时序模块。接着在模块4中继续反推,这个信号接口是从哪里来的?这个信号是从哪里输入的?在过程中再不断参考数据手册等资料,这样每个模块乃至每个信号都能依次推出来。

您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

站长推荐 上一条 /2 下一条

小黑屋| 关于我们| 联系我们| 在线咨询| 隐私声明| EETOP 创芯网
( 京ICP备:10050787号 京公网安备:11010502037710 )

GMT+8, 2024-7-1 17:51 , Processed in 0.061122 second(s), 7 queries , Gzip On, Redis On.

eetop公众号 创芯大讲堂 创芯人才网
快速回复 返回顶部 返回列表