www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik STM32 läuft nicht mit globalen Variablen?


Autor: Tom (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi everyone,

Das ist wieder ein Beitrag für STM32. Obwohl es schon so viele Beiträge 
im Forum gibt, helfen sie mir leider nicht bei meinem merkwürdigen 
Problem.

Meine Entwicklungsumgebung: Linux, Sourcery G++ Lite 2010.09-51 for ARM 
EABI, Eclipse, STM32F10x_StdPeriph_Lib_V3.4.0 aus STM und der uC 
STM32F103.
Der Kode ist sehr einfach, und zwar:

int m = 2;  //!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
int main()
{
  int i;

  // GPIO Configuration
  USART1_GPIO_Config();

  // USART Configuration
  USART1_Config();
  while (1)
    {
      USART1_Send ( (uint16_t)'a');
      for (i=0; i<1000000; i++);
      //m = 3;   //!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
    }
  return 0;
}
Am Anfang lief das erstellte Projekt komplett reibungslos. D.h. Die 
Kompilierung und das Flash funktionierten. PC hat tatsächlich die 
Nachrichten („aaa…“)empfangen.

Aber dann tritt das komische Problem auf, wenn die Zeile
m = 3;   //!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
im Kode eingesetzt ist, um die globale Variable zu ändern. Die 
Kompilierung und das Flash laufen nach wie vor. Trotzdem empfängt der PC 
nur das einzige „a“ und wird keine Nachricht mehr auf dem Monitor 
gezeigt. Anscheinend dürfte man keine globale Variable ändern. Warum 
funktioniert der uC bei mir nicht mit der globalen Variable? Hat jemand 
schon auf solchem Problem gestoßen?

Vielen Dank im Voraus.
Tom

Autor: Torsten S. (tse)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
schreib das mal so:

...

for (i=0; i<1000000; i++) // [<- ohne semikolon]
    m = 3;

Autor: Peter Diener (pdiener) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Schreib
volatile int i;

sonst wird die Verzögerungsschleife wegoptimiert. Ob USART1_send damit 
klarkommt, wenn es direkt nacheinander aufgerufen wird, sehe ich nicht, 
weil der Code dazu fehlt.

Grüße,

Peter

Autor: Andi (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
hi

hatte auch ein Problem mit dem usart... mein Problem war das ich nicht 
gewartet hab bis dieser mit senden fertig ist... es müsste eine Funktion 
geben die prüft ob der usart fertig ist... diese hab ich in ner while 
schleife überprüft bis der usart fertig ist....

Autor: Tom (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Sorry, guys :(

Bei mir funktioniert das Flash nicht mehr. Wenn das Flash wieder läuft, 
melde ich mich zurück.

Tom

Autor: Tom (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo, I am back :)

To Torsten,
Dein Vorschlag habe ich probiert. Nach wie vor wird nur ein 'a' gezeigt.



To Peter,
Eigentlich benutze ich die funktion aus StdPeriph_Lib, und zwar
void USART_SendData(USART_TypeDef* USARTx, uint16_t Data).
Ich habe "volatile" hinzugefügt. Aber dasselbe Problem tritt auf :(

Hat jemand noch eine Idee?

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.