Memory mapped I/O made easy with ANSI C

Ich habe hier mal in einem einzigen Demo-C-Source das geballte Knowhow zusammengefasst, wie man für einen Rechner mit Memorymapped I/O (z.B. ARM oder Motorola 68000/ColdFire) korrekt den Zugriff auf ein Hardwareregister via Pointer realisiert:

/*
 * Memory mapped I/O made easy with ANSI C
 * commented by Matthias Arndt <marndt@asmsoftware.de>
 */
#include <stdint.h>
/* temporary valid location for demonstration purposes */
uint8_t storage;
/* Now the magic declaration pointer to a hw register:
 * We point it to some known storage but ofcourse for pointing
 * to a real I/O hardware register, one would supply a constant
 * register address.
 *
 * a) declare it volatile because hardware I/O locations may change inside
 *    a different context (interrupt and/or hardware event)
 * b) make the pointer address const between register name and the type
 *    definition so that noone may modify the pointer
 * c) adding const before the declaration will declare a read/only register
 */
volatile uint8_t * const HWREG = &storage;
/* to point to real I/O you would use the following syntax: */
/* volatile uint8_t * const HWREG = (uint8_t *)0xF000; */
/* just some demo calls */
void task(void);
uint8_t access(void);
void task()
{
	*HWREG = 0x5a; /* set I/O for demo purpose */
	/* access to alter the pointer is forbidden! Uncomment to try! */
	/* HWREG = (uint8_t *) 0xaaaa; */
}
uint8_t access()
{
	return(*HWREG); /* read I/O */
}

Für 8051 oder andere Plattformen, die ähnlich verquerte Speicherbereiche haben, sollten zusätzliche Angaben  verwendet werden, die den Zugriff auf den richtigen Speicherbereich mappen, etwa XRAM beim 8051.

A ‘C’ Test: The 0×10 Best Questions for Would-be Embedded Programmers

A ‘C’ Test: The 0×10 Best Questions for Would-be Embedded Programmers – ich kam über einen Umweg zu diesem Artikel. Darin werden 16 Fragen gestellt, mit denen man einen Möchtegern Embedded C Programmierer (so wie mich auch) piesacken könnte.

Man kann so sicherlich die perfekten Nerds finden und ich gebe zu, ich selbst hätte vermutlich nicht alles 100% gewusst. Aber man sollte nie vergessen, jeder Kandidat sollte auch entsprechend lernwillig sein und vllt gerade so Dinge wie volatile, const und static nach und nach lernen. Beispielsweise im Rahmen von Codereviews.

Knallhart Aspiranten nach solchen Fragen auszusortieren, halte ich für falsch. Aber Potentiale oder auch Fehlerquellen erkennen, warum nicht.

Vermutlich muss sisch jeder selber ein Bild machen.

How to use the inline keyword with SDCC

Problem

