ba_wang_mao 发表于 2009-1-4 20:25:59

没想到大公司编制的程序这么不严谨,没有考虑全面【恢复】

下面的代码是某某公司开发的PROFIBUS接口板,作用是:用户程序和该公司提供的SE接口板通讯。

  用户程序上电后,必须和该公司提供的SE接口板,建立握手信号,当握手信号成功后,用户程序方能和SE接口板交换数据(利用串口_交换数据)



// REQ_IT是一个开关量

// REQ_IT=1 代表初始化未成功,REQ_IT=0代表初始化成功

 while (REQ_IT==1)  

{                                   

    unsigned char x=0;

   for (i=0;i<48;i++)

   {

     x=x+trbox;                /*----求校验和                                ---------*/

   };

   trbox=x;                   /*----置校验和                                ---------*/



/*====================================================================================*/

/*         发送接口板的初始化报文、接收接口板的回答,初始不成功继续发初始化报文       */

/*------------------------------------------------------------------------------------*/



  while (S_RTS==1) {};               /*---- P1.6=S_RTS=1:SE没有准备好接收     ---------*/

  

  y=0;                               /*---- 清初始化成功标志                   ---------*/

  while (y==0)

  { 

     REN=0;

     for (i=0;i<49;i++)              /*---- 发送一次初始化报文共49字节         ---------*/

    {

       TI=0;

       ACC=trbox;

       TB8=P;                        /*---- 形成偶校验位                       ---------*/

       SBUF=trbox;

       while (TI==0) {};  

    }; 



    while (S_RTS==0) { };              /*---- SE 没有接收完毕                ---------*/ 

   

/*---------发送完毕、等待接收回答-----------------------------------------------------*/   

   RI=0;

   REN=1;                            /*---- 允许接收                           ---------*/

   re_er=0;                          /*---- re_er偶校验错标志                  ---------*/

   for (j=0;j<49;j++)

   {                                /*---- 接受回答报文共49个字节             ---------*/

     nw=0;

     while ((RI==0)&&(S_RTS==1)) ; /*---- SE正在发送、实验板正在接收一个字符 ---------*/

     if (RI==1)

     {/*---- RI==1:实验板接收到一个字符 ---------*/

       ACC=SBUF;

       if (P!=RB8){ re_er=1;};           /*---- 偶校验错,置偶校验错标志           ---------*/           

       rebox=SBUF;                    /*---- 接收一个字符送串口输入缓冲区       ---------*/

       RI=0;

     }

     else

      {/*---- (RI==0)&&(S_RTS==0):SE报文全部发送完毕而实验板还没有接收到预期的长度 ---------*/

        j=100;                            /*---- 退出等待接收                       ---------*/

     }

  };



  

  // 问题1:

     等待应答报文时,必须死等(正常交换数据时的代码也是这样),CPU还干不干其它事情了,太浪费CPU资源了

 //  问题2:

    没有超时判断,如果由于干扰,数据时导致丢失数据,难道程序就一直死在那吗?

     



     

gliet_su 发表于 2009-1-4 21:32:02

楼上正解

68000 发表于 2009-1-4 21:14:32

这段代码是大公司中的小人物写的!我能理解,要不然,windows也不会出现这么多的bug了

ilikemcu 发表于 2009-1-4 21:08:56

我对“大”公司向来不感冒,我只对“强”公司有兴趣!



中国的老板都希望做大,但很少能做强的,所以也就造成了中国的有名企业多,短命企业多,长命企业,特别是从改革初期到现在依然充满竞争力的公司比秃子头上的头发还稀罕。



做软件我佩服KEIL,被ARM收购时,全球有10万正版用户,但是只有24名员工;

做硬件我佩服INTEL,赛扬便宜,至强够劲!但是我到现在还没听说过一例正常使用中的赛扬CPU自然损坏的事情!

zc3909 发表于 2009-1-4 20:59:04

国内很多公司都是这样,产品还没有稳定甚至不能称其为产品的时候就已经销售出去了

本贴被 zc3909 编辑过,最后修改时间:2009-01-04,21:00:23.

igoal 发表于 2009-1-4 20:52:36

虽然是大公司,但员工未必是牛人。

ywl0409 发表于 2009-1-4 20:42:35

楼主说的某某公司是哪家大公司啊?不是微软吧?他们的产品不严谨,老是要打补丁的.
页: [1]
查看完整版本: 没想到大公司编制的程序这么不严谨,没有考虑全面【恢复】