DOs and DO NOTs for developing Embedded Systems software

Zum Thema “Was sollte man tun und was nicht, wenn man Software für Embedded Systems entwirft und usitzt?”habe ich mal einen Artikel zusammegestellt. Dieser Artikel ist natürlich subjektiv, ich bin gerne bereit zu diskutieren. Die meisten Aspekte habe ich aber derweil schon aus verschiedenen Onlinequellen bestätigt bekommen.

http://www.final-memory.org/?page_id=2113

Im Prinzip habe ich dort mal zusammengefasst, was ich alles seit der Universität gelernt habe. Teile davon praktisch im Job, viele andere aber auch fortbildungsmäßig aus dem Netz. Im Vordergrund steht vorallem, fiese Fallen von faul programmierten C zu umgehen. Viele der Regeln und Vorschläge sind auch sprachunabhängig und können natürlich auch auf andere Programmiersprachen angewendet werden.

Ich selber habe viele dieser Regeln früher zum Beispiel nicht beherzigt. Wenn ich die Sourcen zu meiner Diplomarbeit ansehe, dann habe ich viele davon eklatant verletzt. Aber irgendwo will man ja auch einen Lerneffekt erkennen.

Als weitergehende Lektüre kann ich auch das “Embedded C Coding Standard” von Michael Barr empfehlen.

Irgendwann schreibe ich vielleicht auch noch einengrößeren zusammenhängenden Artikel oder auch ein kleines Buch. Die Liste kann sicherlich noch erweitert werden.

Huawei E220 UMTS MINI USB Modem unter Ubuntu Lucid Lynx 10.04 LTS verwenden

Ich war heute mal neugierig und habe mein UMTS Modem mit dem neuen PC ausprobiert. Tatsächlich lief es unter GNOME ohne große Klimmzüge mit Ubuntu Lucid Lynx 10.04 LTS.

Hauptproblem war wieder, Linux dazu zu bewegen, ein Modem statt einem USB Stick zu erkennen. Mittlerweile gibt es dafür Tools. Man muss nur das Tool “USB ModeSwitch” installieren und in einer Konfigurationsdatei etwas anpassen.

Das ist unter http://wiki.ubuntuusers.de/USB_ModeSwitch sehr gut beschrieben und auf das E220 passen die dort beschriebenen Regeln 1:1. Selbst ohne Reboot erkannte der Kernel das Modem beim erneuten Einstecken danach als solches.

Danach erkennt der GNOME Netzwerkmanager das Modem, wenn man unter “Mobiles Breitband” eine neue Verbindung erstellt. Von Hand waren keine Einstellungen nötig, ich habe “E-Plus” als Provider ausgewählt. Danach fragte der Netzwerkmanager nur noch nach der PIN (keine Basteleien mehr nötig) und erstaunlicherweise war ich nach nur 2 Versuchen (ich erinnere mich mit Grausen an den Februar oder März) online.

Tatsächlich schreibe ich diesen Artikel gerade über die UMTS Verbindung, auch wenn ich auf Anhieb den Unterschied zum Breitband via Kabelanschluß merke. Aber immerhin online sein, wenn die Breitbandverbindung ausfällt oder z.B. schon in die neue Wohnung verlegt wurde.

Seit März übrigens das erste Mal wieder, daß ich die UMTS Verbindung insgesamt in Betrieb nehme.

Joystickkalibrierung unter Linux automatisieren

Seit Jahren habe ich Joysticks und Joypads wenn nötig unter Linux immer von Hand kalibriert, aber nie die Einstellung dauerhaft fixiert.

Tatsächlich bringt das Kommandozeilentool jscal alles nötige mit. Ich las unter http://www.averyjparker.com/2005/12/29/joystick-calibration-under-linux/ einen schönen Artikel darüber und möchte ihn hiermit verkürzt eindeutschen.

