Tenho um projeto extenso com a função abaixo, está funcionando, porém quero saber se existe algum erro de conceito ou necessidade de alocação prévia de memoria.

Minha duvida é motivada pelo fato que após adicionei esse trecho, o comportamento geral ficou instável com Guru Meditation Error. 

typedef struct {
unsigned int checksum;
IPAddress MyIPAddr;

} APP_CONFIG;

APP_CONFIG AppConfig;

String interpreta(int opcao, bool rw, String info){

char vax[33];

memset(vax, '\0', 33);

switch(opcao){

                    case 10:

                           if(rw){

                                 if(status_online) return "0101";

                                 else return "0100";

                           } else 

                                  {

                                     if(info.toInt())estado_geral=true;

                                      else estado_geral=false;

                                   }

                         break;

                         

                        case 12:

                                  if(rw){
                                     sprintf(vax, "?1012%d.%d.%d.%d", AppConfig.MyIPAddr[0],                                                           AppConfig.MyIPAddr[1], AppConfig.MyIPAddr[2], AppConfig.MyIPAddr[3] );

                                    return vax; //retorna o IP
                                    }else AppConfig.MyIPAddr.fromString(info);//atualiza IP

                              break;  

               //repete para demais verificações de CASES;

                    default:

                }

return "nada"; //retorna algo 

}// fim funcao interpreta

                           

Exibições: 86

Responder esta

Respostas a este tópico

Bom dia,

Qual microcontrolador ? Possui algum módulo acoplado?

Qual IDE usada? 

ESP32 de 2 cores,  IDE Arduino

Placa possui acoplado LCD 2X20, um leitor de código de barras via serial, conexão TCP/IP RJ45 e esses recursos estão operando

ESP32 com conexão TCP/IP RJ45.

Qual seria esse modulo? Não conheço. 

No seu programa consta comunicação IP.

é uma placa com circuitos extras , é um projeto  comercial.

Estou desconfiado que algo estoura o heap. Pois bluetooth BLE parou de funcionar

 Guru Meditation Error " é um erro grave. 

O programa estava tentando fazer algo imposível. 

https://docs.espressif.com/projects/esp-idf/en/latest/esp32/api-gui...

Em qual opção trava ?

Case 10 ou case 12? 

Tente isolar o programa por partes.

Bom dia,

de onde vem o tipo IPAddress (linha 3 do código) ?

"O comando typedef é usado para criar “sinônimo” ou um “alias” para tipos de dados existentes. Então na prática podemos dizer que estamos renomeando um tipo de dados. A renomeação de tipos facilita a organização e o entendimento do código."

Bom dia, 

Achei isso :

usando memset

https://forum.arduino.cc/t/using-memset/267145

SPRINTF() COM ARDUINO

https://www.programmingelectronics.com/sprintf-arduino/

Recomendo que faça as alterações necessárias.

RSS

© 2022   Criado por Marcelo Rodrigues.   Ativado por

Badges  |  Relatar um incidente  |  Termos de serviço