Forum: Mikrocontroller und Digitale Elektronik Simulink, sample time


von Peter (Gast)


Lesenswert?

Hallo zusammen,

für ein embedded Linux (emdebian) verwende ich Simulink zur 
Codegenerierung. Verwende ich bspw. einen integrator, benötigt dieser 
eine feste Zeitbasis, also bspw. Aufruf alle 10ms (rtOneStep()).

Diese Samplezeit lässt sich in Simulink variieren.

Gibt es eine Möglichkeit, dies dann unter einem normalen Linux halbwegs 
vernünftig zu verwenden? Ein Echtzeitbetriebssystem mit z.B. 
zeitscheibenbasis würde es ja schaffen, alle 10ms die Simulink-Funktion 
aufzurufen. Geht dies auch unter einem normalen Linux? verwende ich 
einen normalen timer ist die Zeit relativ grob aufgelöst, vor allem bei 
Prozessorlast.

Kann man hier vielleicht mit variable step-time arbeiten?
Für tips bedanke ich mich schonmal im Voraus!

Danke und Grüsse,
Peter

von Michael K. (Gast)


Lesenswert?

Das geht. Wenn Du den Kernel neu kompilierst kannst Du die Scheduler 
Frequenz hochsetzten (von 200, 250Hz auf 1000Hz). Damit ist das System 
dann schnell genug.

Grüße,
Michael

von Peter (Gast)


Lesenswert?

Hallo,

Danke für den Hinweis, was wäre denn der entspr. Parameter den ich beim 
Kernel comp. anpassen müsste?

Grüsse, Peter

von Peter (Gast)


Lesenswert?

Ah,

es sollte CONFIG_HZ sein. (Bitte korrigieren falls dies nicht der 
einzige sein sollte)

von Peter (Gast)


Lesenswert?

Hallo nochmal,

leider behält er die 1000Hz nicht bei, d.h. bei jedem make ersetzt er 
die 1000Hz wieder durch 200Hz. Gibt es hier ggf. noch andere Stellen, wo 
eingegriffen werden muss?

Danke, Peter

von Michael K. (mmike)


Lesenswert?

Hallo Peter,

welche Distribution/Kernelversion setzt Du denn ein? Normalerweile muss 
man anfangs die Konfiguration machen (mittels "make menuconfig"). Hier 
kannst Du dann u.A. die Frequenz einstellen (CONFIG_HZ=1000). Danach 
"make all" und make bzImage. Sollte eigentlich so funktionieren ....

Grüße,
Michael

von Peter (Gast)


Lesenswert?

Hallo,

ich crosscompiliere unter lenny für arm (kernel 2.6.29). Habe schon 
einige Male Kernel compiliert, jedoch via make menuconfig finde ich die 
CONFIG_HZ in keiner Weise; nur im .config File.

Dieses erstelle ich also (mit make menuconfig bspw.) und ändere danch 
CONFIG_HZ in der .config manuell auf 1000.

Starte dann den make (make uImage), das erste was er (trotzdem) macht, 
ist  die config "neu zu erstellen" (er überschreibt die config_hz mit 
200).
Ansonsten bleibt das .config-File nach meinem (menuconfig)-Wunsch.

Bin mir sicher, dass ich was übersehe (habe zwischenzeitl. auch schon 
die "config-template"-Files unter arch/arm/config modifiziert (so gut 
wie alle auf 1000hz gesetzt), kein Erfolg). Bin sogar soweit gegeangen, 
dass ein grep CONFIG_HZ=200 keine Ergebnisse im Kernel-build-verzeichnis 
liefert.

Hast Du noch einen  Tip parat? ;)

Danke, Gruss, Peter

von Michael K. (Gast)


Lesenswert?

hm. Ich frag hier mal unsere Linux - Gurus ...

more to come ...

Grüße,
Michael

von Michael K. (mmike)


Lesenswert?

Hallo Peter,

also die Jungs in der Arbeit hatten auch keine groß anderen Ideen ...

hier sind die Einstellungen von meinem System:

Processor type and features --> Timer frequency --> 1000 Hz
Processor type and features --> Preemption model --> Preemptible kernel 
(Low Latency Desktop)
Processor type and features --> Preempt the Big Kernel Lock --> (enable)

in der Konfiguration muss folgendes stehen:
CONFIG_HZ_1000=y

hoffe jetzt klappts ....

Grüße,
Michael

von Benjamin S. (recycler)


Lesenswert?

Ein Bekannter hat dazu eine Realtimeerweiterung im laufenden Betrieb 
eingeschaltet. Wie genau das ging, weiß ich nicht, aber ich kann fragen.
Sein Roboter lief damit einwandfrei.

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.