Das Vorgehen ist wie folgt:

  1. Joystick oder Joypad mit jscal kalibrieren: jscal -c /dev/input/js0
    Das Devicefile sollte natürlich jeweils angepasst werden.
  2. Die Kalibrierung prüfen, z.B. mit MAME oder MESS
  3. Die Kalibrierungsdaten abspeichern: jscal -p /dev/input/js0 >calibrate-joystick.sh
    Dieses Kommando erzeugt einen Aufruf von jscal, der die Daten wiederherstellt.
  4. Im Prinzip reicht es, dieses Shellskript ausführbar zu machen, also #!/bin/sh Header davor und chmod +x
  5. Zum Schluss das Skript in die eigene Autostarsequenz einhängen, entweder system global oder so wie ich ganz banal in den GNOME Autostart rein.

Danach sollte bei jedem Start das Pad oder der Joystick ordentlich kalibriert sein.

Frohes Daddeln :)

Mein erstes Routerabenteuer: a-quip A/WLAN-4

Erstmalig brauche ich im Leben einen klassischen Router. In Clausthal im Studentenwohnheim war es nicht erlaubt, einen Router zur Teilung der IP zu betreiben, das UMTS, was ich bis vor 2,5 Monaten im Betrieb hatte, machte es nicht sinnvoll und davor hatte ich daheim nie Breitband.

Kabel BW macht es möglich und nun habe ich seit Mitte März qualitativ hochwertiges Breitbandinternet im Haus. Natürlich wollte ich auch meine Ataris entgültig mit der Welt vernetzen, und nicht nur lokal mit dem regulären PC. Ergo muss endlich doch eine Routerlösung daher.

Vorigen Samstag ging ich daher shoppen und kaufte einen Router, der zunächst alles zu halten schien, was er versprach. Ich hatte mir im MediaMarkt einen günstigen a-quip A/WLAN-4 Router gekauft.

Anstöpseln und grundlegend konfigurieren ging auch ganz leicht. Per Default war ein sinniges Subnetz eingestellt und er erkannte auch automatisch meine über DHCP angebundene Internetverbindung. Das Problem kam dann im 30 Minuten Takt. Bei ICQ und Skype war plötzlich die Verbindung weg und wieder da. Im IRC konnte  ich dies durch ominöse Reconnects beobachten. Was war los?

Der Router kam offenbar nicht mit den DHCP-Einstellungen des Providers zurecht. Er machte brav einen Refresh und damit praktisch einen Neustart, obwohl sich zugeteilte IP und andere Verbindungsdaten nicht geändert hatten. Gehe ich da von zuviel Intelligenz im Gerät aus?

Jedenfalls konnte ich das Problem dann sogar auch über Nacht im Routerlog beobachten, zu einem Zeitpunkt, wo keinerlei Rechner im LAN aktiv waren. Damit konnte es nur am Router liegen.

Lars riet mir zu einem Firmwareupgrade. Das hat mir aber nicht geholfen. Das Problem blieb bestehen. Da meine Supportanfragen ins Leere liefen, bin ich ehrlich enttäuscht. Das Gerät kommt wenn irgendmöglich zurück und wird gegen ein Exemplar getauscht, welches offiziell mit Kabel BW zusammenarbeiten kann.

Testverdikt für a-quip A/WLAN-4: mangelhaft

Der kurze Weg zur RS232

Da mein neuer ACER AS X1301-3 von Haus erstmal keine RS232 Schnittstelle mitbrachte, hatte ich schon beim Kauf darüber nachgedacht. Schließlich brauche ich einen solchen Port für meine Mikrocontrollerprojekte und -basteleien.

Da der Rechner laut Datenblatt über einen PCI Express x1 Slot verfügte, kaufte ich gleich eine passende Steckkarte mit. Heute morgen habe ich mich dann daran gemacht , die Karte einzubauen. Das Garantiesiegel am Rechner habe ich geflissentlich ignoriert und die Seitenverdeckung abgeschraubt.

ACER AS X1301-3 von innen (PCIe Slots oben rechts)
ACER AS X1301-3 von innen (PCIe Slots oben rechts)

Wie man schön sieht, ist die Grafikkarte doch nicht Onboard, sondern belegt einen PCI Express x16 Slot ganz oben. Immerhin, das erlaubt später mal einen Austausch. In den x1 Slot darunter setzte ich also die RS232 Karte von Delock. Genau eine Delock 89236 mit 16C950 Uart.

Delock 89236 RS232 für PCI Express x1
Delock 89236 RS232 für PCI Express x1

