51的程序做了快两年了,但程序质量一直不理想,怎么才能提高自己的编程水平啊???希望高手指

2020-02-04 09:35发布

如题!!!
修改内容: 增加了一个GPS数据处理程序,供新手参考,望高手指点程序质量好坏!!!
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
68条回答
mitchell
2020-02-07 04:40
回复【19楼】jdzjk06  
-----------------------------------------------------------------------

中间有个函数看着很不舒服,修改了一下,功能应该和原来的一样。
其他就没有仔细看了,有些函数代码过长,不够简洁。你去看看linux的原码,大多数函数都是很简短的几行。


原来的代码为:
void GpsDataFenjian(uchar *GpsD)
{
        uchar i,Dhao=0;
        for(i=0;i<150;i++){
                if(GpsD==','){
                        Dhao++;
                        switch(Dhao)
                        {
                        case 1:  GpsPointer.HMS=&GpsD[i+1];      
                                break;
                        case 2:  GpsPointer.State=&GpsD[i+1];
                                break;
                        case 3:  GpsPointer.N=&GpsD[i+1];
                                break;
                        case 5:  GpsPointer.E=&GpsD[i+1];
                                break;
                        case 7:  GpsPointer.Speed=&GpsD[i+1];
                                break;
                        case 8:  GpsPointer.Course=&GpsD[i+1];
                                break;
                        case 9:  GpsPointer.YMD=&GpsD[i+1];
                                break;
                        default: break;
                        }
                }
                if(Dhao==10) break;
        }
        GPS.State[0]=0x04;  
        GPS.State[1]=0x00;
        GPS.State[2]=0x05;
        switch(GpsPointer.State[0])
        {
        case 65:  GPS.State[3]=0x65;
                //此处添加点亮GPS定位状态指示灯语句,定位有效
                break;
        case 86:  GPS.State[3]=0x86;
                //此处添加熄灭GPS定位状态指示灯语句,定位无效
                break;
        default:  GPS.State[3]=0x88;
                break;   
        }
        //return  GPS.State[3];
}

修改为:

void GpsDataFenjian(uchar *GpsD)
{
        uchar i = 150, Dhao = 0;

        while(i--){
                if(*GpsD++ == ','){
                        switch(++Dhao){
                        case 1:  GpsPointer.HMS = GpsD;      
                                break;
                        case 2:  GpsPointer.State = GpsD;
                                break;
                        case 3:  GpsPointer.N = GpsD;
                                break;
                        case 5:  GpsPointer.E = GpsD;
                                break;
                        case 7:  GpsPointer.Speed = GpsD;
                                break;
                        case 8:  GpsPointer.Course = GpsD;
                                break;
                        case 9:  GpsPointer.YMD = GpsD;
                                break;
                        case 10:
                                GPS.State[0] = 0x04;  
                                GPS.State[1] = 0x00;
                                GPS.State[2] = 0x05;
                                //此处添加点亮GPS定位状态指示灯语句,定位有效
                                //此处添加熄灭GPS定位状态指示灯语句,定位无效
                                GPS.State[3] = (GpsPointer.State[0] == 65) ? 0x65 :
                                        (GpsPointer.State[0] == 86) ? 0x65 : 0x88;
                                break;
                        }
                }
        }
}

一周热门 更多>