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

2020-02-04 09:35发布

如题!!!
修改内容: 增加了一个GPS数据处理程序,供新手参考,望高手指点程序质量好坏!!!
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
67条回答
menglongfc
1楼-- · 2020-02-07 04:00
一年,不知状态机
mitchell
2楼-- · 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;
                        }
                }
        }
}
jdzjk06
3楼-- · 2020-02-07 07:48
回复【26楼】mitchell
-----------------------------------------------------------------------

受益了!! 不知道该怎么提高这方面的能力呢,推荐一些方法或书籍吧!!!
sunliezhi
4楼-- · 2020-02-07 13:15
我来补一个数据接收功能,(作者不知道是谁了)

void gps_test(void)

{

    char cInputChar;

    char nStrBuf[200];

        int  set_baud,i = 0;

        uart_change_baud(UART1,9600);

        while(1)

        {

                cInputChar = uart_tran();                       

                        if (cInputChar == '$')

                        {

                                if(i != 0)

                                {

                                        if(!strncmp(nStrBuf,"$GPRMC ", 6))                // Format: $GPRMC,DATA,...,DATA

                                        {

                                                nStrBuf = cInputChar;

                                                gps_info(MSG_GPRMC,&nStrBuf[6]);

                                        }

                                }

                                i = 0;

                        }

                        nStrBuf = cInputChar;

                        i++;

        }

}
mitchell
5楼-- · 2020-02-07 18:11
 精彩回答 2  元偷偷看……
stdio
6楼-- · 2020-02-07 21:24
单从软件来说,直接去尝试写编译器的一部分,一年之后,就会有登高望远之感。

一周热门 更多>