Forum: Mikrocontroller und Digitale Elektronik Fehler im Programm lauflicht.c


von Andreas K. (sulospace)


Lesenswert?

Hallo,

ich habe gerade folgendes Programm in AVR Studio eingegeben:
1
/*
2
 * This program is free software: you can redistribute it and/or modify
3
 * it under the terms of the GNU General Public License as published by
4
 * the Free Software Foundation, either version 3 of the License, or
5
 * (at your option) any later version.
6
 *
7
 * This program is distributed in the hope that it will be useful,
8
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
9
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
10
 * GNU General Public License for more details.
11
 *
12
 * You should have received a copy of the GNU General Public License
13
 * along with this program.  If not, see <http://www.gnu.org/licenses/>.
14
 */ 
15
16
#include <avr/io.h>
17
#define F_CPU 1000000
18
#include <util/delay.h>
19
20
#define PORT_ROW PORTD
21
#define DDR_ROW  DDRD
22
23
#define PORT_COL1 PORTC
24
#define DDR_COL1  DDRC
25
#define PORT_COL2 PORTB
26
#define DDR_COL2  DDRB
27
#define PORT_COL3 PORTD
28
#define DDR_COL3  DDRD
29
30
//  ABCDEF...
31
//const uint8_t displayText[] = { 0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30, 200};
32
33
// VISIT WWW.STUDENT-IM-URLAUB.DE
34
//const uint8_t displayText[] = { 0,0,22,9,19,9,20,0,0,23,23,23,29,19,20,21,4,5,14,20,31,9,13,31,21,18,12,1,21,2,29,4,5,0,0, 200}; 
35
36
const uint8_t displayText[] = { 
37
  0,0,6,18,15,8,5, // FROHE
38
  0,23,5,9,8,14,1,3,8,20,5,14, // WEIHNACHTEN
39
  0,21,14,4, // UND
40
  0,7,21,20,5,14, // GUTEN
41
  0,18,21,20,19,3,8, // RUTSCH
42
  0,9,14,19, // INS
43
  0,14,5,21,5, // NEUE
44
  0,10,1,8,18, // JAHR
45
  0,200 }; // 200 markiert das Ende
