sprintf funktioniert bei Tasks nicht??

OP #6158584
Lesenswert?

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
static void task_15s()
4
{
5
   while (1)
6
   {
7
        sendeNachricht();
8
        os_sleep(15000);
9
   }
10
}
11

12
void sendeNachricht( void )
13
{
14
      
15
   uint8_t SOC = 92;
16
   char text[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
Gast #6158614
Lesenswert?

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.
Gast #6158638
Lesenswert?

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.
Gast #6158661
Lesenswert?

Zumindest der gcc von Linux spuckt da eine dicke fette Warnung aus:
1
sfrings@stefanpc:~/Downloads$ gcc test.c
2
test.c: In function ‘main’:
3
test.c:8:24: warning: ‘Dieser Text ist zu lang’ directive writing 23 bytes into a region of size 10 [-Wformat-overflow=]
4
    8 |   sprintf(a,"Dieser Text ist zu lang");
5
      |              ~~~~~~~~~~^~~~~~~~~~~~~
6
test.c:8:3: note: ‘sprintf’ output 24 bytes into a destination of size 10
7
    8 |   sprintf(a,"Dieser Text ist zu lang");
8
      |   ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
1
sfrings@stefanpc:~/Downloads$ gcc test.c
2
test.c: In function ‘main’:
3
test.c:8:35: warning: ‘Dieser Text ist zu lang’ directive output truncated writing 23 bytes into a region of size 10 [-Wformat-truncation=]
4
    8 |   snprintf(a,sizeof(a),"Dieser Text ist zu lang");
5
      |                         ~~~~~~~~~~^~~~~~~~~~~~~
6
test.c:8:3: note: ‘snprintf’ output 24 bytes into a destination of size 10
7
    8 |   snprintf(a,sizeof(a),"Dieser Text ist zu lang");
8
      |   ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

Sogar in bunt - neuerdings.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren