mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Quode abgeschrieben zum testen und Kompelirungsfehler


Autor: Martin X. (martin007)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo

Ich wollte den Atmal mega 8 in C anfangen mein erstes Ziel sollte sein 
Per UART etwas zu senden, das zweite ziel währe ein Registerinhalt mit 
den UART zu senden.

Mein Problem ist das ich Kompelirungsfehler bekomme obwohl ich das 
richtig abgeschrieben habe der Quode kommt aus dem AVR Lehrbuch:
/
//---------------------------------------------------------------------------
// Title      :Rahmen für ein AVR C-Programm
// Date        :28.10.2005
// Version    :1.1
// Autor      :Dipl. Ing. Päd. Alexander Huwaldt
//---------------------------------------------------------------------------
#define F_CPU 3686400
#include <avr\io.h>
#include <avr\wdt.h>

// einleiten
void initUART ()
{
  UBRRL = 23;
  UCSRB = 8;
}
void putChar (char data)
{
  while (!(UCSRA & 32));
  UDR =data;
  }
  
void print (char buffer [] )
{
for (int i=0; buffer [i] !=0; i++)
putChar (buffer [i]);
}
main ()
{
initUART ();
while (true)
{
print ("hallo welt.!") ;
}
} 

folgende fehler bekomme ich
Kompiliere die Datei ucart.cc.
ucart.cc: In function 'int main()':
ucart.cc:35: warning: deprecated conversion from string constant to 
'char*'
Ende.


was habe ich falsch gemacht??
sage schonmal danke

Martin

Autor: Simon K. (simon) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Die Formatierung ist aber wirklich ekelhaft.
Probier mal statt
void print (char buffer [] )
das:
void print (const char buffer [] )

Autor: Martin X. (martin007)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo

@ Simon Sorry wegen den C werde ich das nächstemal besser machen

Blos warum tut der Quode aus dem Buch nicht?
Wenn ich das Richtig verstehe habe ich jetzt einen Schreibgeschützen 
wert/Vareabele deffenirt mit dem Namen buffer aber kann ich den da jetzt 
einfach anstat "halloxxx" den Inhalt des Registers 16 ausgeben?Ich 
stelle mir das so vor
print r16 ;

Hmm Sage schonmal Danke

Autor: Daniel H. (doomstar)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi,

bei deiner Funktion initUART() fehlt noch ein wenig mehr um den Uart zum 
laufen zu bekommen

Schau dir mal bitte das Datenblatt der Controllers an.

Da gibt es noch die Register UCSRB und UCSRC wo der UART eingestellt 
werden muss.

im Register UCSRB z.b. must du erstmal TXEN uaf 1 setzen damit der UART 
überhabt senden kann. Im Register UCSRC sind die Einstellungen 
vorzunehmen
Wie die Daten Nachricht auszusehen hat.

Hier mal eine Init von mir.

//Funktion zur Initialisierung
void init_usart ()
{
  UBRRH = 0; // Highbyte ist 0;
  UBRRL = 103; //Lowbyte
  UCSRB |= (1<<TXEN) | (1<<RXEN);  //UART TX & RX einschalten
  UCSRC |= (1<<URSEL) | (3<<UCSZ0); //Modus Asynchron 8N1
}

Autor: Martin X. (martin007)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo

Der Quode leuft aber so mit den oben geschrieben änderungen.
Lese das myAVR Contolcenter V2.0 und damit bekomme ich mein Text 
ausgegeben.
Ich muß dazuschreiben das ich das ich das mySmartUSB Modul nutze.( kan 
sein das es daran liegt)

Aber die gebe ich den jetzt den Inhalt eines Registers über aus, Später 
will ich das auf ein LCD ausgeben wollte aber erst klein anfangen.

THX


martin

Autor: Simon K. (simon) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Der Code ist aus einem Buch? Ohne const aber mit dem Aufruf 
"print("hallo welt!"); ?
Wenn ja: Schmeiß das Buch weg!

Autor: Daniel H. (doomstar)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi,

hab noch nicht soviel Ahnung aber diese Zeile aus dem Buch
Print r16;

sieht für mich verwierend aus (sieht aus wie ein mix aus c und 
Assembler)

Was ist den in dem Register 16 drinne nicht das es leer ist und deswegen 
nichts kommt.

versuch doch mal ein Char variable anzulegen und dann diese dann per
Funktion putchar(variable) an dich zu senden.

Gruß

Autor: Martin X. (martin007)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
So wie man erraten kann bin ich ein neuling in der MIC Welt.
Ich habe mir das Set "Mikrocontroller Einsteigerset PLUS" von myavr 
erworben.
da ist erstmal alles in Assambler beschrieben und nur 4 Seiten in C was 
ich schade finde aber egal.
Da ich nicht alles in Assambler schreiben will und kann wollte ich mit c 
weitermachen und so bin ich aus das Problem gestoßen.
Als Anhang die Betreffende Seite.
Wie soll ich das Sonst anfangen zu Lernen wen nicht mit einem 
Einsteigerset.

Hmm

Martin

Autor: Martin X. (martin007)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Daniel H. schrieb:
> Hi,
>
> hab noch nicht soviel Ahnung aber diese Zeile aus dem Buch
> Print r16;

Da haste mich falsch verstanden oder ich habe mich falsch ausgerückt.
ICh wollte ein Register ausgeben und das war mein vorschlag mir war klar 
das das mit gehen wird aber wie mache ich das die übergebe ich ein wert 
das er ausgegeben wird?
Gehen wir einfach davon aus das da ein wert kommt der über einen Pin 
gemessen wurde ein Analogwert.

Martin

Autor: P. S. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wenn du C lernen willst, solltest du das mit einem ordentlichen C-Buch 
(Immer ncoh gut: Kernighan & Ritchie) auf einem "normalen" System 
machen, nicht mit dem Mikrocontroller.

Autor: Martin X. (martin007)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo

ich habe mir das Buch Moderne C-Programmirung gekauft aber das ist schon 
etwas her das problem ist das da kenntnise verausgesetzt werden...
mal schauen was ich da mache.
Wenn da noch empfelungen kommen dan bin ich für alles offen

martin

Autor: Marcus Woletz (mwoletz)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Martin X. schrieb:
> Hallo
>
> ich habe mir das Buch Moderne C-Programmirung gekauft aber das ist schon
> etwas her das problem ist das da kenntnise verausgesetzt werden...
> mal schauen was ich da mache.
> Wenn da noch empfelungen kommen dan bin ich für alles offen
>
> martin

"C von A bis Z", gibt's auch als kostenlose Onlineversion. Fängt 
eigentlich ganz vorne an. Kannst ja mal reinschauen. Das Buch gibt's 
hier online:

http://openbook.galileocomputing.de/c_von_a_bis_z/

Vielen Dank an der Verlag für das OpenBook!

ciao

Marcus

Autor: Martin X. (martin007)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@  Marcus Woletz

ok Danke für diesen tip ich schaue da mal rein und da ich auf gedruckte 
werke stehe werde ich das eventuell auch kaufen mal schauen.(kan man 
auch mal in die Ecke werfen :) )
für mich ist der Beitrag vertig Bedanke mich an dieser stelle und werde 
später nochmal auf euch zurückkommen...

Martin

Autor: Rolf Magnus (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wenn es sich um C-Code handelt, solltest du es auch als C übersetzen und 
nicht als C++.

Autor: Simon K. (simon) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Rolf Magnus schrieb:
> Wenn es sich um C-Code handelt, solltest du es auch als C übersetzen und
> nicht als C++.

Ich würde es nicht ausschließen, dass es so in seinem Buch stand. Hast 
du dir mal oben den PDF Anhang angeschaut? Das ist Programmierstil 
unterster Kategorie. Sowas in nem "Lehrbuch"...

Autor: Stefan B. (stefan) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@ Martin X.

Du hast nix falsch gemacht.

Dein Compiler behandelt per Voreinstellung den String "hallo welt.!" als 
konstant. Und erzeugt dementsprechend auch einen Zeiger "const char *", 
der an die Funktion print() übergeben wird.

Die Funktion print hingegen nimmt als Argument ein nichtkonstantes 
Feld von char Elementen bzw. vereinfacht einen Zeiger auf "char *".

Es beissen sich also einmal "const char *" bei der Übergabe und "char *" 
bei der Funktion selber.

Dementsprechend gibt der Compiler auch eine Warnung aus, dass die 
bisher übliche automatische Umwandlung ineinander deprecated (=engl. 
für missbilligt) der jetzigen und künftigen Compilerversionen bzw. 
Sprachstandards ist.

Man kann die Warnung umgehen, indem man die Voreinstellung des Compilers 
ändert (-Wwrite-strings Argument): 
http://babbage.cs.qc.edu/courses/cs701/Writeable_S...

Autor: Simon K. (simon) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Stefan B. schrieb:
> Man kann die Warnung umgehen, indem man die Voreinstellung des Compilers
> ändert (-Wwrite-strings Argument):
> http://babbage.cs.qc.edu/courses/cs701/Writeable_S...

Warum sollte man das machen? Das Programm von vornherein sauber zu 
schreiben ist nicht nur einfacher, sondern auch richtiger.

Autor: Stefan B. (stefan) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich habe nicht geschrieben "man sollte" sondern "man kann" ;-)

Wenn ein Kurs auf dem Verhalten aufsetzt und man den Kurs so durchführen 
will oder muss, sollte man sich an die Eingangsvoraussetzungen halten. 
Wenn man weiss, wieso etwas gemacht wurde und man Erfahrung gewonnen 
hat, kann man auch den Pfad des Kurses verlassen. Anfangs ist es aber 
meist sicherer/einfacher auf dem Pfad zu bleiben.

Autor: Gast (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> Quode

Würdig einer Konrad-Duden-Medaille für besonders kreative 
Orthografieunfälle.

Autor: Da Dieter (dieter)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Kompelirung is aber auch ganz weit vorne, bei den peinlichsten 
Orthografieunfällen.

Autor: Marcus Woletz (mwoletz)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Leute,

Da Dieter schrieb:
> Kompelirung is aber auch ganz weit vorne, bei den peinlichsten
> Orthografieunfällen.

auch ich sehe mangelhafte Orthografie überhaupt nicht gerne. Allerdings 
sollte man dringend unterscheiden, ob sich Fehler aufgrund mangelnder 
Sorgfalt (sehr ärgerlich) oder aus anderen Gründen, die der Autor 
vielleicht nicht selbst zu verantworten hat, eingeschlichen haben. Mehr 
möchte ich dazu nicht sagen, um dem OP nicht zu nahe zu treten.

ciao

Marcus

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.