Windows  7 erkannte die Karte erstmal nicht, mochte sie aber nach dem ich von der Treiber-CD einen passenden Treiber eingespielt hatte. Mit Teraterm konnte ich dann auf mein Phytec Mikrocontrollerboard über die frische RS232 zugreifen. Warum Windows die Schnittstelle allerdings als COM3 einbindet, wenn es sonst keine RS232 im System gibt, erscheint mir aber fragwürdig.

Unter Linux war es zunächst etwas wackelig. Beim ersten Booten zeigte der Kernel die Schnittstelle zwar korrekt über dmesg an, aber beim Zugriffsversuch bekam ich einen I/O Error.

[    0.650679] Serial: 8250/16550 driver,
 4 ports, IRQ sharing enabled
[    0.650942] serial 0000:03:00.0:
 PCI INT A -> Link[AE2A] -> GSI 16 (level, low) -> IRQ 16
[    0.650950] 1 ports detected on
 Oxford PCI Express device
[    0.651010] ttyS0: detected caps 00000700
 should be 00000100
[    0.651014] 0000:03:00.0: ttyS0 at MMIO 0xfd9fd000
(irq = 16) is a 16C950/954

Nach einem Reboot funktionierte es allerdings und ich konnte das Board wie unter Windows mit gtkterm ansprechen:

GTKTerm
GTKTerm

Ob die Schnittstellenkarte auch mit meinem AVR-Board harmoniert, muss ich noch herausfinden. Da allerdings Linuxseitig der reguläre Treiber für RS232 Schnittstellen verwendet wird, bin ich eigentlich recht zuversichtlich.

Insgesamt müsste die Delock 89236 Karte damit Linux tauglich sein!

Linux auf dem ACER AS X1301-3 : ein erstes Fazit

Meinen neuen Rechner habe ich ja mittlerweile eine knappe Woche. Beginnend am Sonntag habe ich auch Linux installiert und eingerichtet.Die Linuxtauglichkeit des ACER AS X1301-3 will schließlich betrachtet werden.

Nach einem anfänglichen Versuch mit Kubuntu und KDE4, habe ich mich dann ganz fix für Gnome umentschieden. KDE4 hat zuviel geändert, das ganze Bedienkonzept ist anders, die Optik zu bunt und verspielt, vorallem aber habe ich sovieles vermisst. Ergo nach langen Jahren mit KDE mal wieder Gnome :)

Rein technisch ist es jetzt ein Ubuntu LTS 10.04 Lucid Lynx mit 64Bit geworden.

Ansonsten ist alles ganz erfreulich, Skype läuft endlich, komplett mit Video und Ton unter Linux bei mir. Die Webcam lief ohne Treiber von Hand bauen zu müssen, in den USB Port eingesteckt und lief.

Die Datenrettung ging sehr leicht. Die alte Platte habe ich in ein externes Gehäuse gesteckt und einfach angeschlossen. Ubuntu erkannte auf Anhieb alle Partionen darauf und der Rest war eigentlich nur noch runterkopieren. NTFS wird mittlerweile mit einem modernen Treiber eingebunden, auch mit Schreibzugriff. Truecrypt liess sich ebenfalls installieren und bietet auch unter Linux nun ein GUI, welches dem GUI unter Windows sehr ähnlich ist.

Die meisten Emulatoren habe ich entweder compiliert oder aus Paketen installiert, läuft soweit ganz gut. DVD und Filme lief auch mit der Hilfe der Ubuntu Wikis.

Die Onboardgrafik mit NVIDIA Chipsatz wird auch vom NVIDIA Treiber erkannt und liefert unter Linux OpenGL. Nexuiz läuft recht glatt, ebenso OpenGL beschleunigte Emulatoren.

Booten tut die Kiste erfreulich flott, auch Eclipse ist nicht mehr so träge wie auf älterer Hardware. Als einziges fehlt mir noch RS232 und der Test wie es mit meinen Mikrocontrollerbasteleien aussieht.

Insgesamt lief eigentlich alles out of the box und ohne Klimmzüge.

Mein Fazit: Der ACER AS X1301-3 is voll Linux tauglich und ein selbstgemachter Kernel ist heutzutage für die meisten Ansprüche nicht mehr nötig.

Mein neuer PC ist da….

