You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Não entendo de C para saber o motivo, o que eu entendi, é que a variável "J" em "results_to_human" começava com 0, depois "J" somava "+1", dentro do "for", "J" passava a ter um valor aleatório com 5 casas decimais, sem ser atribuido a nada, que era inválido como índice de "rawvalues[j]" e ocorria erro. (falha de segmentação)
Solução? Talvez o correto seria substituir "sprintf" por outra estrutura, mas esta solução de atribuir "sprintf" a uma variável "nula", resolveu. Deixei assim, futuramente, se alguém animar de ir mais a fundo no erro.
Linha 208 e linha 244
de: sprintf (buf, "0x%02x%02x", (unsigned char)rawvalues[j],
Para: nil = sprintf (buf, "0x%02x%02x", (unsigned char)rawvalues[j],
Adicional.
Fiz um adicional para facilitar o propósito do uso que eu tenho, colocar uma saída formatada para facilitar a leitura dos dados,(criação de uma web simples),
Adicionar o código abaixo na linha 295
// Pega data e hora do sistema
time_t t = time(0);
struct tm tm = *localtime(&t);
// Valores impressos como string para formatação, mesma sequência de exibição
printf ("%s:%3.2f:%3.2f:%3.2f:%3.2f:%3.2f:%3.2f:%d:%d:%d:%d:%d:%d:%d:%d:", "String", *ordered_values[1], *ordered_values[2], *ordered_values[3], *ordered_values[4], *ordered_values[5], *ordered_values[6], *ordered_bits[0], *ordered_bits[1], *ordered_bits[2], *ordered_bits[3], *ordered_bits[4], *ordered_bits[5], *ordered_bits[6], *ordered_bits[7]);
// Adiciona Data e Hora no final da string acima, adiciona na mesma linha.
printf("%d-%d-%d_%d-%d-%d\n", tm.tm_year + 1900, tm.tm_mon + 1, tm.tm_mday, tm.tm_hour, tm.tm_min, tm.tm_sec);
Formato desta String String:128.00:112.00:1.00:60.00:100.00:43.00:0:0:0:1:0:0:0:0:2021-7-15_14-17-42
String:TensaoEntrada:TensaoSaida:PotenciaSaida:FrequenciaSaida:PorcentagemBateria:Temperatura:Beep Ligado:Shutdown Ativo:Teste Ativo:UpsOK:Boost:ByPass:Bateria Baixa:Bateria Ligada:YYYY-MM-DD_HH-MM-SS
Outro detalhe.
Outro detalhe que alterei, foi remover o -O2 (otimização de compilação), com a otimização, não havia retorno na saída da aplicação.
Ficou assim: gcc nobreakSMS.c -o nobreakSMS
Testado em meu NobreakSMS (:M3 SENOIDAL 2.0') Modelo: Manager III Senoidal , SM1400BiFX
OS: Debian 10.8 armv7l (Raspberry)
The text was updated successfully, but these errors were encountered:
Fiz a alteração no código pela web mesmo. Confere se validou pra você.
Não consegui fazer upload do binario "armv7l" pela web, so fazendo um push. Como não sou familiarizado com git, preferi não arriscar trabalhar no repositório, para não apagar algo. Caso queira postar o binario, me avise que disponibilizo em algum local.
@fabriciogcbh As alterações não estão disponíveis para eu ver. Minha recomendação é a seguinte:
1 - Faça as alterações no seu fork (https://github.com/fabriciogcbh/nobreakSMS) e veja se elas aparecem na interface web do github.
2 - Faça um pull request das suas alterações.
Aí eu vou poder ver suas alterações e te ajudar com melhorar o código. Abraço!
Não entendo de C para saber o motivo, o que eu entendi, é que a variável "J" em "results_to_human" começava com 0, depois "J" somava "+1", dentro do "for", "J" passava a ter um valor aleatório com 5 casas decimais, sem ser atribuido a nada, que era inválido como índice de "rawvalues[j]" e ocorria erro. (falha de segmentação)
Solução? Talvez o correto seria substituir "sprintf" por outra estrutura, mas esta solução de atribuir "sprintf" a uma variável "nula", resolveu. Deixei assim, futuramente, se alguém animar de ir mais a fundo no erro.
nobreakSMS/userland/nobreakSMS.c
Line 167 in 919eafa
nobreakSMS/userland/nobreakSMS.c
Line 227 in 919eafa
Linha 167 e linha 227
De:
char buf[2], *endptr;
Para:
char nil, buf[2], *endptr;
nobreakSMS/userland/nobreakSMS.c
Line 208 in 919eafa
nobreakSMS/userland/nobreakSMS.c
Line 244 in 919eafa
Linha 208 e linha 244
de:
sprintf (buf, "0x%02x%02x", (unsigned char)rawvalues[j],
Para:
nil = sprintf (buf, "0x%02x%02x", (unsigned char)rawvalues[j],
Fiz um adicional para facilitar o propósito do uso que eu tenho, colocar uma saída formatada para facilitar a leitura dos dados,(criação de uma web simples),
Adicionar o código abaixo na linha 295
nobreakSMS/userland/nobreakSMS.c
Line 295 in 919eafa
Formato desta String
String:128.00:112.00:1.00:60.00:100.00:43.00:0:0:0:1:0:0:0:0:2021-7-15_14-17-42
String:TensaoEntrada:TensaoSaida:PotenciaSaida:FrequenciaSaida:PorcentagemBateria:Temperatura:Beep Ligado:Shutdown Ativo:Teste Ativo:UpsOK:Boost:ByPass:Bateria Baixa:Bateria Ligada:YYYY-MM-DD_HH-MM-SS
Outro detalhe que alterei, foi remover o -O2 (otimização de compilação), com a otimização, não havia retorno na saída da aplicação.
Ficou assim:
gcc nobreakSMS.c -o nobreakSMS
Testado em meu NobreakSMS (:M3 SENOIDAL 2.0') Modelo: Manager III Senoidal , SM1400BiFX
OS: Debian 10.8 armv7l (Raspberry)
The text was updated successfully, but these errors were encountered: