Forum: Mikrocontroller und Digitale Elektronik Probleme mit UART bei Mega8


von Pat F. (breaker87)


Lesenswert?

Hey Leute!

Ich habe möchte folgendes Programm auf meinem Mega8 testen...
Leider habe ich beim Compilieren folgenden Fehler:

   Error: C:\Progr...(38): parameter #1 of type 'flash unsigned char *'
   is incopatible with type 'unsigned char *' specified in the function
   'uart_puts' declaration

Der selbe fehler tritt auch in allen anderen Zeilen auf, in denen 
"uart_puts" aufgerufen wird...

Compiler ist der CVAVR.

Ich hoffe ihr könnt mir bei meinem Problem weiterhelfen...


lg Patrick

__________________________________________________________
Hier der Code:
1
#include <mega8.h>   
2
#include <LCDlib.h>
3
#include <ctype.h>
4
#define Key1 PINC.1    
5
#define LED1 PORTD.4
6
7
bit Taste1, Merker1;
8
9
int uart_putc(unsigned char c);
10
void uart_puts(unsigned char *str);
11
12
void main(void)
13
{ 
14
UBRRL=0x67;
15
UCSRA=0x20;   
16
UCSRB=0x08;
17
UCSRC=0x86;
18
   
19
   //Flankenerkennung
20
   Taste1 = Key1 & !Merker1;
21
   Merker1 = Key1;
22
23
while(Taste1)
24
 { 
25
  LED1=1;             
26
  uart_putc(0x0B);   //Steuerzeichen Schneller Vorschub
27
  uart_putc(0x1B);   //Steuerzeichen ESC
28
  uart_putc(0xC);    //Steuerzeichen doppelte Höhe und Breite
29
  uart_puts(" ZEITMESSUNG   V1.0");
30
  uart_putc(0x0A);   //Steuerzeichen LF
31
  uart_putc(0x1B);   //Steuerzeichen ESC
32
  uart_putc(0x1B);   //Steuerzeichen Standard Einstellungen
33
  uart_puts("________________________________________");
34
  uart_putc(0x0D);   //Steuerzeichen CR
35
  uart_puts("          Daten hier eintragen");
36
  uart_putc(0x0A);   //Steuerzeichen LF    
37
  uart_putc(0x0D);   //Steuerzeichen CR
38
  uart_puts("    DATUM:_________________________");  
39
  uart_putc(0x0D);   //Steuerzeichen CR
40
  uart_puts("      ORT:_________________________");
41
  uart_putc(0x0D);   //Steuerzeichen CR
42
  uart_puts("  LAEUFER:_________________________");
43
  uart_putc(0x0D);   //Steuerzeichen CR
44
  uart_putc(0x0D);   //Steuerzeichen CR
45
  uart_puts("________________________________________");
46
  uart_putc(0x0B);   //Steuerzeichen Schneller Vorschub
47
  uart_putc(0x1B);   //Steuerzeichen ESC
48
  uart_putc(0xC);    //Steuerzeichen doppelte Höhe und Breite
49
  uart_puts("    ERGEBNISSE:");
50
  uart_putc(0x0D);   //Steuerzeichen CR
51
  uart_puts("   1.  11:11:11");
52
  uart_putc(0x0D);   //Steuerzeichen CR
53
  uart_puts("   1.  11:22:33");
54
  uart_putc(0x0D);   //Steuerzeichen CR
55
 }
56
}
57
int uart_putc(unsigned char c)
58
{
59
  while (!(UCSRA & 0b00100000))
60
  ;  
61
  UDR = c;
62
  return 0;
63
}            
64
65
void uart_puts(unsigned char *str)
66
{
67
  while(*str)
68
    uart_putc(*str++);
69
}

von johnny.m (Gast)


Lesenswert?

Du übergibst einer Funktion, die lt. Deklaration einen Pointer auf eine 
Variable im SRAM erwartet, einen String, der im Flash abgelegt ist. Das 
beißt sich. Du musst die Funktion, wenn Du konstante Strings (die nunmal 
standardmäßig im Flash abgelegt werden, was auch sinnvoll ist) dann auch 
entsprechend deklarieren bzw. definieren:
1
void uart_puts(flash unsigned char *str)
2
{
3
   //Code
4
}

von Pat F. (breaker87)


Lesenswert?

Danke für die schnelle Antwort!

Jetzt sind alle Fehler weg...
Teste jetzt gleich mal das Prog.


lg Patrick

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.