PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : C Neuling - erste Frage



Blue72
29.04.2012, 11:55
Hallo zusammen,

ich will von Bascom auf C umsteigen. Mein erstes Hindernis ist folgendes:

In Bascom gibts ein Terminal, wenn ich im Simulator irgend etwas mit "Print" ausgebe, erscheint es in eben diesem Terminal.
Ich möchte für C nun das AVR Studio nutzen, Bücher sind da und viele Tutorials ebenfalls zum "abarbeiten".

Nur, wie kann ich im AVR Studio ein Terminal Fenster öffnen, damit mir z.B. auch die "printf" Anweisungen angezeigt werden
beim simulieren ?

Danke euch.

Gruß
Blue72

Kampi
29.04.2012, 12:30
Hi,

ich glaube AVR Studio hat sowas nicht. Aber ich würde dir eh empfehlen lieber ein eigenständiges Terminalprogramm wie TeraTerm zu installieren.
Alternativ hat auch Windows ein Terminalprogramm. Das nennt sich dann HyperTerm.

Blue72
29.04.2012, 13:51
Danke Dir,

hast Du auch eine idee wie ich das ins AVR Studio einbinden könnte ? Noch bin ich für alles offen, es muss auch nicht das AVR Studio sein.
Wenn es einen anderen guten Compiler gibt, würde ich auch diesen nehmen.

ePyx
29.04.2012, 14:04
Für AVRStudio 5 gibt es bei den Extensions einen Terminal-Emulator. Keine Ahnung ob der gut oder schlecht ist. Ansonsten Hterm, putty oder terraterm nutzen. Funktionen wie printf kann man auch nutzen. Einmal google bemühen liefert das hier (http://www.mikrocontroller.net/articles/AVR-GCC-Tutorial#Die_Nutzung_von_sprintf_und_printf).

SprinterSB
29.04.2012, 15:33
QUOTE=ePyx;547804

> Funktionen wie printf kann man auch nutzen. Einmal google bemühen liefert das hier (http://www.mikrocontroller.net/articles/AVR-GCC-Tutorial#Die_Nutzung_von_sprintf_und_printf).

Was aber keine transparente Verwendung von printf darstellt. Wird printf verwendet, landet die Ausgabe damit immer noch im Nirvana.

Für printf-Verwendung ist schon was mehr notwendig.

In dem Link werden spezielle Ausgabefunktionen wie lcd_printf verwendet; wiklich kein Kunststück.

Blue72
29.04.2012, 20:19
Also mir geht es in erster Linie darum, Code wie diesen hier:



// kap002/aufgabe001.c
#include <stdio.h>

int Main(void) {
printf('Ei-Pod\n');
return 0
}


einfach auch optisch anzuzeigen, da ich bei C wirklich bei absolut 0 anfange.

SprinterSB
30.04.2012, 11:32
Zum Lernen von C und auch von anderen Programmiersprachen eignet sich ein PC wesentlich besser als ein kleiner, resourcenschwacher C ohne Betrienssystem und Standardumgebung.

Man muss ja nich gleich mehrere Baustellen gleichzeitig aufmachen...

Obiges Programm kannst du zb auf einem PC, und nach Behebung der mindestens 5 Tippfehler, übersetzen mit

$ gcc aufgabe001.c -o aufgabe001.exe

und das Programm dann ausführen mit

$ aufgabe001.exe

Was du also mindestens brauchst ist ein Compiler, und GCC leistet da sehr gute Dienste. Vorteil ist, daß gcc überall gleich tickt, und ein avr-gcc sich fast genauso verhält wie ein gcc — mit dem Unterschied, daß er keinen Code für den PC erzeugt, sondern eben für einen AVR.

Eine einfache Möglichkeit, sich gcc zu installieren, ist etwa mittels Code::Blocks. Das ist zwar eine komplette IDE, aber ob du die IDE samt Debugger, Editor etc. einsetzt oder gcc per Makefile oder wie auch immer verwendest, bleibt natürlich dir überlassen.

http://www.codeblocks.org/

Falls dir Code::Blocks zu klotzig ist, geht's hier weiter:

http://www.mingw.org/

Blue72
30.04.2012, 18:01
Hallo SprinterSB,

vielen Dank für Deine ausführliche Hilfe, da werd ich doch gleich mal ein bisschen stöbern.

Tjaha, den Code habe ich aus dem Buch, da gibt es Aufgaben und Listings. Ich habe versehentlich die Aufgabe kopiert anstelle des Listings ;-)

MagicWSmoke
30.04.2012, 22:28
Also mir geht es in erster Linie darum, Code wie diesen hier:


printf('Ei-Pod\n');

einfach auch optisch anzuzeigen, da ich bei C wirklich bei absolut 0 anfange.
Diese Komfortfunktion von Bascom gibt's in C so nicht.
Was Du machen kannst, um z.B. die Ausgabe von printf im AVR-Studio4 zu überprüfen, ist einen Data Breakpoint auf das UDR Deiner Wahl zu setzen und zwar auf die Basis-Adresse.
Bei einem ATMega16 ist das für das einzige UART die Adresse 0x0C, der Breakpoint muss also lauten:

Break when: Location is accessed
Location: IO@0x2C

Per F5 kannst Du durch die einzelnen ausgegebenen Zeichen durchgehen.
Unter AVR-Studio4 gibt's auch noch unter Debug-->AVR Simulator Options-->Stimuli and logging die Möglichkeit Änderungen auf einem bestimmten Port zu registrieren, diese anzuzeigen und in ein File zu loggen.
Wenn Du nun stdout umleiten würdest: Die_Nutzung_von_sprintf_und_printf (http://www.mikrocontroller.net/articles/AVR-GCC-Tutorial#Die_Nutzung_von_sprintf_und_printf) und dort die Zeichenausgabefunktion änderst, d.h. statt das UART auf den Port ausgibst,

int uart_putchar( char c, FILE *stream )
{
PORTA = c;
return 0;
}
dann siehst Du das Ausgegebene (bei Output-->To screen) und kannst es auch in eine Datei schreiben, zwar nur in Dezimal ASCII, aber immerhin.

Nachtrag:
Gerade bemerkt, AVR-Studio4 merkt sich das Logging nicht in den Projekteinstellungen, das muss also nach jedem Start des Studios neu eingetragen werden.
Und schreib' Anführungszeichen statt Hochkomma, sonst wird das nix:

printf('Ei-Pod\n');

Blue72
01.05.2012, 13:50
Hallo MWS,

Deine Antworten habe ich schon in einem anderen Forum stark vermisst :-)
Danke dafür. Ich werde das jetzt alles mal ausprobieren womit ich am besten klarkomme.

Die Sache mit den Anführungszeichen war eine Aufgabe aus dem Lehrbuch, da habe ich anstelle des Lsitings
die Aufgabe herauskopiert ;-)

