Hallo Leute! Ich habe meine eigenes Programm geschrieben, dass mir C Code für mein AVR Mikrokontroller erstellt!! Nichts weltbewegendes!! Wie kann ich in dieses Programm einen Mikrokontroller Kompiler einbauen. Bisher habe ich immer WINAVR und AVRStudio benutzt, jetzt möchte ich, das von meinem Programm aus machen! Hat jemand mal vielleicht ein Beispiel oder sowas in der Art?? Gruß
Student wrote: > Hallo Leute! > Ich habe meine eigenes Programm geschrieben, dass mir C Code für mein > AVR Mikrokontroller erstellt!! Nichts weltbewegendes!! > > Wie kann ich in dieses Programm einen Mikrokontroller Kompiler einbauen. > Bisher habe ich immer WINAVR und AVRStudio benutzt, jetzt möchte ich, > das von meinem Programm aus machen! > > Hat jemand mal vielleicht ein Beispiel oder sowas in der Art?? Oh. Das ist gefährlich. Bei deinem Benutzer muss dazu genau der Compiler deiner Wahl in meist exakt der richtigen version installiert sein. Aber du hast es nicht anders gewollt :-) Die C-Funktion die du suchst, heist 'system'. Diese Funktion stellt dir praktisch ein Command Line zur Verfügung und führt den an die Funktion übergebenen String als Kommando in dieser Command Line aus. Jetzt musst du nur noch rausfinden, wie dein Compiler von der Command line aus aufgerufen werden will. Normalerweise macht man das mit einem makefile. Dein erstes Ziel wird es daher sein, auf AVRStudio zu verzichten und zu lernen, wie man mit WinAvr ohne AVRStudio umgeht. Sobald du das kannst, weist du auch wie deine Kommandos für die Command Line aussehen müssen. Und dann kannst du mit system() diese Kommandos an eine Command Line übergeben. Viel Spass dabei. Und denk immer daran: Wenn dein Benutzer sein System nicht so konfiguriert hat, wie du das erwartest, dann bist du ersschossen.
system() sollte man uebrigens eher nicht nehmen, um fremde Programme aufzurufen. Das kann boese Sicherheitsluecken oeffnen, ist oft sehr langsam und bietet keine Features wie direktes Einlesen der Standard-Ausgabe des aufgerufenen Programms. Besser ist es, betriebssystemspezifische Funktionen zu nehmen.
Unter VisualBasic u.ä. Hochsprachen gibt es meist einen "shell"-Befehl. Zur benutzten Programmiersprache gab es ja keine Angaben...
Also danke für die Tipps! Das kling kompliziert! Das habe ich es mir auch gedacht!! Ich habe meine Programm mit Builder C++ geschrieben! Hat vielleicht jemand irgendwelche Beispiele oder Links, wo ich die Inforamtionen sammeln kann?? P.S.: Bitte schreibt nicht versuche es bei google, denn das habe ich schon gemacht!!! Gruß
Ich hab mal ein bischen gegoogelt :-) Also: Laut diversen Sites, gibt es auf deinem Builder C++ Help Verzeichnis ein File namens bcb5tool.hlp, in dem beschrieben ist, wie der Compiler bzw. die Tools von einer Command Line aufgerufen werden. Das ist genau das was du erst mal brauchst. Zwischenfrage: Kannst du mit einer DOS-Box noch umgehen? Wenn nein, dann solltest du dich darüber erst mal im Web etwas schlau machen. Zb. gibt es in einer DOS Box das Kommando DIR, welches ein INhaltsverzeichnis des momentan aktuellen Verzeichnisses ausgibt. Probier das mal aus! Die DOS Box findet sich in den meisten Windows Verisionen unter 'Start - Programme - Zubehör'. Alternativ kannst du auch so vorgehen: 'Start - Ausführen' und als auszuführendes Programm gibst du 'cmd' an. Auch dann müsste sich die DOS-Box öffnen. In der DOS-Box gibst du jetzt einfach mal 'dir' ein. Daraufhin kriegst du das Inhaltsverzeichnis ausgegeben. Wie kann man nun dasselbe von einem C Programm aus machen: int main() { system( "dir" ); } Das Kommando welches ausgeführt werden soll, wird als String an system übergeben. Um die Ausgabe nicht an die Konsole, sondern in eine Datei zu bekommen, benutzt man die Redirection. Wieder ein Vortest in der DOS-Box dir > test.txt der > veranlasst die Konsole, die Programmausgabe in eine Datei zu routen. Die Datei kannst du dir zb ansehen mit type test.txt Im Programm geht das dann zb so: int main() { system( "dir > test.txt" ); } Also: einfach die Kommand Line, so wie du sie in der DOS Box eingeben würdest an system übergeben. Jetzt kommt obiges Help File ins Spiel. In dem steht (angeblich) wie man den Compiler von einer Command Line aufruft. Und dank DOS-Box kannst du das dann auch probieren. Wenn du dann weißt wies geht, dann weißt du auch welchen String du an system übergeben musst. chris hat übrigens recht: system ist für sowas nicht unbedingt ideal. Systemspezifische Dinge sind da besser geeignet. Aber auch etwas komplizierter in der Anwendung. Daher würde ich vorschlagen, du probierst erst mal mit system rum, bis du vor allen Dingen das Handling der Command Line intus hast, denn das wirst du praktisch immer brauchen.
Hallo, hab mich selber letztens mit sowas rumgeschlagen. Wenn man vorher noch nichts mit den MS-Betriebssystemaufrufen zu tun hatte ist das etwas fummelig. Hier mal ein paar Infos die mir dabei weitergeholfen haben: Beispiel von Microsoft: http://support.microsoft.com/kb/190351/de Beispiel bei Codeproject: http://www.codeproject.com/KB/threads/redir.aspx Beispiel wie Programmers Notepad 2 bei WinAVR das macht (in der Datei toolrunner.cpp) SVN-Repository: https://pnotepad.svn.sourceforge.net/svnroot/pnotepad Thomas
Hallo Leute, ich habe schon sehr lange was zu diesem Thema gesucht Leute. Gibt es da von irgendjemand noch irgendwelch Beispiele? @Thomas W. https://pnotepad.svn.sourceforge.net/svnroot/pnotepad Unter dem obigen Link sind haufen Datein. Ich habe leider die Datei toolrunner.cpp nicht finden können wo liegt Sie genau?? Gruß Sven
z.B. hier: https://pnotepad.svn.sourceforge.net/svnroot/pnotepad/trunk/pnwtl/toolrunner.cpp
1 | https://pnotepad.svn.sourceforge.net/svnroot/pnotepad/trunk/pnwtl/toolrunner.cpp |
CU
Hi Windows stellt die Funktionen ShellExecute und ShellExecuteEx zu Verfügung (Windows SDK). Damit kannst du Programme oder Dateien mit dem dazugehörigen Programm starten. Bei ShellExecuteEx muss dazu eine Struct mit den entsprechenden Parametern gefüllt werden. Zum Beispiel kann man den Namen einer PDF-Datei übergeben, und die Datei wird mit dem Acrobat-Reader geöffnet. MfG Spess
Hallo Leute Karl heinz Buchegger, hat was mit > Und denk immer daran: Wenn dein Benutzer sein System nicht > so konfiguriert hat, wie du das erwartest, dann bist du ersschossen. geschrieben! Was meint er mit "erschossen". Ist mein PC hin oder mein Betriebsystem oder das Programm?
"Erschossen" = es funktioniert nicht und der Benutzer kotzt. Ist der Benutzer einer von der zahlenden Sorte, auch als "Kunde" bekannt, kann das unangenehm werden. Normalerweise macht man sowas anders. Wenn "--->" in den folgenden Bildern "ruft auf" bedeutet, dann macht man statt
1 | Codegenerator ---> Compiler |
normalerweise
1 | Buildtool ---> Codegenerator |
2 | Buildtool ---> Compiler |
D.h. man lässt eine übergeordnete Instanz wie make den Softwaregenerierungsprozess und den Übersetzungsprozess koordinieren. Das klassische Bausteinprinzip, für das IDE-User häufig kein Händchen mehr haben, hat schon was.
Norgan wrote: > "Erschossen" = es funktioniert nicht und der Benutzer kotzt. > > Ist der Benutzer einer von der zahlenden Sorte, auch als "Kunde" > bekannt, kann das unangenehm werden. Yep. Den hast du dann stundenlang an der Strippe und darfst mit ihm sein System debuggen um rauszukriegen warum ein Fremdprodukt, welches eigentlich nicht dein Bier ist, du aber leichtsinniger- weise eingebunden hast, ausgerechnet auf seinem System nicht funktioniert. 'Ausreden' wie "Das ist ja gar nicht mein System, warum soll ich mich damit rumschlagen warum xyz hier nicht funktioniert" gelten dann nicht. Der Kunde will eine Lösung, und da er (aus seiner Sicht) in erster Linie mit deinem Programm arbeitet und von xyz nichts sieht, bist du dran. Hatte das Spielchen jahrelang mit Microsofts DAO. Bei 10 Rechnern ist im Schnitt 1 dabei, auf dem DAO einfach nicht läuft und keiner (noch nicht mal Microsoft) weiß warum. Und jetzt mach das mal einem Kunden klar, der auf diese Datenbankfunktionalität angewiesen ist, weil er Fremddaten damit einlesen muss.
Also das wäre dann der Richtige weg? > Buildtool ---> Codegenerator > Buildtool ---> Compiler Bloß das verstehe ich nicht ganz was Ihr damit meint. Buildtool!? Was ist das, noch nie gehört? Wie Arbeiten dann die ganzen Programme wie AVRStudio?
"Buildtool" bedeutet i.A. ein Shell-Script (Batchfile) oder das Programm "make". Das setzt aber dan voraus, dass sowohl der AVR-C-Compiler als auch das entsprechende Buildtool korrekt installiert sind, deshalb ist mir nicht ganz klar, welche Vorteile das bringt. > Das klassische Bausteinprinzip, für das IDE-User häufig kein Händchen > mehr haben, hat schon was. Außer, der schon genannte "Kunde" ist ein IDE-Benutzer und hat kein Händchen dafür ;) Konkret: Wenn der Kunde sich mit "make" auskennt, und am besten noch den AVR-Compiler selbst installieren kann, bestens! Denn dann musst du deinen Codegenerator als Baustein verpacken, den der Kunde in sein make-System einbauen kann (das kostet wenig Arbeit deinerseits). Falls nicht, mein Beileid, denn das angesprochene "Baukastenprinzip" wurde für Computerexperten entwickelt, nicht für Menschen. Zum Beispiel gibt es keine allgemein funktionierende Methode, herauszufinden, ob und wo der AVR-Compiler installiert ist; es gibt nur Insellösungen die funkionieren oder auch mal nicht (z.B. PATH-Variable, die kann richtig gesetzt sein oder nicht). Wenn du dich aber auf ein System beschränkst, sieht es rosiger aus. Zum Beispiel wurde zumindest Windows-weit ein solches System eingeführt, nämlich die allseits bekannte Registry (auf die ironischerweise von Unix-Fans immer geschimpft wird, obwohl oder vielleicht gerade weil sie ein Problem einheitlich löst welches unter Unix auf jedem System anders gelöst werden muss). Soll heißen, der AVR-Compiler muss auf dem Kundensystem zwar installiert sein; danach ist es aber bei den meisten Produkten (und hoffentlich auch dem AVR-Compiler) über die Registry möglich, dessen Standort herauszufinden. Sollte auch das schiefgehen, bleibt immer noch die Möglichkeit, dass der Benutzer selbst Hand anlegt und den Befehl zum Aufruf des AVR-Compilers per Hand eingibt und dieser Befehl dann im schon genannten system() bzw. ShellExecuteEx() verwendet wird.
Morin wrote: > "Buildtool" bedeutet i.A. ein Shell-Script (Batchfile) oder das Programm > "make". Das setzt aber dan voraus, dass sowohl der AVR-C-Compiler als > auch das entsprechende Buildtool korrekt installiert sind, deshalb ist > mir nicht ganz klar, welche Vorteile das bringt. Es hilft dir zumindest insofern, als dass du einen zu deinem Programm externen 'Seiteneingang' hast, der bei der Fehlersuche hilfreich sein kann. Du lässt dein Programm die make-Steuerdatei generieren und kannst dann in der Datei nachsehen was das Programm so alles generiert hat, ob die Pfade stimmen etc. Danach: DOS-Box auf und make mal händisch anwerfen lassen. Anhand der Fehlermeldungen kommt man dann meist weiter. Stösst man zb den Compiler direkt aus dem Programm heraus an, dann hat man das Problem, dass man den tatsächlich an system übergebenen String nicht mehr sieht und es daher schwierig ist exakt diese Zeile in einer Commandline zu reproduzieren. Persönlich denke ich, dass man gerade bei der Anbindung an externe Komponenten nie genug Testmöglichkeiten und Variabilität einbauen kann. Sei es, dass system-Aufrufe komplett gedumpt werden, sei es dass man Umwege über eine Batch Datei geht, sei es dass man ein Commando-Template in eine externe Datei legt, in der das Programm dann Parameter ersetzt, ... Solange es keine Probleme gibt, ist das alles wunderbar. Wenn es aber, aus welchem Grund auch immer, Probleme gibt, ist man arm drann.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.