Guten Tag,
ich habe folgendes Problem und zwar wird alle 15 Sekunden eine Task
aufgerufen. In der Task wird die Funktion sendeNachricht() aufgerufen
und die Nachricht "SMS nicht aktiv" wird auf der Konsole ausgegeben.
Wenn ich sprintf() in der Funktion sendeNachricht() verwende, hängt sich
alles auf und der Task wird nicht mehr aufgerufen. Woran kann das
liegen? Wenn ich sprintf in der main.c verwende funktionierts
einwandfrei, jedoch in einer Task garnicht. Sobald ich sprintf aus der
Funktion entferne funktioniert es wieder. Ich verwende IDE Atmel Studio
und den Mikrocontroller ATSAMC21.
1
#include<stdio.h>
2
3
staticvoidtask_15s()
4
{
5
while(1)
6
{
7
sendeNachricht();
8
os_sleep(15000);
9
}
10
}
11
12
voidsendeNachricht(void)
13
{
14
15
uint8_tSOC=92;
16
chartext[10];
17
sprintf(text,"Zustand der Fahrzeugbatterie: Ladezustand(SOC) = %d %%",SOC);
18
19
io_write(edgb,(uint8_t*)"SMS nicht aktiv!!!\n",19
20
}
Vielen Dank schon einmal für eure Antworten.
Grüße Max
Maximilian P. schrieb:> char text[10];> sprintf(text, "Zustand der Fahrzeugbatterie: Ladezustand(SOC) = %d> %%",SOC);
Soviel ich weiss hat sprintf keine Datenkompression implemeniert.
Maximilian P. schrieb:> char text[10];> sprintf(text, "Zustand der Fahrzeugbatterie: Ladezustand(SOC) = %d> %%",SOC);
Das sind sicher weitaus mehr als 10 Zeichen und overflowed daher massiv.
snprintf hilft da.
leo
leo schrieb:> Das sind sicher weitaus mehr als 10 Zeichen und overflowed daher massiv.>> snprintf hilft da.
Naja, es hilft auch, einfach den Buffer zu vergrössern. Und ob
snprintf() überhaupt implementiert ist, wissen wir ja nicht.
Matthias S. schrieb:> ob snprintf() überhaupt implementiert ist, wissen wir ja nicht.
Für wie wahrscheinlich hältst du den Fall, dass snprintf() fehlt?
Stefan ⛄ F. schrieb:> Für wie wahrscheinlich hältst du den Fall, dass snprintf() fehlt?
50:50, da wir nichts über die Programmierumgebung wissen. Für winzige
Controller gibt es auch winzige Libs.
Aber kurieren am Symptom bringt eh nix, also doch den Buffer
vergrössern.
Matthias S. schrieb:> Stefan ⛄ F. schrieb:>> Für wie wahrscheinlich hältst du den Fall, dass snprintf() fehlt?>> 50:50
Ich plädiere für maximal 1% Wahrscheinlichkeit. snprintf() gehört
nämlich zum Standard C99 und wurde von allen mir bekannten C Compilern
sogar sehr viel früher implementiert.
Stefan ⛄ F. schrieb:> Ich plädiere für maximal 1% Wahrscheinlichkeit. snprintf() gehört> nämlich zum Standard C99 und wurde von allen mir bekannten C Compilern> sogar sehr viel früher implementiert.
Dann hattest Du offenbar noch nicht viel mit Windows zu tun.
Stefan ⛄ F. schrieb:> wurde von allen mir bekannten C Compilern> sogar sehr viel früher implementiert.
Ich weiss was du meinst, aber das hat mit den Compilern nichts zu tun.
Das ist eine Frage der Libraries.
Matthias S. schrieb:> Ich weiss was du meinst, aber das hat mit den Compilern nichts zu tun.> Das ist eine Frage der Libraries.
Ja, du hast recht. Ich meinte die natürlich die Libraries.
Stefan ⛄ F. schrieb:> Ich habe mit DOS und Windows 3.0 angefangen.
Unter Windows gibt es ein C99-snprintf() erst seit Visual Studio 2015
und der CRT von Windows 10.
Davor gab es nur ein kaputtes _snprintf() und das MS-eigene *_s()-Zeug.
Hmmm schrieb:> Unter Windows gibt es ein C99-snprintf() erst seit Visual Studio 2015> und der CRT von Windows 10.> Davor gab es nur ein kaputtes _snprintf() und das MS-eigene *_s()-Zeug.
Was für ein Käse, echt? Ich hatte damals mit Borland Pascal, später
Turbo Pascal programmiert.
Frank M. schrieb:> Eben. snprintf() mit Argument 10 hilft hier nicht viel weiter. ;-)
Klar, aber der Fehler faellt doch eher auf, zumindest wenn man die selbe
Puffergroesse (defined) fuer Puffer und snprintf verwendet.
leo
Stefan ⛄ F. schrieb:> Zumindest der gcc von Linux spuckt da eine dicke fette Warnung aus
Yep, das werden wohl die meisten modernen Compiler so machen, genau wie
die meisten Anfaenger Warnungen ignorieren, nicht sehen, nicht
einschalten, Fehl interpretieren, usw.
leo
leo schrieb:> die meisten Anfaenger Warnungen ignorieren, nicht sehen, nicht> einschalten, Fehl interpretieren,
BTW mein Ex-Chef schaltete diese "sinnlosen" Warnungen immer aus, es hat
ca. 2 Jahre gekostet, ihn vom Gegenteil zu ueberzeugen ...
leo