PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : conio.h - Im neuen WinAVR gibs das anscheinend nicht



Superhirn
16.02.2006, 19:12
Hi,
ich habe im Wiki über den printf befehl gelesen. Er funktioniert bei mir nicht. jetzt denke ich esw lieg daran das ich conio.h nicht einbinden konnte. Es gibt es nicht mehr. mit der Suchfunktion von windows fand ich es auch nicht.

Woran kann der fehler liegen oder wo ist conio.h?

Pascal
16.02.2006, 19:24
Von der Datei conio.h hab ich im Zusammenhang mit AVRs noch nie gehört. Die Funktion printf wird über die Headerdatei stdio.h zur Verfügung gestellt.

Superhirn
16.02.2006, 19:54
Im RN-Wiki ist das bei den Beispielen eingebunden.

askazo
16.02.2006, 21:09
Pascal hat Recht, für printf brauchst Du die stdio.h.
Hier mal ein Code, der funktioniert. Die Werte für Taktfrequenz und Baudrate in Zeile 4 und 5 musst Du noch anpassen:


#include <io.h>
#include <stdio.h>

#define F_CPU 8000000 // z.B. 8 MHz Taktfrequenz
#define UART_BAUD_RATE 9600 // z.B. 9600 kb/s
#define UART_BAUD_SELECT (F_CPU/(UART_BAUD_RATE*16l)-1)

int uart_putchar(char c)
{

if (c == '\n')
uart_putchar('\r');
loop_until_bit_is_set(UCSR0A, UDRE);
UDR0 = c;
return 0;
}

void UartInit(void)
{
UCSRB = 0x08 //UART Transmitter aktivieren
UBRRL = UART_BAUD_SELECT; //Baud Rate einstellen
}


int main (void)
{

UartInit(); //Schnittstelle initialisieren
fdevopen(uart_putchar, NULL, 0);

printf ("HelloWorld");

}

Im Wiki habe ich jetzt auf die schnelle keinen Artikel gefunden, in dem printf behandelt wird bzw. die conio.h eingebunden wird..... poste doch mal den Link...

askazo

Superhirn
17.02.2006, 06:12
Danke!
Hier im normalen C tutorial: https://www.roboternetz.de/wissen/index.php/C-Tutorial
Ich dachte das hat irgendwie zusammenhang mit den AVRs. In welche entwicklungsumgebung wird das dann gemacht?

askazo
17.02.2006, 08:31
Nein, das C-Tutorial bezieht sich wohl auf reines ANSI-C.
Das wirst Du so bei allen Entwicklungsumgebungen finden, die Programme für PCs compilieren.

Viel davon ist auch auf den AVR übertragbar, aber was die Header-Dateien und die Ausgaberoutinen angeht, ist's dann doch schon ein wenig unterschiedlich. Das fängt schon damit an, dass ein µC (erst mal) keinen Monitor und keine Tastatur und somit keine Standard-Ein- und Ausgabe-Geräte hat.

Gruß,
askazo

SprinterSB
17.02.2006, 09:50
Das C-Turorial aus dem Wiki ist nicht sonderlich zu empfehlen, es enthält noch sehr viele Fehler und ist unvollständig.

Zu conio: Was soll denn auf einem Controller die Console sein und ein "Bildschirm-Lösch" bewirken?

Superhirn
17.02.2006, 11:04
Bildschirm-Lösch ist vielleicht den ganzen Text im Hyperterminal zu löschen, der über rs232 rein kam. :roll: So dachte ichs.
das Conio für die console steht wusste ich nicht. Aber welche entwicklungsumgebung wird in diesem Tutorial verwendet? VisualC?

ruediw
17.02.2006, 11:18
C wurde für ursprünglich für Computer (Mainfraimes) entwickelt.
Von C gibt es sehr viele Dialekte, aber auch bestimmte Normen.
Eine Untermenge der Sprache C wird mit den C-Compilern für
die uC ausgeliefert. So fehlt in der Regel eine dynamische Speicherverwaltung.Diese ist bei einem uC mit seinen Programmen die vor allem aus Code aber kaum aus vielen Daten bestehen auch nicht notwendig.
Schau mal in der Dokumentation deines Compilers nach und vergleiche
mit den verschiedenen ANSI Normen für C.

Superhirn
17.02.2006, 11:29
ich glaub nicht das AVR-GCC alle normen beschreibt. Aber ich weiß noch immer nicht welchen Compiler ich dafür verwenden könnte!

askazo
17.02.2006, 11:47
Ausprobiert habe ich es nicht, aber mit Dev-C++ (http://www.bloodshed.net/devcpp.html) sollte es gehen.

Was willst Du eigentlich machen? Willst Du Mikrocontroller programmieren oder erst mal einfach nur C lernen?

Gruß,
askazo

SprinterSB
17.02.2006, 13:53
ich glaub nicht das AVR-GCC alle normen beschreibt. Aber ich weiß noch immer nicht welchen Compiler ich dafür verwenden könnte!

avr-gcc implementiert GNU-C, eine Erweiterung von ANSI-C. Falls nur die Teilmenge ANSI-C akzeptiert werden soll, dann gibt es dafür Schalter, etwa die Option -ansi und er meckert, wenn man C++-Kommentare in C verwendet, mitten im Block Variablen definiert/deklariert, anonyme Structs verwendet, indirekte Labels verwenden willst, lokale Funktionen deklarierst...

malloc wird in der libc implementiert, ist jedoch nicht zu empfehlen wegen dem recht großen Overhead.

Du kannst alles verwenden wie aus C gewohnt: Arrays, Structs, Unions schachteln bis der Arzt kommt, Longjumps, Pointer auf Funktionen, Varargs, printf. Wie sinnvoll das ist, steht woanders...

Die libc und libstdc++ stellen jedoch nur einen Teil von ANSI zur Verfügung (Effizienzgründe).