我看了chw75大侠的USBTEST代码,也在我刚刚从Limingth那里拿到的新板子上测试了这个代码,确实能工作了,能点灯了(据说昨天已经能出现"usb mass storage device"标志了),但是我还是希望给大家提一点小小的建议:
(申明:我真的无心拿chw75的代码来说话,但是我们正好在这个项目里面,用这个代码说话大家感触比较深一些,以后也可以注意一下!还请chw75大侠不要生气,其实我也是到公司后才发现写代码的规范性的重要性的! )
1.代码里面没有足够的注释,这是最致命名的!几乎所有的函数都没有给解释,在函数里面的关键语句也没有注释!说实话,我们写程序并不是给自己看的,因为作为开发人员,只要程序的运行结果正确就可以啦!但是我们是Open Source,是共同开发(只是可能某些人做的多一些,快一些!),所以我们的代码是给别人看的——别人就不是光看你的程序运行结果是否正确了,还要看你的代码为什么能实现正确的操作?在某些地方,为什么要这样写而不那样写?例如:在D12RdEp()函数中,有:
[code:1]
D12SelEp(Ep);
Delay(20);
if(D12Cmd&1)
{
/*the code here is omited*/
}else
{
/*the code here is omited*/
}
[/code:1]
作为开发者,在写这段代码的时候,你肯定是查看了D12的文档,知道在Select Endpoint command之后可以紧跟着读一个字节,读出的这个字节的bit0意味着:
FULL/EMPTY: A ‘1’ indicates the buffer is full, ‘0’ indicates an empty buffer.
所以你的意思是D12Cmd&1运算后如果得到非0值,那么就是这个bit0被置位了,说明在这个选定的端点的buffer中有数据可读,否则就直接返回0表示没有读到数据。但是,老大,作为代码的读者,比如我,也必须走这一遍吗?所有的人拿到这份代码都会走这一遍,可怕啊!为什么偏偏是D12Cmd&1而不是D12Cmd&0x02呢?其实,代码的作者在你自己看了文档,写了这段代码之后,加上必要的注释,说出这个关键点,那么你就节约了很多人的时间!!!不是吗?
[code:1]
D12SelEp(Ep);/*First ,we should select the specific endpoint buffer to read.*/
Delay(20);
if(D12Cmd&1)/*The selected endpoint buffer is full*/
{
/*the code here is omited*/
}
else{
/*the code here is omited*/
}[/code:1]
像上面这样,我想一般的代码读者看了,应该不会再去看文档了,除非他要检查你的代码写对没有?但是由于你的代码已经能正确工作,那就肯定时对的,所以一般也就不会费时间啦!
我是读通信工程专业的,没有软件工程的专业知识,但是我相信这一点软件工程里面应该有,是不是?