Hallo, ich habe ein Grundgerüst eines C-Programmes, das bspw. UART-Handling, Timer-Initialisierung, Port-Initialisierung usw. erledigt. Hier gibt es auch eine Funktion "void usercode (void)", die in der Timer-Funktion aufgerufen wird. In dieser Funktion werden dann alle anwendungsspezifischen Dinge abgehandelt. Soweit so gut. Nun möchte ich anderen die Möglichkeit geben, die Funktion "usercode" mit eigenem Code zu füllen, ohne dabei jedoch die Quellen zum Grundgerüst zu besitzen. Kann man das Grundgerüst in kompilierter Form weitergeben z.B. als Objekt-Files, die dann entsprechend gelinkt werden? Oder wie macht man das am besten? Joline
Hi, das ist das berühmte Thema vom AVR. Er kann keinen externen Code ausführen... Ein ARM z.B. kann das. Was Dir übrig bleibt, ist halt einen Interpreter zu schreiben. Sebastian
@Sebastian Ich glaube, du hast die Fragestellung nicht richtig verstanden (oder ich micht ;-)). Grundsätzlich macht man so etwas mit libs. Wie das mit gcc geht habe ich noch nicht ausprobiert. Allerdings halte ich das nicht für sinnvoll, weil kaum ein Code so gut ist, das man daran keine Änderungen machen will. Und wenn du alle möglichen Wünsche an deine Library codierst, wird das Ding so groß, das es in keinen AVR mehr paßt. Gruß Matthias
Also aus der Windows-Programmierung kenne ich, daß man vorkompilierte .obj-Dateien hat, die dann entsprechend mit gelinkt werden. Aber ich habe das eben noch nie gemacht und erst recht nicht mit dem gcc. Deshalb hier die Frage. Aber vielleicht gibt es ja auch noch andere Varianten. @Matthias "Allerdings halte ich das nicht für sinnvoll, weil kaum ein Code so gut ist, das man daran keine Änderungen machen will." Das weiss ich auch. Aber ich möchte jetzt auch nicht diskutieren, warum ich das so mache, sondern gern eine Lösung haben.
Soso, frei nach dem Motte "Ich möchte meinen Code geheimhalten, helft ihr mir?"
@Werner "Soso, frei nach dem Motte "Ich möchte meinen Code geheimhalten, helft ihr mir?"" Gibst Du Deinen Kunden immer allen Code? Sicher, man kann den auch mitgeben. Dann wird's aber eben teurer. Die Softwareentwicklung (bewußt nicht Programmierung) macht sich auch nicht von allein. Wie gesagt, ich will eigentlich nicht darüber diskutieren. Das sind immer völlig sinnlose Diskussionen, die letztendlich zu nichts führen. Ich hatte nur gehofft, hier eine kompetente Auskunft zu erhalten.
Hi... Von dieser Art "Datenschutz" bzw. "Urheberrechte-Schutz" halte ich garnix! Ich würde mich auch schwer tun, Code in eigene Programme einzubinden, den ich nicht nachvollziehen kann oder darf. Bei einem extrem umfangreichen System wie dem PC kann man darauf nicht verzichten, es schreibt sich nunmal nicht jeder sein eigenes Betriebssystem. Aber bei einem recht überschaubaren System wie dem AVR lehne ich es ab, mich abhängig zu machen. Da schreibe ich lieber meinen Code selbst, auch wenn es länger dauert und der Code bedeutend schlechter/uneffizienter ist als fremder, im Net vorhandener Code. Dafür verstehe ich ihn aber und kann nachvollziehen was der AVR macht. Sicher interessiere ich mich auch für fremde (gut kommentierte) Quelltexte, aber nur zum Ideen sammeln, nicht zum unverstanden Kopieren... Wenn du schon dein "Grundgerüst" mit User-Funktionalitäten erweitern willst, deinen Code aber nicht frei gibst, dann wirst du die "Endmontage" für jeden Kunden wohl selbst machen müssen. Das wäre dann auch ehrlich verdientes Geld. Für ein "Betriebssystem für AVRs" reichen einfach mal die Ressourcen nicht, abgesehen davon, dass er keine v.Neumann-Architektur hat, wo sich Programm und Daten einen Speicher teilen. Winkewinke... ...HanneS... (der manchmal viel Müll schreibt, aber dazu steht!)
Welchen C-Compiler benutzt Du? Es gibt 3 Möglichkeiten: * kompilierte Library, die der Kunde mit zu seinem Source linken kann. * Hardware fertig programmiert mit Grundgerüst, der Kunde kann seine Programmteile über einen Bootloader, der im Grundgerüst enthalten ist, in die Hardware laden. * Das Grundgerüst besitzt einen Interpreter, der Code des Anwenders ausführt. Du solltest Dir aber im klaren darüber sein, dass der Anwender an Deinen Code in jedem Fall drankommt. Zwar nicht an den Source, aber zumindest an den disassemblierten Code. Spätestens, wenn er ein "User-Programm" schreibt, welches das Flash ausliest und über UART an den PC schickt (bei Möglichkeit 2 und 3). Ohne Source ist die Möglichkeit des Kunden, sein Produkt zu debuggen eingeschränkt -> verärgerter Kunde -> keine Folgeaufträge. Besser finde ich, den Source mitzugeben und alles vertraglich (NDA) abzusichern. Aber wie Du schon meintest: das ist Dein Bier. Stefan
@Stefan: "* Hardware fertig programmiert mit Grundgerüst, der Kunde kann seine Programmteile über einen Bootloader, der im Grundgerüst enthalten ist, in die Hardware laden." Na das klingt doch super. Ich benutze WinAVR (avr-libc). Im Moment habe ich eine Lösung über .o-Dateien (wie unter Windows .obj) gefunden. Damit funktioniert es erst einmal. Aber das mit dem Bootloader, der alles schon integriert hat, ist wahrscheinlich genau das, was ich suche. Für meine Kunden muss alles so einfach und unkompliziert wie möglich gehen. "Du solltest Dir aber im klaren darüber sein, dass der Anwender an Deinen Code in jedem Fall drankommt." Sicher. Wer es 1. darauf anlegt (dem sende ich den Code auch im Klartext ;o) ) und 2. die nötige Ahnung hat. Darum geht es ja vordergründig auch nicht. Sondern wie schon gesagt soll es einfach sein, ohne dass der Kunde prinzipielle Fehler machen kann und noch irgendwelchen umfangreichen Support braucht. Wie funktioniert das mit dem Bootloader? Ich dachte, der Bootloader startet einfach von einer vorgegebenen Stelle ein Programm und ist anschliessend tot (bis zum nächsten reset), oder? Joline
>Sondern wie schon gesagt soll es einfach >sein, ohne dass der Kunde prinzipielle Fehler machen kann und noch >irgendwelchen umfangreichen Support braucht. Hohoho ;-) Ich kenn ja Deine Kunden nicht, aber Dein Projekt klingt nicht so, als ob es ganz ohne Support abgehen könnte ;-) >Wie funktioniert das mit dem Bootloader? Ich dachte, der Bootloader >startet einfach von einer vorgegebenen Stelle ein Programm und ist >anschliessend tot (bis zum nächsten reset), oder? Der Bootloader macht das, was Du ihm beibringst. Du solltest auf jeden Fall eine praktikable Möglichkeit einbauen, den Start des User-Programms nach dem Reset erstmal zu verhindern, damit ein Update programmiert werden kann, wenn das Userprogramm Schrott ist. Z.B.: Bei Druck einer Taste während Reset wartet der mc auf ein Update ... Stefan
"... eingeschränkt -> verärgerter Kunde -> keine Folgeaufträge." Glaubs nur, so ist es wirklich. Wir hatten auch den Fall, daß Software modifiziert werden mußte. Aber einmal existierte die Firma nicht mehr und einmal war der Programmierer weggestorben (Verkehrsunfall). Seitdem geht bei uns nichts ohne kompletten Sourcecode und alles was sonst noch dazu gehört (Projektfile, Makefile usw.) Ist der Kunde zufrieden mit Deiner Arbeit, hat er nicht die geringste Lust sich durch die fremde Source durchzukämpfen, sondern wird sich bei Modifikationen oder Folgeaufträgen an Dich wenden. Aber er braucht eben einen Notnagel, um nicht im Ernstfall alles komplett in den Müll zu schmeißen. Auch kann es die Arbeit erleichtern, wenn der Kunde kleinere Änderungen (Z.B. Parameter eines Regelkreises) selber durchführen darf und nicht Unsummen für Nacharbeiten bezahlen muß. Aber es ist ja Dein Bier, ob Du an Folgeaufträgen interessiert bist oder nicht. Peter
Ja, ja. Ihr habt ja Recht. Ich habe ja auch am liebsten den Sourcecode. Nicht, um damit irgendetwas zu machen, sondern nur für den Fall der Fälle wie Peter schon sagte. Es geht ja auch nicht darum, den Code gar nicht herzugeben. Aus dem PC-Bereich kenne ich das so: Für einen bestimmten Betrag x erhält man fertige Komponenten (z.B. ActiveX-Controls), die man dann in eigene Programme einbauen und benutzen kann. Für etwas mehr kann man dann auch den Source-Code erhalten. Und so in etwa sollte es mit meinem Code auch werden. Es gehört ja auch noch ein Stück Hardware mit dazu. Die Software ist nur ein Teil des Ganzen, damit nicht jeder bei Null anfangen muss. Selbstverständlich kann auch jeder komplett sein eigenes Programm schreiben. ;o) Oft ist es ja auch gar nicht notwendig, in den fremden Quellen etwas zu ändern (Jaja, da gibts auch gegenteilige Meinungen...). Und vor allem sind viele auch gar nicht fähig dazu (Keine Abwertung!). Es ist nun mal nicht jeder ein Programmierer. Die Änderungen, die von der Mehrzahl der Kunden gemacht werden (wollen), sind in der Art: Wenn "Eingang 1" und "Eingang 3" dann "Ausgang 4". Und je einfacher das gesamte Handling, desto besser. Optimal wäre es, wenn der Kunde gar keinen Compiler benötigt, sondern nur ein Werkzeug, das seine Befehle unkompliziert in den AVR überträgt. Aber dazu braucht man wahrscheinlich wirklich eine Art Interpreter, der dann den Usercode ausführt. Und das ist wahrscheinlich für so einen kleinen AVR auch ein bißchen überpowert. >Auch kann es die Arbeit erleichtern, wenn der Kunde kleinere >Änderungen (Z.B. Parameter eines Regelkreises) selber durchführen >darf und nicht Unsummen für Nacharbeiten bezahlen muß. Das ist ja eben die Idee, eine Funktion "usercode" einzuführen, die der Anwender dann mit eigenem (einfachen) Code füllen kann, ohne sich von dem Rest verwirren zu lassen. Naja, es gibt sicher für alles ein Für und Wider. Aus Programmierersicht habe ich auch immer am liebsten über alles die Kontrolle. ;o) Joline
Interpreter wurde ja schon mehrmals genanannt und scheint mir die sinnvollste Loesung fuer diese "wann dann"-Aufgaben, so man denn wirklich den Quellcode nicht rausgeben will. Eine an AWL (IEC61131-3) angelehnte Sprache ("abgespeckt") sollte nicht so kompliziert zu implementieren sein. Die Liste aus "pseude AWL"-Anweisungen auf dem PC in "Byte-Tockens" umwandeln und diese Tokens in den AVR uebertragen. Das "Geruest" interpretiert die Tokens dann. Ablage - je nach Groesse - entweder via speziellen Bootloader in bestimmte Flash-Adresse oder durch eine upload-Funktion in der "Geruest-"Anwendung in einen internen oder externen EEPROM. Um Prinzip also nicht anders als bei einer handelsueblichen speicherprogrammierbaren Steuerung. Na ja - nur meine 2 Eurocent dazu. Martin
Ich würde überhaupt keine Programmierer beauftragen ,wenn nicht vorher vereinbart wird ,das der Sourcecode mitgeliefert wird. 1) Ich bin dar Auftraggeber und bezahle schließlich dafür. 2) Kann ich auf tausend andere Leute zurückgreifen die dieselbe Arbeit gerne machen und MIT Sourcecode. Wegen der zurzeit extrem schlechten Arbeitsmarktlage für Programmierer kann der Auftraggeber im Prinziep fast alles fordern.
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.