打印
[ZLG-ARM]

由14个小时写了一行代码想到周立功的开发板

[复制链接]
13965|87
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
astudent|  楼主 | 2007-5-23 15:56 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
    最近在公司产品的控制板上用到ENC28J60,驱动是从网上找的,有两个,一个是国内某网站卖开发板配套提供,一个是国外某人参加ARM的产品大赛的作品代码,都存在收发的数据一多,通信就死掉的问题.苦思冥想了14个小时,第一个什么配套代码作为垃圾扔掉,在第二个上加了一行代码问题解决!
    我想两个代码的开发者肯定是知道有问题的,但是为什么没有修正呢?是技术秘密?还是本来提供的就是DEMO?
    为什么又扯到周立功呢?因为周立功卖的开发板据说也存在类似问题,苦了一个个买板子的人,苦思冥想很久最终不过加了一行代码而已,然后沾沾自喜,以为技术水平得到了极大的提升!其实差矣!其实你本不应该费这个神的,这本来是周立功应该帮你解决的,你不该费这个神的!
    我不是要攻击周立功,只是觉得周立功在卖板子的时候应该事先申明我提供的代码是有问题的,买卖自愿!也希望所有卖扳子的都事先申明我提供的代码是有问题的,买卖自愿!
    乱说而已,ZLGARM觉得有问题删掉就是了!

相关帖子

沙发
lpc2000| | 2007-5-24 00:08 | 只看该作者

程序要是都圆满的话,你PC上就不会出现微软的蓝屏幕了

Demo就是Demo,人家在其他的终端上测试了,但并不一定在你的终端上就运行,有时序的问题,也有可能是接口的问题。人家写了Demo,是方便你加快理解。程序是死的,人是活的。

配套代码不工作就了扔掉,说明程序死了,你也没有活学活用。


使用特权

评论回复
板凳
hq_y| | 2007-5-24 00:55 | 只看该作者

商业化的代码谁也不会在开发板提供吧~~~~~~~~

技术不能这样不值钱~~~~~

使用特权

评论回复
地板
HotPower| | 2007-5-24 02:58 | 只看该作者

哈哈~~~我还因为是一个馒头引发的血案呢~~~

使用特权

评论回复
5
astudent|  楼主 | 2007-5-24 09:41 | 只看该作者

楼上有的人

DEMO不等同于BUG,DEMO可以有局限性,有特定的适用环境,但不同于有BUG,特别是个别人有BUG还不承认,不改正,还百般为自己辩解!

使用特权

评论回复
6
arm爱好者| | 2007-5-24 09:48 | 只看该作者

学生就是学生

呵呵,涉世未深啊!
BUG并不等于错误,谁能保证自己的程序没有BUG?别说开发板的了,就算商业代码也比克避免BUG,只是表现的环境/条件不同而已。

使用特权

评论回复
7
szunix| | 2007-5-24 11:24 | 只看该作者

那么,你愿意把你在哪儿,加了一行什么代码解决的问题公开出

使用特权

评论回复
8
luhuaren| | 2007-5-24 12:33 | 只看该作者

RE

楼主的意思是自己手高。。。显摆显摆

使用特权

评论回复
9
astudent|  楼主 | 2007-5-24 12:52 | 只看该作者

我写的代码很烂,没什么可显摆的!


while(encRead(ECON1) & ECON1_TXRTS);

哪位要用拿去就是!

只希望有的人要正视自己产品中存在的问题,有些问题不能单纯的归结为BUG,并且一旦发现了问题就应该也有义务改正.只可惜坛子中某些人只会说风凉话而已!

使用特权

评论回复
10
astudent|  楼主 | 2007-5-24 12:57 | 只看该作者

更可气

某些人还要说我是故意留的一个BUG在那,等待你去发现!

使用特权

评论回复
11
zlgarm| | 2007-5-24 15:39 | 只看该作者

re:

如果楼主您确实发现了我们开发板的例程的不完善之处,希望您给我们体建议和意见,同时欢迎我们的用户为我们提出宝贵意见和建议!

的确,谁也不敢说自己的代码没有缺憾,至少我们不敢这样说,但是我们会努力改进。我们的开发板目的是为了帮助用户快速的熟悉芯片的使用,给出的例程可能有不完善的地方(相对于工程应用来说),但是绝对不是故意留下BUG,让用户去找,更不是故意留下陷阱让用户掉进去!我们也在不断学习中,对于考虑的不周到还希望各位同仁善意提出,我们会加以改进。

使用特权

评论回复
12
wlq_9| | 2007-5-24 15:43 | 只看该作者

周立功不是商业软件提供商

开发板提供的东西,要想商业使用,就必须自己承担风险.
商用的东西,公司有牛人就自己写.没牛人就买商业的软件包,君不见,商软公司的软件包还在不停的升级呢,要想买块板子就能买到成熟的代码,还是不要想的好.zlg公司买micrium的软件包就是很好的例子.

使用特权

评论回复
13
lailiu| | 2007-5-24 17:40 | 只看该作者

ZLG_GUI就有类似的问题(font8_8.c) x+=8


LZ说的实在,高手不一定要在这儿来显摆
我改进了ZLG_GUI,I2C,SSP等
谁要我也可以给大家共享
不会藏私

LZ也把你的ENC28J60驱动发来玩玩
资源互换,你需要那方面的可以说说

