Probleme mit UART bei Mega8

OP #468438
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
}
Gast #468442
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
}

Antwort schreiben

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.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.