1

Téma: Po nahrání programu se z SDS SMALL stala mrtvola

Po nahrání programu (je tam asi problem s delkou stringu)

void send_mail(void){
 unsigned int status;
 char textik[];
 status = 2;
 printf("sending email...\n");
 sprintf(textik,"Naruseni prostoru %u ",status);

 smtp_send("xxxx@xxxx.cz", "Poplaaaach", textik);
}

se SDS SMALL128  zmenil v mrtvolu 
pouze na chvili tukne do netu linkem a asi se vyrestartuje
na vyzkratování RSTD nereaguje.
U SDS big se mi neco podobneho stalo take a po RSTD se funkce znovu obnovila
v tomhle případě nevím co s tím HELP!!!!
díky

2

Re: Po nahrání programu se z SDS SMALL stala mrtvola

SDS se zablokovalo (opakovaně se resetuje) kvůli chybnému FC programu (jak to narazí na konkrétní věc, viz dále, dojde k resetu zařízení - bezpečný stav, nepokračuje to dále). Máte tam očividně starou verzi firmware, protože aktuální si s tím (viz popis problému dále) už umí specificky poradit. Včetně té situace s RSTD.

Řešení je teď odstranit FC program ze zařízení, což se v dané situaci (kdy máte starý firmware co neumí zablokovat FC pomocí RSTD...) udělat u výrobce - ten vám to udělá zadarmo (popř. za poštovné).

Původní chyba je v tom, jak je váš FC program zapsán - vysvětlím:
Původní definice "textik" je pouze pointer (ukazatel), který tedy zabírá jen 4 bajty a nic víc.

 char textik[]; // toto je jen ukazatel, a ne pole znaků (neví se velikost)

Tím pádem, po zavolání sprintf() dojde k přepsání RAM která už do "textik" vůbec nepatří.

Jedno z mnoha možných správných řešení:

#define MAX_DELKA_TEXTIK (128)
char textik[MAX_DELKA_TEXTIK]; // toto alokuje pole znaků o 128 položkách, tj. pro max 127 znaků plus 0x00 nakonci
...
snprintf(textix, MAX_DELKA_TEXTIK, "naruseni %u", status); // bezpečný způsob
Pochlubte se - popište jak využíváte své zařízení SDS zde ! Můžete si bezplatně přidat svou reklamu !