Zur Lösung meiner PC Misere habe ich am Dienstag einen ACER AS X1301-3 geordert. Die Lieferung war erstaunlich flott und heute Mittag um Halb 1 klingelte DHL und brachte mein neues Prachtstück vorbei.

Da ich keinen neuen dicken Tower haben wollte, habe ich mir etwas ausgefallerenes ausgesucht, ohne den Geldbeutel zu sprengen. Insgesamt verspricht die Kiste bislang, was ich mir erhofft hatte.

Acer AS X1301-3 im PC Tisch
Acer AS X1301-3 im PC Tisch

Geworden ist es also ein ACER AS X1301-3 mit Athlon Dualcore und Nvidia Onboard Grafik. Kleiner Formfaktor, Hardwarespecs wie ich sie haben möchte, ohne einen wassergekühlten Gamer PC zu kaufen. Ein paar Dinge habe ich dann nicht mehr. Platz für weitere Platten oder Laufwerke oder Erweiterungskarten. Aber in meiner alten Kiste war ansich auch nur ein zusätzlicher DVD Brenner und meine alte Win TV drin. Letztere habe ich länger nicht mehr benutzt, das ist also kein Verlust. Die Floppy wird nun im PC bei mir ebenso ausgephast. Für die Ataris habe ich ja Ethernet oder die Satandisk.

ACER AS X1301-3 Frontpanel mit Kartenleser
ACER AS X1301-3 Frontpanel mit Kartenleser

Akut habe ich nur die Grundinstallation laufen, Win 7 und Dualboot mit Ubuntu Linux 10.04 LTS. Aber Linux ist noch nicht groß eingerichtet, es startet und gut. Im Moment sitz ich noch unter Windows ;)

Ich werde mehr berichten, wenn es etwas dazu gibt.

Diagnose: Grafikkarte kaputt – oder schlimmer

Anfang April hatte ich das folgende Phänomen mit meinem Standrechner schonmal. 4 Tage vom Netz trennen und er lief wieder. Vorige Woche Dienstag hatte ich das Proble wieder, am Mittwoch berappelte er sich, bevor ich in den Kurzurlaub fuhr und gestern abend wieder nada.

Der Rechner zeigt beim Booten keinerlei Bild mehr an, kein Grafkkarten BIOS, kein Rechner BIOS, kein Betriebssystem. Die LEDs der Tastatur bleiben dunkel, der Resetbutton reagiert nicht, nur Power an und aus.

Ich habe die Kiste entstaubt, probeweise Karten entfernt, enstaubt und wieder eingebaut, aber kein Erfolg. Eine aktive Kontrolle aller Lüfter ergab, alle in Ordnung, drehen sich, wenn Strom da ist und sind nun auch weitesgehend Staubfrei.

Da der Recher nicht mal mehr ein BIOS anzeigt, muss ein grundlegendes I/O Device fehlen. Ich hoffe derzeit noch es ist die Grafikkarte, denn wenn nicht bleibt eigentlich nur die CPU über, die das System lahmlegt, dadurch dass sie die Grafikkarte nicht mal mehr grundlegend aktiviert. Letzteres würde mich wundern, denn die Wärmeüberwachung hat nicht angeschlagen und letzten Mittwoch von 17:30 bis 18:20 lief noch alles ganz gewöhnlich.

Akut bin ich mir unsicher, was ich tun soll.

USB Mass Storage für Atari – dieses Jahr könnte es noch etwas werden

Netusbee mit USB Stick (Atari Falcon 030)
Netusbee mit USB Stick (Atari Falcon 030)

Das Bild ist kein Fake. Es wird derzeit tatsächlich an einem Treiber gearbeitet, mit dem ein Atari mit Netusbee oder Ethernat Zugriff auf USB Mass Storage Geräte bekommen soll.

Der Treiber ist noch absolut Alpha und offiziell darf ich ihn auch nicht haben. Aber soviel sei gesagt, er erkennt schonmal einen angesteckten USB Stick und richtet einen Laufwerksbuchstaben ein. Man kann auch schon den Inhalt listen, aber irgendwie lesen oder gar schreiben ging noch nicht wirklich.

Man darf gespannt sein, was da noch kommt!

2010 – es könnte noch ein interessantes Jahr für Atari werden :)