For quite awhile I wondered why SDCC (the free Small Devices C Compilerhttp://sdcc.sourceforge.net/) would not compile inline C functions like the following:

volatile uint16_t adc_value;
/* public access function */
inline uint18_t GetADC()
{
return(adc_value);
}

Explanation

The answer is simple, SDCC follows the C standards and by default only ANSI C89 respectively ANSI C89 with SDCC extensions is enabled. But the keyword inline is part of the C99 standard so if C89 is allowed exclusively, the keyword is syntactically not allowed.

Solution

The solution is to enable C99 support with one of the possible command line options for SDCC:

  • –std-c99             Use C99 standard only (incomplete)
  • –std-sdcc99          Use C99 standard with SDCC extensions (incomplete)

Thanks to Jan Waclawek for making me investigate deeper!

Embedded Systems (englischsprachiges Wikibook)

Hier ist ein gutes und freies einführendes Buch bei wikibooks über Embedded Systems.

Das Buch beschreibt allgemeines über Eingebettete Systeme, ihren Entwurf undd as generell Hearngehen. Auch Betriebssysteme und diverse Mikrocontrollerarchitekturen werden darin besprochen.

Für Anfänger und generell Interessierte sicherlich nicht uninteressant, zumal man auf Basis eines solchen Buches auch einen kompletten Kurs gestalten kann.

Link: http://en.wikibooks.org/wiki/Embedded_Systems

Ich habe mir gleich eine PDF Version erzeugt und abgelegt.

Robert Zubrin kommentiert den erfolgreichen Flug der Dragon Kapsel durch die Firma Space X

Robert Zubrin (Gründer der Mars Society)  kommentiert den erfolgreichen Flug der Dragon Kapsel durch die Firma Space X in einem kurzen Artikel.

Start von Dragon durch die Firma Space X am 8.12.2010
Start von Dragon durch die Firma Space X am 8.12.2010

Zentral hebt er dabei die Signalwirkung des Fluges hervor, der ähnlich wie Sputnik 1 im Jahre 1957, nach seiner Ansicht die Betrachtung des Kostenproblems für den Lastentransport ins Weltall umkehrt. Zubrin argumentiert, wenn eine private Firma für 200 Millionen Dollar 10 Tonnen in den Orbit bringen kann, dann sollte man für 2 Milliarden Dollar auch die 120 Tonnen für einen Heavylifter schaffen.

Ich kann seinen Standpunkt jedenfalls nachvollziehen und durchaus bejahen.

Link zum Artikel: http://www.marssociety.org/portal/the-new-sputnik/

STOT #4/4: Mrs Munchie

Seit Samstag spielen wir im ST Offline Tournament das PD-Spiel Mrs Munchie.

Mrs Munchie (Atari ST)
Mrs Munchie (Atari ST)

Es handelt sich dabei zwar nur um einen Pacmanclone. Dieser ist dafür recht gut gemacht, es kann mehr als 4 Geister geben sowie zusätzliches Getier, welches einem das Leben schwer macht. Ein irrer Kreisel, der einen bei Berührung stark verlangsamt ist nur ein Kandidat.

Als interessantes Feature hat man 3 Zaps zur Verfüung. Auf Knopfdruck kann man damit temporär die Geister auf einen Schlag töten und in harmlosen Augen verwandeln, die wieder zurück in die Geisterkiste laufen.

Für PD echt gut! Das Spiel findet sich übrigens auf Serenade PD Disk 18.

SSB's score of 193570 for STOT #4/4
SSB's score of 193570 for STOT #4/4

Mein aktueller Score lautet 193570.

Have you played Atari today?

Weihnachtsbäckerei die 1.

Vorigen Sonntag haben Janina und ich die erste Ladung Plätzchen für Weihnachten gebacken. Von den dort entstandenen “Punschherzen” haben wir bisher aber schon soviele genascht, daß ich irgendwie nicht daran glaube, daß wir zu Weihnachten davon noch welche übrig haben werden.

Punschherzen
Punschherzen

Heute haben wir “Ghana Taler” gebacken, ein Rezept, welches meine Mutter schon so lange wie ich denken dann bäckt. Zwar hat sie im Laufe der Jahre den Spaß daran verloren, aber Janina und mich hat das nicht abgehalten. Ich mag die Ghana Taler sowieso.

Ghana Taler

Das Rezept möchte ich euch natürlich nicht vorenthalten:

Ghana Taler

Teig

  • 250 g Weizenmehl
  • 50 g Kakao
  • 3 g Backpulver (ein gestrichener Tl.)
  • 250 g Zucker
  • 1 Päckchen Vanillezucker
  • 1 gestrichener Tl. gemahlener Zimt
  • 1 Ei (Kl. M)
  • 200 g Butter o. Margarine
  • 200 g gemahlene Mandeln

Zum Bestreichen/ Bestreuen

  • etwas Milch o. Sahne und etwa 100 g Hagelzucker

Zubereitung

Das mit Kakao und Backpulver gemischte Mehl auf die Tischplatte sieben. In die Mitte eine
Vertiefung eindrücken, Zucker, Vanillezucker, Zimt und Ei hinein geben und mit einem Teil
des Mehls zu einem dicken Brei verarbeiten. Darauf die in Stücke geschnittene Butter und
die Mandeln geben, alles mit Mehl bedecken und von der Mitte aus die Zutaten schnell zu
einem glatten Teig verkneten. Sollte er kleben, ihn eine Zeit lang kaltstellen. Den Teig 2-3
mm dick ausrollen, mit einer runden Form (etwa 4 cm) ausstechen und auf ein Backblech
legen. Die Plätzchen mit Milch oder Sahne bestreichen und mit Hagelzucker bestreuen.
Bei 175-200 (vor geheizt) ca. 12 Minuten backen.

Guten Appetit!