46
47
const uint8_t charTable[] = {
48
  0, 0, 0, 0,     // Leerzeichen
49
  126,9,9,126,    // A
50
  127,73,73,54,   // B
51
  62,65,65,65,    // C
52
  127,65,65,62,   // D
53
  127,73,73,73,   // E
54
  127,9,9,1,      // F
55
  62,65,81,50,    // G
56
  127,8,8,127,    // H
57
  0,127,127,0,    // I
58
  49,65,65,63,    // J
59
  127,24,38,67,   // K
60
  127,64,64,64,   // L
61
  127,6,2,127,    // M
62
  127,14,48,127,  // N
63
  127,65,65,127,  // O
64
  127,9,9,6,      // P
65
  63,33,49,127,   // Q
66
  127,25,41,70,   // R
67
  70,73,73,49,    // S
68
  1,1,127,1,      // T
69
  63,64,64,63,    // U
70
  15,120,48,15,   // V
71
  127,32,48,127,  // W
72
  67,44,18,97,    // X
73
  71,72,72,63,    // Y
74
  97,89,69,67,    // Z
75
  0,111,111,0,    // !
76
  2,97,105,6,     // ?
77
  96,96,0,0,      // .
78
  64,32,0,0,      // ,
79
  12,12,12,12     // -
80
};
81
82
uint8_t currentColumn=0;
83
uint8_t columnBuffer[10];
84
uint8_t  charPosition=0;
85
uint8_t  stringPosition=0;
86
87
// Spalte aktivieren. colNr ist dabei die Spaltennr 0 bis 9
88
inline void setActiveCol(const uint8_t colNr)
89
{
90
  int8_t maskLo;
91
  int8_t maskHi;
92
  if (colNr < 10)
93
  {
94
    maskLo = (1 << colNr) & 255;
95
    maskHi = 0;
96
    if (colNr > 7)
97
      maskHi = (1 << (colNr-8)) & 255;
98
  }else{
99
  maskLo = 0;
100
  maskHi = 0;
101
  }
102
103
  PORT_COL1 = maskLo & 63;
104
  PORT_COL2 = ((maskLo >> 6) &3) | ((maskHi & 1) << 2);
105
  PORT_COL3 &= ~(1<<7);
106
  PORT_COL3 |= (maskHi & 2) << 6;
107
}
108
109
inline void initPorts()
110
{
111
  // LED-Port auf OUT
112
  DDR_ROW = 255;
113
  PORT_ROW = 0;
114
115
  DDR_COL1 = 255;
116
  DDR_COL2 = 255;
117
  DDR_COL3 = 255;
118
119
  PORT_COL1 = 255;
120
  PORT_COL2 = 255;
121
  PORT_COL3 |= (1<<7);
122
123
  
124
  // Puffer leeren, damit nicht zunächst
125
  // wirre Zeichen angezeigt werden.
126
  columnBuffer[0] = 0;
127
  columnBuffer[1] = 0;
128
  columnBuffer[2] = 0;
129
  columnBuffer[3] = 0;
130
  columnBuffer[4] = 0;
131
  columnBuffer[5] = 0;
132
  columnBuffer[6] = 0;
133
  columnBuffer[7] = 0;
134
  columnBuffer[8] = 0;
135
  columnBuffer[9] = 0;
136
}
137
138
int main()
139
{
140
  uint8_t n=0;
141
142
  initPorts();
143
144
  // Endlosschleife
145
  while (1)
146
  {
147
  // Die Bildaufbaugeschwindigkeit ist einfach faul
148
  // durch diesen Sleep für 1ms zwischen den Frames
149
  _delay_ms(1);
150
151
    setActiveCol(10);
152
  PORT_ROW &= ~127;
153
  PORT_ROW |= ~(columnBuffer[currentColumn]) & 127;
154
    setActiveCol(currentColumn);
155
    if (++currentColumn > 9)
156
    {
157
      currentColumn=0;
158
      if(++n>13) // Nach jedem 13. Bildaufbau wird das Bild selbst weitergeschoben
159
      {
160
    // Spaltenweise weiterkopieren  
161
      for(n=9; n>0; --n)
162
        columnBuffer[n] = columnBuffer[n-1];
163
164
        if (4 == charPosition) // Eine Spalte Zwischenraum zwischen den Buchstaben
165
        {
166
          columnBuffer[0] = 0;
167
        } else {
168
      // Bitmuster des entsprechenden Buchstabenteils einsetzen
169
          columnBuffer[0] = charTable[displayText[stringPosition]*4 +charPosition];
170
        }
171
      if (++charPosition > 4)
172
        {  // Es wurde ein ganzer Buchstabe angezeigt --> es folgt der nächste!
173
          charPosition=0;
174
          ++stringPosition;
175
          if (200 == displayText[stringPosition])
176
            stringPosition=0;
177
        }
178
        n=0;
179
      }
180
    }
181
  }
182
}

Leider kommt beim Compilieren ein Fehler.
Kann mir jemand den Fehler nennen?

Das Programm habe ich hierher:
http://www.student-im-urlaub.de/?p=244

von Peter (Gast)


Lesenswert?

Andreas Knaup schrieb:
> Leider kommt beim Compilieren ein Fehler.

und warum zeigst du uns nicht den Fehler?

von g457 (Gast)


Lesenswert?

> Kann mir jemand den Fehler nennen?

Das kann nur Dein Compiler (oder Linker? oder doch der Präprozessor??). 
Hierzuworkstation compiliert (und linkt) es einwandfrei und sogar mit 
ohne Warnings.

von Andreas K. (sulospace)