lai2005pi@126.com

使用特权

评论回复
14
王紫豪| | 2007-5-24 18:56 | 只看该作者

正常,有什么大惊小怪的?软件、硬件什么没有bug?

不要把责任推向别人,首先找自己的原因

使用特权

评论回复
15
simon21ic| | 2007-5-25 03:38 | 只看该作者

ZLG的代码确实只是用于学习的

我相信用过214x的USB接口的话基本上都要修改ZLG的代码,至少是driver层,代码可以说写的非常烂.

但是我也可以保证ZLG的代码在他的示例中确实没有问题.ZLG提供代码是希望帮助大家学习而已,而不是简单的照搬.代码都是人写的,有问题也没有办法,直接和他们反映,相信只要确实有问题,他们会接收并修改的.

使用特权

评论回复
16
astudent|  楼主 | 2007-5-25 07:52 | 只看该作者

善于自我批评是中国人的优良传统

首先,我声明我并不是具体针对周立功的开发板,只是这段时间刚好用LPC213X做东西,经常在这个坛子里逛,有感而发而已.
其次,周立功板子的配套代码从复杂的,到简单的,存不存在问题我不敢妄言,但确实在坛子里经常能看到这样的求助帖子.
最后,还是郑重呼吁各位卖板子兼提供增值服务的,自己卖的东西不管是软件还是硬件,发现了问题最好出个补丁,不要视而不见,闻而不闻.

补丁补丁补丁,仅此而已.

高手会叫嚷自己解决么,找自己原因么,低手只是希望某某老板和大侠空了还是出个补丁.

呼唤补丁,呼唤补丁.

使用特权

评论回复
17
astudent|  楼主 | 2007-5-25 08:02 | 只看该作者

要求某些老板或大侠出个补丁很过分么

小用户就没有权利要求一个补丁么

使用特权

评论回复
18
zlgarm| | 2007-5-25 08:44 | 只看该作者

请问214x的USB接口什么地方写得非常烂

"我相信用过214x的USB接口的话基本上都要修改ZLG的代码,至少是driver层,代码可以说写的非常烂."

请问什么地方写得非常烂,USB设备可以实现很多种类,不知是否是移植到其它

类时困难,还是代码写得难懂,或存在什么问题.请指出来,我们非常高兴能得到客户的建议.

也可以发email到:  usbdriver@zlgmcu.com
 

使用特权

评论回复
19
simon21ic| | 2007-5-26 03:11 | 只看该作者

完整的ZLG的库找不到了,就凭印象说吧

其实底层对USB命令的封装没什么好说的,基本就这样了,也不高兴改了
但是USBDriver.c文件确实有很多需要修改的地方.就简单举个例子:
void ep2_txdone(void)
{
    INT32U len;
    INT8U i,status;

    status = USB_SelectClrIntEndpoint(5);                  /* 选择端点/清除端点中断 */
    
    if (UsbTx.Cnt >= UsbTx.Len)
    {
        UsbTx.bFinish = 1;
        return;                                              /* 如果发送长度已达到, 则无须再往下执行 */
    }
    
    for (i = 0; i < 2; i++)
    {
        status = USB_SelectEndpoint(5) & 0x60;
        if (status == 0x60)  break;                        /* 双缓冲区都满, 不能再往里面写数据 */

        len = UsbTx.Len - UsbTx.Cnt;
        if (len > 0)
        {                                                
            if (len >= 64)                                /* 写64个字节     */
                len = USB_WriteEndpoint(5, 64, UsbTx.pbuff + UsbTx.Cnt); 
            else
                len = USB_WriteEndpoint(5, len, UsbTx.pbuff + UsbTx.Cnt);
                                                        /* 写少于64个字节 */
            UsbTx.Cnt += len;                                /* 计数 */
        }//end of if (len > 0)
    }//end of for()
}

为什么要默认64个字节?Descriptor.h定义的宏为什么不用?如果我设定的端口最大数据包长度是8会怎么样?

还有,Bulk端口必须知道数据长度才能调用接受,而很多情况下Bulk传输的数据长度并不是预先可以知道的,一般是收到<端口最大数据包长度认为结束(如果正好是一个最大数据包,还需要发一个长度为0的数据包).我的几个做开发的朋友用这部分的时候可能需要修改你们的代码.

当然,也可能是我最代码的要求太高,但是作为像ZLG这样的大公司来说,对自己的代码要求会比我这个个体户低?

使用特权

评论回复
20
simon21ic| | 2007-5-26 03:18 | 只看该作者

最后在说一点

真正好的代码就是推敲出来的,花14个小时完成一行有时候也很正常.

这个是我修改的ep2_rxdown函数,由于应用非常简单,所以可以简单的这么实现,测试没有问题.
void ep2_rxdone(void)
{
    INT32U len;
    
    USB_SelectClrIntEndpoint(4);                         /* 选择端点/清除端点中断 */

    while(USB_SelectEndpoint(4) & 0x60)
    {
        len = USB_ReadEndpoint(4, EP2_PACKET_SIZE, UsbRx.pbuff + UsbRx.Cnt);
        UsbRx.Cnt += len;
    }

    if(len < EP2_PACKET_SIZE)
        UsbRx.bFinish = 1;
}

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

41

主题

510

帖子

0

粉丝