Gruß
Blue72

Felix G
01.05.2012, 13:52
Die im printf-Artikel von mikrocontroller.net beschriebene Methode einen eigenen Stream zu definieren funktioniert zwar, aber da es im Artikel selbst anscheinend nirgends erwähnt wird, möchte ich an dieser Stelle darauf hinweisen daß das kein portabler C-Code ist.

Das verwendete Makro "FDEV_SETUP_STREAM()" ist eine compiler- oder sogar plattformspezifische Erweiterung (soweit ich weiss gibt es das nicht im "normalen" GCC). Wenn man dieses Feature verwendet wird der geschriebene Code also mit keinem anderen Compiler und für kein anderes Zielsystem kompilierbar sein. Und im Gegensatz zu anderen plattformspezifischen Erweiterungen wie z.B. PROGMEM, ist dieses Makro in der stdio.h definiert, also scheint es auf den ersten Blick so als wäre es Teil des C Standards.

Das dürfte zwar für die meisten Hobbybastler nicht so wichtig sein, aber ich denke man sollte zumindest wissen worauf man sich einlässt.

MagicWSmoke
01.05.2012, 14:46
Deine Antworten habe ich schon in einem anderen Forum stark vermisst
Ja, ich hatte eine Inkompatibilität meiner Person zu zweien der Mods festgestellt, was mich schließlich dazu bewegte meine Mod-Tätigkeit niederzulegen.

Danke dafür. Ich werde das jetzt alles mal ausprobieren womit ich am besten klarkomme.
Per Tabellenblatt, z.B. per Openoffice lässt sich die Logdatei relativ einfach in Klartext umwandeln =ZEICHEN(HEXINDEZ(Zelle_X)), aber unbequemer ist's sicher immer noch.
Da gewöhnt man sich aber einfach dran.


daß das kein portabler C-Code ist.
Überleg' Dir mal, wieviel Code, der z.B. auf die Spezifikationen eines AVR abgestimmt ist, noch auf Prozessoren eines anderen Herstellers läuft.
Da ist auch nicht mehr viel portabel.

MagicWSmoke
02.05.2012, 01:03
Da sich noch ein altes Delphi5 auf dem Rechner rumgetrieben hat, bin ich in alte Pascal-Gründe gestiegen.
Auf Basis der Logging-Ausgabe über AVR-Studio 4 und der Umleitung der printf-Ausgabe auf einen Port kam ein virtuelles Ausgabe-Terminal raus, Eingabe ist natürlich nicht zu machen.
Man kann sich das printf-Ergebnis anschauen, das mag aber manchmal schon reichen.