Lesenswert?

Bei mir kommt: 
c:/winavr-20100110/bin/../lib/gcc/avr/4.3.3/../../../../avr/lib/avr4/crt 
m8515.o:(.init9+0x0):  undefined reference to `main'
make: *** [Laufschrift.elf] Error 1

von Lehrmann M. (ubimbo)


Lesenswert?

Ein genereller Tipp: (nicht böse gemeint)

Der Informationsgehalt deines Postings ist ungefähr:

'Mein Auto Marke VW ist kaputt. Sag mir wo der Fehler liegt ich verrate 
dir aber nicht mehr.'

z.B:

-was für einen AVR verwendest du?
-was für (einen) / welche Fehler gibt dir der Compiler zurück. 
(Zeilenangaben sind hier im Forum sinnlos)

Andreas Knaup schrieb:
> ich habe gerade folgendes Programm in AVR Studio eingegeben:

Ich hoffe du hast es reinkopiert xD =) =) =)

von g457 (Gast)


Lesenswert?

Zeich mal ∗alles∗

von Andreas K. (sulospace)


Lesenswert?

Sorry, aber bin noch ein Frischling.
Hab es reinkopiert.
Hier die Ausgabe:
Build started 1.11.2010 at 11:37:06
avr-gcc  -mmcu=atmega8515 -Wall -gdwarf-2 -Os -std=gnu99 -funsigned-char 
-funsigned-bitfields -fpack-struct -fshort-enums -MD -MP -MT 
lauflicht2.o -MF dep/lauflicht2.o.d  -c  ../lauflicht2.c
avr-gcc -mmcu=atmega8515 -Wl,-Map=lauflicht2.map lauflicht2.o     -o 
lauflicht2.elf
c:/winavr-20100110/bin/../lib/gcc/avr/4.3.3/../../../../avr/lib/avr4/crt 
m8515.o:(.init9+0x0):  undefined reference to `main'
make: *** [lauflicht2.elf] Error 1
Build failed with 1 errors and 0 warnings...

nutze einen Atmega8515

von g457 (Gast)


Lesenswert?

Funktiniert hierzuworkstation noch immer. Lösch mal alle temporären 
Dateien.

von Andreas K. (sulospace)


Lesenswert?

hierzuworkstation?

Jetzt erstmal Mittagessen, danke erstmal.
In welchem Ordner soll ich die Temporären Daten löschen? Von Windows 
oder AVR Studio?

von Simon K. (simon) Benutzerseite


Lesenswert?

Auch wenn du Frischling bist: Mehr Infos!
Womit schreibst du die Programme? Du hast wohl vergessen diese .c Datei 
deinem Projekt hinzuzufügen, bzw. die Datei im MAKEFILE anzugeben oder 
ähnliches.

von Hc Z. (mizch)


Lesenswert?

Was auffällt:  in der ersten Fehlermeldung ging's um Laufschrift.elf, im 
Mitschnitt der Kompilierung war's lauflicht2.elf, und das hier 
eingestellte Programm ist gem. Überschrift lauflicht.c, es müsste also 
lauflicht.elf heißen, somit wieder anders.

Welches Programm hast Du hier gezeigt und welches hast Du kompiliert?

von Andreas K. (sulospace)


Lesenswert?

Ich hatte einfach noch ein zweites Projekt angelegt, desegen lauflicht 
und lauflicht2.

Ich habe ein Projekt in AVR Studio4 angelegt und dort das Programm 
reinkopiert.
Hat sonst bei anderen Programmen auch funktioniert.

von Andreas K. (sulospace)


Lesenswert?

Nun hat es, warum auch immer funktioniert.
Hab TEmp Ordner mal gelöscht und nochmal ein neues Projekt angelegt.

von Andreas K. (sulospace)


Lesenswert?

Dafür wird der Atmega jetzt leider nicht mehr im STK500 erkannt, ich 
denke er ist defekt.

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.