реклама на сайте
подробности

 
 
> Еще одна проблема с CASE, Кажется стек.
Димон Безпарольн...
сообщение Aug 6 2017, 18:33
Сообщение #1


Знающий
****

Группа: Участник
Сообщений: 734
Регистрация: 29-11-10
Пользователь №: 61 247



Пытался вынести кусок кода из CASE в отдельную функцию:


Код
void MQTT_Connect(void)                            //
{                                                //
    int rc;                                        //
    unsigned char buf[200];                        //
    unsigned char readbuf[100];                    //
    MQTTClient(&c, 20000, buf, 200, readbuf, 100);
    MQTTPacket_connectData data = MQTTPacket_connectData_initializer;
    data.willFlag = 0;                            //Данные прописаны в MQTT.h
    data.MQTTVersion = MQTTVersioN;                //
    data.clientID.cstring = MQTTClientID;        //
    data.username.cstring = MQTTUsername;        //
    data.password.cstring = MQTTPassword;        //
    data.keepAliveInterval = MQTTKeepAliveInterval;//
    data.cleansession = MQTTCleansession;        //
    printf("\rConnect to MQTT Brocker\r");        //
    if ( (rc = MQTTConnect(&c, &data)) != 0)    //
        {                                          //Не успешно
            printf("\rClient connection with IBM MQTT broker failed with Error Code %d\r", (int)rc);
            switch (rc)                            //
                {                                //
                    case C_REFUSED_PROT_V:        //
                        {                        //
                            printf("Connection Refused, unacceptable protocol version\r");
                            break;                //
                        }                        //
                    case C_REFUSED_ID:            //
                        {                        //
                            printf("Connection Refused, identifier rejected\r");
                            break;                //
                        }                        //
                    case C_REFUSED_SERVER:        //
                        {                        //
                            printf("Connection Refused, Server unavailable\r");
                            break;                //
                        }                        //
                    case C_REFUSED_UID_PWD:        //
                        {                        //
                            printf("Connection Refused, bad user name or password\r");
                            break;                //
                        }                        //
                    case C_REFUSED_UNAUTHORIZED://
                        {                        //
                            printf("Connection Refused, not authorized\r");
                            break;                //
                        }                        //
                }                                 //
            printf("\rMQTT Error.. Try again... %d\r", GSM_Mashine_Errors++);//    
            return;                                //
        }                                         //
    else                                         //Успешно
        {                                         //
            printf("\rConnected with IBM MQTT broker\r");
//Подписка
            char* Topic = MQTTSubscribeTopic;    //
            printf("\rSubscribing topic: %s\r", Topic);
            if( MQTTSubscribe(&c, Topic, QOS0, messageArrived) < 0)
                {                                //
                    printf("\rSubscribe with IBM MQTT broker failed\r");
                }                                 //
            else                                 //
                {                                //
                    printf("\rSubscribed to topic: %s\r", Topic);
                }                                //
            GSM_Mashine_Errors=0;                //
            GSM_State_Mashine = PubMQTT;        //Успешно
        }                                         //else if( (rc = MQTTConnect(&c, &data)) != 0)
                    
        
}



Код выполняется, но в следующем шаге все виснет на вызове int T1 = MQTTPublish(&c,(char*)"iot-2/evt/status/fmt/json", &MQTT_msg);
Ковыряя эту функцию обнаружил что выхода из функции
Код
int MQTTSerialize_publish(unsigned char* buf, int buflen, unsigned char dup, int qos, unsigned char retained, unsigned short packetid,
        MQTTString topicName, unsigned char* payload, int payloadlen)


в нужное место не происходит. Т.е. выполнение доходит до return rc; в любом случае, но в вызывающий процесс не возвращается. Но если в теле этой функции блокировать следующий код:

Код
/*        
    writeMQTTString(&ptr, topicName);
        
        
    if (qos > 0)
        writeInt(&ptr, packetid);
    
    memcpy(ptr, payload, payloadlen);
*/


То выход из функции исправно происходит. Учитывая что код рабочий (на 99%) на ум приходит только нехватка памяти. Что в этом случае делать?

Сообщение отредактировал Димон Безпарольный - Aug 6 2017, 18:40
Go to the top of the page
 
+Quote Post



Reply to this topicStart new topic
2 чел. читают эту тему (гостей: 2, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 21st July 2025 - 17:03
Рейтинг@Mail.ru


Страница сгенерированна за 0.01381 секунд с 7
ELECTRONIX ©2004-2016