www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Programmgröße ATtiny2313


Autor: Christian H. (ct2034) Benutzerseite Flattr this
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo liebe Community

Könntet ihr mir vielleich erklären, warum dieses Programm so groß ist. 
Es ist genau ein kleines bisschen zu groß für meinen ATtiny2313. Ich hab 
aber absolut keine Ahnung warum, das Programm kann doch fast nix.
#include <avr\io.h>
#define F_CPU 8000000UL     /* Quarz mit 8 Mhz */
#include <util/delay.h>

int main(void)
{
//**** Initialiserung  ****

int anz_tastendr = 0, gedr = 0, anz_abl = 20;
double anz_abfragen=10000;

DDRD = 0b01000000;  // LED 1 ist Ausgang
DDRB = 0b00000000;  // Taster (Bit 1) als Eingabe

//****  Aufnahme der Anzahl Tastendrücke  ****
while (anz_abl > 0)
{
anz_abfragen=10000;

while (anz_abfragen>0)
{
  
  if ((PINB & 0b00000010) != (0))    // Wenn Taster gedrückt
  {
  
    if (gedr != 0) anz_tastendr++;  // Wenn er nicht schon gedrückt gewesen ist
    gedr = 1;            // jetzt war er gedrückt
    
  }

  anz_abfragen--;
}

//****  Ausgabe des Blinkens  ****
if (anz_tastendr > 10) anz_tastendr = 10;


while (anz_tastendr > 0)
{
  PORTD = 0b01000000;
  _delay_ms(20);
  PORTD = 0b00000000;
  _delay_ms(1000);
  anz_tastendr--;
}

}


return 0;
}

Autor: Alex Bürgel (Firma: Ucore Fotografie www.ucore.de) (alex22) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hast du Code-Optimierung bei den Compiler-Einstellungen aktiviert?

Autor: Dodo M. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
double anz_abfragen=10000

Deswegen. Ersetz das durch'n Ganzzahltypen.

Autor: Flo (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
entfern erst mal den double Typ, den brauchst du nicht, mach daraus ein 
long int (besser uint32_t ).
Das kann auch einiges an Programmspeicher freischaufeln, da du dann die 
Berechnungsprozeduren für double nicht mehr benötigst.
Die sind umfangreicher als man denkt ;-)

Falls es dann immer noch zu viel Code ist, schau mal ob du in deinem 
Projektordner eine List-Datei hast und die posten.

Autor: Christian H. (ct2034) Benutzerseite Flattr this
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Alles klar.
Lag wohl an dem Double.. jetzt sind nur noch 10% belegt :)
Meinen Code muss ich aber trotzdem nochmal posten.

Ich hoffe mir kann jemand helfen. Ich weiß nicht was da nicht stimmt, 
aber mein Programm scheint nicht mehr aus der Ausgabeschleife 
herauszukommen.. oder die anz_tastendr ist dementsprechend groß - habt 
ihr ne Idee woran das liegt?
Ich hoffe durch die Kommentare versteht man es halbwegs..
// Dieses Programm soll Tastendrücke zählen und danach die entsprechnde Anzahl Blitze ausgeben
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

#include <avr\io.h>
#define F_CPU 8000000UL     /* Quarz mit 8 Mhz */
#include <util/delay.h>

int main(void)
{
//**** Initialiserung  ****

int anz_tastendr = 0, gedr = 0;
long int anz_abfragen=10000;

DDRD = 0b01000000;  // LED 1 ist Ausgang
DDRB = 0b00000000;  // Taster (Bit 1) als Eingabe

//****  Aufnahme der Anzahl Tastendrücke  ****
start:

anz_abfragen=10000;

abfrage:

if (anz_abfragen>0)
{
  if ((PINB & 0b00000010) != (0))    // Wenn Taster gedrückt
  {
    if (gedr != 0) anz_tastendr++;  // Wenn er nicht schon gedrückt gewesen ist
    gedr = 1;            // jetzt war er gedrückt
    goto abfrage;          
  } else if (anz_tastendr != 0)    // Jetzt wird das warten abgefangen 
  {
    anz_abfragen--;          // Zum warten wird runtergezählt
    goto abfrage;
  } else goto abfrage;          // Jetzt wird noch nicht gewartet da noch nicht eingegeben wurde
}


//****  Ausgabe des Blinkens  ****

/*if (anz_tastendr > 10) anz_tastendr = 10;*/

while (anz_tastendr > 0)
{
  PORTD = 0b01000000;
  _delay_ms(40);
  PORTD = 0b00000000;
  _delay_ms(1000);
  anz_tastendr--;
}

anz_tastendr = 0;
gedr = 0;
goto start;

return 0;
}

Autor: Markus E. (engelmarkus)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Also dieser Abfrage-Code sieht sehr komisch aus, vor allem dieses "goto" 
verwirrt. Kannst du das auch anders schreiben? Dann löst sich das 
vielleicht von alleine. Du gehst ja in allen Zweigen immer hoch zu 
"abfrage"?
Außerdem seh ich nicht, dass er irgendwo "warten" würde, so wie du das 
da hinschreibst...
uint16_t anz_abfragen = 10000;

while (anz_abfragen-- > 0) {
  if (PINB & 0b00000010) {
    anz_tastendr++;
  }
  
  delay_ms(500);
}

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Christian Tietgens schrieb:

> Ich hoffe mir kann jemand helfen.

Ja.
Schmeiss dein Programm weg und schreibs neu.
Aber diesmal legst du dir selbst eine Restriktion auf: keine goto!

Autor: holger (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>Aber diesmal legst du dir selbst eine Restriktion auf: keine goto!

Dann nimmt er halt "come from" ;)

Autor: Christian H. (ct2034) Benutzerseite Flattr this
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> Dann nimmt er halt "come from" ;)

??
come from abfrage

;-)

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ist ein Scherz unter Insidern :-)
Die Programmiersprache heißt 'INTERCAL' und ist eine nicht ernst 
gemeinte Programmiersprache.

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.