www.mikrocontroller.net

Forum: Compiler & IDEs blutiger anfänger in GCC


Autor: Lothar Sammel (magic33)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
guten tag in bascom und assembler is alles kein problem da nur ein file

jetzt hat avr studio auch gcc drin

und nun bastle ich schon 2 tage an einer ausgabe auf einen port

aber das will und will nicht gehen

was ist ein makefile

wozu brauch ich .h files

anbei der traurige anfang

bitte wo bekomme ich grundlegende infos und beispiele

danke

Autor: Bri (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
-> bei google ein Tutorial für C-Einsteiger suchen

-> dann hier weiterlesen:
http://www.mikrocontroller.net/articles/AVR-GCC-Tutorial

Autor: Stefan (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
for(X=254 ;X<1;X=X-1)
     {

         PORTB=X;
         wait(1);
     }

DAS wolltest Du sicher SO nicht programmieren.

Setze den Startwert von X auf 254. Dann prüfe ob X kleiner 1 ist. Wenn
ja, führe die Anweisungen in der Schleife (PORTX...) aus. Dann zähle X
um eins runter. Dann prüfe ob X kleiner 1 ist...

Online C Tutorial:
http://info.baeumle.com/ansic.html

Autor: Lothar Sammel (magic33)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
mein problem ist das er die for schleife als fehler erkennt woran liegt
dass

eine endlosschleife
for(;;;)
{


}

ilegal syntax no effekt

was soll das

irgendwie geht da gernichts

kann mitr mal jemand ein kleines file
senden das am port B die led leuchten lässt

binärwert runterzählt 254 bis 1

negative logic am stk 500

mit 8515 drauf

danke

Autor: Rufus Τ. Firefly (rufus) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Zu viele Semikola.

Autor: Stefan (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
In das empfohlene Tutorial hast du nicht reingesehen, gib's zu ;-)

// Sisyphos V1.0
// Für immer...
for (;;)
{
    // ...schuften!
     for(X=254; X>=1; X=X-1)
     {

         PORTB=X;
         wait(1);
     }
}

Autor: Peter (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Tja, aller Anfang ist schwer, so funktioniert es, guck es Dir an!
Ich habe Dir auch noch das ganze als AVR-Studio Projekt beigefügt.

Gruss von mir!
___________________________________________

#include <avr/io.h>
#include <util/delay.h>

// Maximal sind ca. 8 Sekunden möglich
void wait(unsigned char Time_sec)
{
  unsigned char n;
  n = (Time_sec << 5); // 5Bit nach links schieben: n=Time_sec * 32
  while(n--)           // solange (n<>0); n-- ist zudem n=n-1
  {
    //----------------------------------------------------------
    // Max. Delay für _delay_ms ist: 262.14 ms / F_CPU in MHz
    // Der Parameter für _delay_ms sollte eine Konstante sein!
    //----------------------------------------------------------
    _delay_ms(1000/32);    // Time_sec  32  (1000ms / 32)
  }
}


int main(void)
{
  unsigned char X;         // lokale Variable
  DDRB=255;
  while(1)                 // endlos Loop
  {
    for(X=254; X>0; X=X-1) // for(X=254; X; X--) macht das selbe!
    {
      PORTB=X;
      wait(1);             // warte eine Sekunde
    }
  }
}

Autor: Lothar Sammel (magic33)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
danke an alle
für die schnelle hilfe

warum erzeugt der dann einen riesen code
 4250Byte
bei so wenig zu tun

ibn asm hab ich 75byte für das gleiche

mit fast avr bekomme ich 125byte code

mit bascom sinds dann schon 374 byte

aber gcc schlägt mit 4325byte alles

hat da jemand eine erklärung für

danke nochmals

der prof verlangt nun mal c++
in der firma in der ich gearbeitet habe

habe ich sogar 10volle i2C kanäle in asm auf 1chip(8515)gepackt und
hatte immer noch platz

und hier

ein portdurchlauf und der halbe chip ist blockiert

sammel lothar


aller anfang ist schwer
umstieg von ablauf auf objektprogrammierung ist nach 23jahren
berufserfahrung als mechatroniker nicht einfach

!!!!!!

bitte das zu entschuldigen

Autor: Jörg Wunsch (dl8dtl) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Schalt die Optimierung ein.

Autor: Peter (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Mit Optimierung (-OS) sind es auch beim AVR-GCC bloss noch 156 Bytes!

Gruss Peter

Autor: Simon K. (simon) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
du hast nicht zufällig double/float o.ä. verwendet?

Autor: Jörg Wunsch (dl8dtl) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Die delay-Funktionen benutzen intern double, damit man
beliebige Gleitkommawerte für die Taktfrequenz und die
Verzögerungszeit einstellen kann.  Das wird aber (für
den einzig unterstützten Fall eines zur Compilezeit
konstanten Ausdrucks) herausoptimiert -- wenn man die
Optimierung eben einschaltet.

Autor: Lothar Sammel (magic33)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
danke so langsam wirds was!

DO5PX

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.