Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Dependencies: DS1820 HighSpeedAnalogIn devices mbed
Diff: main.cpp
- Revision:
- 30:8a06a85d8807
- Parent:
- 29:823a9da3696b
- Child:
- 32:7cf1fb8a8bf3
--- a/main.cpp Thu May 24 00:42:23 2018 +0000 +++ b/main.cpp Fri May 25 23:46:10 2018 +0000 @@ -39,13 +39,12 @@ //Função para reset do ARM extern "C" void mbed_reset(); -//Devices - device ** dispositivos = NULL; +//Devices uint8_t devices=0; - uint8_t alarmes=0; - uint8_t leituras=0; - uint8_t qtdSchedules=0; - uint8_t qtdScheduleExceptions=0; + uint16_t alarmes=0; + uint16_t leituras=0; + uint16_t qtdSchedules=0; + uint16_t qtdScheduleExceptions=0; //Devices //Variáveis para envio de arquivo em qualquer lugar do código @@ -55,7 +54,10 @@ bool boolExecAct; bool inicializaModemBool; char debug = false; +char xeretaModem = false; bool hardwareReset = false; +char firmVersion[20]; +char resetCause[5]; MediaMovel FiltroAI4(5); @@ -66,7 +68,7 @@ uint16_t aiFiltrada[4]; bool entradasDigitais[9]; -CircularBuffer bufModem(maxBufInModem) __attribute__ ((section("AHBSRAM0"))); +CircularBuffer bufModem(maxBufInModem);// __attribute__ ((section("AHBSRAM0"))); CircularBuffer bufPC(128); CircularBuffer sdCardBuf(1024); @@ -163,9 +165,9 @@ void verificaSaidasDigitais(){ SD_OE_R = 1; /*if(SD_FAULT){ - pc.printf("Fault\r\n"); + if(debug)pc.printf("Fault\r\n"); }else{ - pc.printf("No Fault\r\n"); + if(debug)pc.printf("No Fault\r\n"); }*/ } @@ -173,15 +175,17 @@ osThreadId idThreadTimers; void threadTimers(void const *args){ while(true){ - osSignalWait(0x1,1000); //Executo compulsoriamente mesmo que não haja sinal num periodo de 1 segundo - if(serialPC::startTimer_pacote){ - serialPC::startTimer_pacote = false; - osTimerStart(serialPC::timer_pacote,2000); - } - if(serialModem::startTimer_pacote){ - serialModem::startTimer_pacote = false; - osTimerStart(serialModem::timer_pacote,modemCom::timeOutModem); - } + osSignalWait(0x1,1000); //Executo compulsoriamente mesmo que não haja sinal num periodo de 1 segundo + //if(enviaDadosPorAlarme==255){//debug + if(serialPC::startTimer_pacote){ + serialPC::startTimer_pacote = false; + osTimerStart(serialPC::timer_pacote,100); + } + if(serialModem::startTimer_pacote){ + serialModem::startTimer_pacote = false; + osTimerStart(serialModem::timer_pacote,modemCom::timeOutModem); + } + //} if(modBusMaster1::startThreadModBusMaster){ modBusMaster1::startThreadModBusMaster = false; osTimerStart(modBusMaster1::timer_pacote,4); @@ -223,12 +227,10 @@ while(true); } if(eventosRTC::rotinaEnvioDeDados){ - //Faço aqui o que for devido. - pc.printf("Enviando dados de hora completa ao server.\n"); - modemCom::status.emComunicacao = true; - //diversos::wdt.kick(90.0); - //Aproveitando ACT - if(!modemCom::status.recebendoArquivoDoServer){ + //Faço aqui o que for devido. + if((!modemCom::status.recebendoArquivoDoServer)&&(enviaDadosPorAlarme==255)){ + if(debug){pc.printf("Enviando dados de hora completa ao server.\n");} + modemCom::status.emComunicacao = true; eventosRTC::rotinaEnvioDeDados--; modemCom::status.periodo = 900; if(modemCom::verificaConexao()){ @@ -238,19 +240,19 @@ modemCom::status.periodo = modemCom::status.periodoConfiguracao; //Restaurando o período configurado no sistema } } - //diversos::wdt.kick(90.0); + modemCom::status.emComunicacao = false; } - modemCom::status.emComunicacao = false; + } if(arquivoEnvioPointer!=NULL){ - pc.printf("Enviando o arquivo <%s> ao server.\n",arquivoEnvioPointer->nome); + if(debug){pc.printf("Enviando o arquivo <%s> ao server.\n",arquivoEnvioPointer->nome);} if(modemCom::postFileCommandMode(modemCom::status.serverIP,modemCom::status.host,"/drome/parser/index.php",arquivoEnvioPointer)){ //if(modemCom::postFileCommandMode(modemCom::status.serverIP,modemCom::status.host,"/sistema/Parser/index.php",arquivoEnvioPointer)){ - pc.printf("Enviado o arquivo <%s>.\n",arquivoEnvioPointer->nome); + if(debug){pc.printf("Enviado o arquivo <%s>.\n",arquivoEnvioPointer->nome);} arquivoEnvioPointer = NULL; }else{ - pc.printf("Erro enviando o arquivo <%s>.\n",arquivoEnvioPointer->nome); + if(debug){pc.printf("Erro enviando o arquivo <%s>.\n",arquivoEnvioPointer->nome);} } } @@ -285,11 +287,6 @@ } } -//Timeout timeOutModem; -void chamaProcessaPacotePeloTimeOut(){ - modemCom::processaPacote(NULL); -} - void loadDevices(){ if(sdCard::abreArquivo(&sdCard::devices,"r")){ criaDevices(sdCard::devices.fp); @@ -307,7 +304,8 @@ SD1.period_us(pwmPeriod); modemCom::atendendoWebServer = false; serialPC::serialPC_init(); - pc.printf("Versao 23/05/2018.\r\n"); + printf("Versao: %s.\r\n",firmVersion); + printf("Reset Cause: %s.\r\n",resetCause); modemCom::timeOutModem = 30; serialModem::serial_init(); numeroDeBytesPorEnvio = 768; @@ -315,11 +313,11 @@ inicializaSensoresTemperatura(); if(sdCard::init()){ - pc.printf("SD Card inicializado com sucesso.\n"); + printf("SD Card inicializado com sucesso.\n"); //Carregando a lista de dispositivos loadDevices(); }else{ - pc.printf("Nao foi possivel inicializar o SD Card.\n"); + printf("Nao foi possivel inicializar o SD Card.\n"); } @@ -341,6 +339,9 @@ //Inicio do programa; int main() { + sprintf(firmVersion,"Ver23/05/18_1.0A"); + sprintf(resetCause,"POR"); + debug = false; eInt1.rise(&diversos::processaPulsosEDs); eInt2.rise(&diversos::processaPulsosEDs); @@ -366,7 +367,7 @@ while(true){ osDelay(100); if(callBootLoader){ - diversos::wdt.kick(15.0); + diversos::wdt.kick(90.0); SysTick->CTRL &= ~0x00000002; // disable SysTick interrupt NVIC_DeInit(); //__disable_irq(); @@ -376,51 +377,46 @@ bootLoader(); } - //pc.printf("Thread: MAIN.\r\n"); + //if(debug)pc.printf("Thread: MAIN.\r\n"); if((!modemCom::status.recebendoArquivoDoServer)&&(!modemCom::status.emComunicacao)){ diversos::wdt.kick(); }else{ if(modemCom::status.recebendoArquivoDoServer){ modemCom::status.recebendoArquivoDoServer--; - //Esta thread já roda a cada 100mS - //printf("modemCom::status.recebendoArquivoDoServer = %lu.\r\n",modemCom::status.recebendoArquivoDoServer); + //Esta thread já roda a cada 100mS if(modemCom::status.recebendoArquivoDoServer==0){ modemCom::closeConnection(modemCom::status.connIDServerCommand); } } } - if(!modemCom::status.recebendoArquivoDoServer){ - if(eventosRTC::minutos){ - //Executo abaixo a rotina de 1 minuto - eventosRTC::minutos = false; - refreshSensoresTemperatura(); - writeReadingsToSD(); - } - + + if((!modemCom::status.recebendoArquivoDoServer)&&(!modemCom::status.emComunicacao)){ if(eventosRTC::rotina1segundo){ eventosRTC::rotina1segundo = false; if(enviaDadosPorAlarme!=255){ enviaDadosPorAlarme--; if(enviaDadosPorAlarme==0){ eventosRTC::rotinaEnvioDeDados=maxTentativasEnvioDados; - enviaDadosPorAlarme=255; + enviaDadosPorAlarme=255; } } leiturasAnalogicas(); verificaSaidasDigitais(); leiturasDigitais(); + if(debug){ pc.printf("\nMemoria RAM disponivel = %lu\n",diversos::memAvailable()); pc.printf("\nEntrada 4 = %lu.\nEntrada 3 = %lu.\nEntrada 2 = %lu.\nEntrada 1 = %lu.\r\n",aiFiltrada[3],aiFiltrada[2],aiFiltrada[1],aiFiltrada[0]); pc.printf("Pulsos <%lu><%lu><%lu>.\r\n",pulsosEDs[0],pulsosEDs[1],pulsosEDs[2]); + for(debug=0;debug<9;debug++){ - pc.printf("EntradaDigital[%u]=%u.\r\n",debug,(entradasDigitais[debug]>1)); + printf("EntradaDigital[%u]=%u.\r\n",debug,(entradasDigitais[debug]>1)); } - } + time_t seconds = time(NULL); - printf("%s\n", ctime(&seconds)); + printf("Drome %s, Hora-> %s\n",firmVersion,ctime(&seconds)); } if(eventosRTC::rotina10Segundos){ @@ -431,7 +427,7 @@ } if(sdCard::deleteSentFiles){ - pc.printf("Recebido comando para deletar arquivos enviados.\n"); + printf("Recebido comando para deletar arquivos enviados.\n"); sdCard::deleteBanks(sdCard::currentBankSending); if(sdCard::modificaCurrentBank(sdCard::currentBank,!sdCard::currentBankSending)){ sdCard::deleteSentFiles=false; @@ -439,26 +435,33 @@ } } + if((eventosRTC::minutos)&&(!modemCom::status.recebendoArquivoDoServer)){ + //Executo abaixo a rotina de 1 minuto + eventosRTC::minutos = false; + refreshSensoresTemperatura(); + writeReadingsToSD(); + } + if(executaComandoServer){ executaComandoServer = false; commands::exec(modemCom::status.connIDServerCommand); if(!modemCom::status.recebendoArquivoDoServer){ - pc.printf("Fechando socket chave 4.\r\n"); + if(debug){pc.printf("Fechando socket chave 4.\r\n");} modemCom::closeConnection(modemCom::status.connIDServerCommand); } } if(modemCom::atendendoWebServer){ modemCom::atendendoWebServer = false; - pc.printf("Atendendo webServer na conexao %u.\r\n",modemCom::status.connIDWebServer); + if(debug){pc.printf("Atendendo webServer na conexao %u.\r\n",modemCom::status.connIDWebServer);} modemCom::status.emComunicacao=true; modemCom::webServer(modemCom::status.connIDWebServer); modemCom::status.emComunicacao=false; } if(boolExecAct){ - dispositivos[0]->execAct(act); + execAct(act); boolExecAct = false; } }