Die Funktionsweise ist einfach, die vom AVR-Studio erzeugte Ausgabedatei wird alle 100ms gepollt und auf Größenveränderung geprüft, kam was dazu, wird's übersetzt und ausgegeben.
Leider vergisst AVR-Studio die Simulatoroptionen mitzuspeichern, das ist ein wenig lästig, da man bei jeder Debugsession das Logging in die Ausgabedatei wieder erneut setzen muss.
Aber man kann nicht alles haben...

Falls Interesse besteht, würde ich die Delphi5-Sourcen bereitstellen, dann kann sich das jeder selbst zusammenbauen oder ändern.

jahat
02.05.2012, 14:36
Hallo,

ich war mit meinen ersten Gehversuchen mit dem ATmega8 nicht nur an der Ausgabe an den PC in C und mit dem AVR-Studio gescheitert. Da hab ich mich hieran versucht: http://www.avr-cpp.de. Weil ich vorher schon ein bisschen was in JAVA gemacht hatte gefiel mir das ausgesprochen gut. Und siehe da, sowas wie ne Ausgabe an ein Terminal ging mit einem mal ganz easy :-) der Code für das "Hallo Ei-Pot" sieht dann so aus:



Uart terminal;
...
terminal.config(9600);
...
terminal.sendString("Hallo Ei-Pod");
...


Dieses SiSy das es da zum download gibt bring ein Terminalprogramm gleich mit.

Gruß Jahat

MagicWSmoke
02.05.2012, 14:53
ich war mit meinen ersten Gehversuchen mit dem ATmega8 nicht nur an der Ausgabe an den PC in C und mit dem AVR-Studio gescheitert.
Das muss man auch erst mal zusammenbringen.

Und siehe da, sowas wie ne Ausgabe an ein Terminal ging mit einem mal ganz easy
Dass Du evtl. am Thema vorbei bist, hast Du schon gemerkt ?
Außer Du kannst etwas dazu sagen, ob das von Dir beschriebene Programm in der Simulation eine Ausgabe auf ein virtuelles Terminal zusammenbringt.
Der Code sieht im Übrigen ähnlich nach Lego(tm)-Programmierung wie das Arduino-Zeugs aus. Nur warum sollte man dafür bezahlen, wenn's für Arduino umsonst ist ?

jahat
02.05.2012, 15:17
Hallo zusammen,
ich will von Bascom auf C umsteigen. Mein erstes Hindernis ist folgendes:
In Bascom gibts ein Terminal, wenn ich im Simulator irgend etwas mit "Print" ausgebe, erscheint es in eben diesem Terminal.
Ich möchte für C nun das AVR Studio nutzen, Bücher sind da und viele Tutorials ebenfalls zum "abarbeiten".
Nur, wie kann ich im AVR Studio ein Terminal Fenster öffnen, damit mir z.B. auch die "printf" Anweisungen angezeigt werden
beim simulieren ?
Danke euch.
Gruß
Blue72

Sorry, hatte zu oberflächlich gelesen und die Problemstellung Simulator total verdrängt. :rolleyes:
Der Code ist soweit ich verstanden habe einfach nur C++ ohne irgendwelches dran und drum und wird mit dem ganz normalen GCC übersetzt... hier noch mal zum gucken



////////////////////////////////////////////////////////////////
// Beispiel Hallo EiEiEi-Pod
////////////////////////////////////////////////////////////////
class Application : public Controller
{
protected: Uart terminal;

public: void onStart()
{
terminal.config(9600);
}

public: void onWork()
{
terminal.sendString("Hallo EiEiEi-Pod\n");
waitMs(1000);
}

} app;




Und übrigens hat der download mich nix gekostet nur der light Bausatz für die Hardware hier oben aus der Werbung für 12 Teuro oder so :)


Gruß Jahat,

so und jetzt ist der NOOB lieber ganz stille :/

Blue72
19.02.2013, 20:23
Hallo Leute,

lang lang ist´s her .... allerdings wird es jetzt akut, da ich C nun auch beruflich benötige.
Ich habe jetzt von Microsoft Viasual C++ so eingerichtet, das ich alle auf die interne Konsole ausgeben kann.
Zudem habe ich mir von Keil µVison4 installiert, welches bereits ein Terminal mitbringt.

Zum ersten lernen habe ich die "C Bibel" bekommen und bin dabei diese durchzuarbeiten.

Kennt jemand vernünftige C Kurse, welche mit einer Abschlussprüfung etc. Anerkannt sind ?
Die Kosten sind erst einmal egal. Ich hatte mir einen Kurs bei der SGD herausgesucht (Microcontroller),
allerdings wird die Sprache "C" dort nur am Rande vermittelt und in festen Blöcken.
Ich finde leider überall nur C++ oder C#. Einen reinen C Kurs habe ich bislang nicht gefunden.