sprintf feuer ISR

#3481281
Lesenswert?

Guten Tag,

ich arbeite gerade an einem M3. Ich habe folgenden Code, der mir jedes 
Mal beim sprintf einen Fault-Interrupt feuert:
1
void
2
DebugShowCoordinates(signed int sx, signed int sy) {
3
  char OutBuffer[30] = {0};
4

5
  sprintf(OutBuffer, "FROM %i TO %i", sx, sy);
6
  SetErrorMessage(OutBuffer, 3, true);
7
};

Wo liegt da der Unterschied zum funktionierenden Code:
1
char txt[20];
2
unsigned short PixelBuffer[0];
3

4
retval = EdgeDetection(120, true, 320, 240);
5
CameraImageDataGet(false, (NEWPOS.x * 2), 120, 1, false, PixelBuffer);
6

7
sprintf(txt, "x=%i, y=%i, BRGHT=%u", retval.x, retval.y, (BLUEFROM565(PixelBuffer[0]) + GREENFROM565(PixelBuffer[0]) + REDFROM565(PixelBuffer[0])) / 3);
8
SetErrorMessage(txt, 1, true);

Hab ich Tomaten auf den Augen? Ich sehe da keinen Unterschied?!

Danke, Grüße
M. Schwaikert
Persönliche Seite #3481292
Lesenswert?

Verwende sicherheitshalber snprintf, auch wenn es eher 
unwahrscheinlich ist, daß Dein 30 Zeichen großer Puffer überschrieben 
wird.

Hast Du denn noch genügend Platz auf dem Stack? Als automatische 
Variable landet OutputBuffer natürlich dort.

Ansonsten:

  signed int sx

Das signed hier ist völlig überflüssig.

Anders als bei der heiligen Dreifaltigkeit char, unsigned char und 
signed char gibt es nur zwei Varianten beim int :

int und unsigned int.
#3481297
Lesenswert?

Rufus Τ. Firefly schrieb:
> Verwende sicherheitshalber snprintf, auch wenn es eher
> unwahrscheinlich ist, daß Dein 30 Zeichen großer Puffer überschrieben
> wird.

Mach ich mal - nope, fliegt auch auseinander.

> Hast Du denn noch genügend Platz auf dem Stack? Als automatische
> Variable landet OutputBuffer natürlich dort.

Ja, der ist 2048 Byte groß. Das sollte reichen :)

>
> Ansonsten:
>
>   signed int sx
>
> Das signed hier ist völlig überflüssig.

Ich weiß. Es war nur zur Verdeutlichung, dass es sich eben um einen 
Signed handelt, und ich das nicht beim groben drüberfliegen übersehe.
#3481327
Lesenswert?

Hmm... also irgendwas überschreibt mir die Rücksprungadresse. Selbst 
wenn ich das snprinft auskommentiere, so zerlegt es mir das Programm 
beim SetErrorMessage.

EDIT: Kommando zurück, ich hab tatsächlich 2kB Stack verbraten. Hab ihn 
jetzt auf 4kB vergrößert und der Fehler ist weg.

Danke :)

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