Forum: Compiler & IDEs blutiger anfänger in GCC


von Lothar S. (magic33)


Angehängte Dateien:

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

von Bri (Gast)


Lesenswert?

-> bei google ein Tutorial für C-Einsteiger suchen

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

von Stefan (Gast)


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

von Lothar S. (magic33)


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

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

Zu viele Semikola.

von Stefan (Gast)


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);
     }
}

von Peter (Gast)


Angehängte Dateien:

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
    }
  }
}

von Lothar S. (magic33)


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

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

Schalt die Optimierung ein.

von Peter (Gast)


Lesenswert?

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

Gruss Peter

von Simon K. (simon) Benutzerseite


Lesenswert?

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

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


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.

von Lothar S. (magic33)


Lesenswert?

danke so langsam wirds was!

DO5PX

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.