Forum: Mikrocontroller und Digitale Elektronik Nachladbarer/vorkompilierter Code beim AVR


von Joline (Gast)


Lesenswert?

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

von Sebastian Wille (Gast)


Lesenswert?

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

von MNR (Gast)


Lesenswert?

@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

von Joline (Gast)


Lesenswert?

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.

von Werner (Gast)


Lesenswert?

Soso, frei nach dem Motte
"Ich möchte meinen Code geheimhalten, helft ihr mir?"

von Joline (Gast)


Lesenswert?

@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.

von ...HanneS... (Gast)


Lesenswert?

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!)

von Stefan Kleinwort (Gast)


Lesenswert?

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

von Joline (Gast)


Lesenswert?

@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

von Stefan Kleinwort (Gast)


Lesenswert?

>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

von Peter D. (peda)


Lesenswert?

"... 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

von Joline (Gast)


Lesenswert?

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

von mthomas (Gast)


Lesenswert?

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

von Patrik (Gast)


Lesenswert?

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
Noch kein Account? Hier anmelden.