Kaninchen-Halbleiter - Rabbit Semiconductor

Rabbit Semiconductor Inc.
Industrie Mikrocontroller
Gegründet 1983
Hauptquartier ,
Inhaber Digi International
Webseite www .digi .com / lp / rabbit

Rabbit Semiconductor ist ein amerikanisches Unternehmen, das die Rabbit- Familie von Mikrocontrollern und Mikrocontrollermodulen entwickelt und vertreibt . Für die Entwicklung bietet es Dynamic C , einen nicht standardmäßigen C -Dialekt mit proprietären Strukturen für Multitasking.

Rabbit Semiconductor wurde 2006 von Digi International gekauft . Vor dem Kauf war Rabbit Semiconductor ein Geschäftsbereich von Z-World, Inc. Z-World entwickelte und fertigte Embedded-Controller-Produkte sowie Embedded-Software-Entwicklungsumgebungen.

Mikrocontroller-Architektur

Die Rabbit-Prozessorfamilie teilt viele Funktionen mit den Zilog Z80 / Z180- Prozessoren. Beispielsweise sind die Register eines Rabbit 2000 /3000-Prozessors fast dieselben wie die Register eines Z80 / Z180-Prozessors. Der Rabbit 4000-Prozessor wird um die Verwendung von 32-Bit-Registern erweitert. Der Befehlssatz von Rabbit-Prozessoren ähnelt auch stark dem Befehlssatz der Z80 / Z180-Familie. Während die Opcodes vieler Anweisungen zwischen den Rabbit 2000/3000-Prozessoren und den Z80 / Z180-Prozessoren gleich sind, sind die beiden Prozessorfamilien nicht binär kompatibel. Wie bei der Z80 / Z180-Familie sind die Rabbit-Prozessoren CISC- Prozessoren.

Die Rabbit-Prozessorfamilie verfügt über einzigartige Funktionen. Beispielsweise deaktiviert die Z80 / Z180-Familie Interrupts, sobald ein Interrupt von einer Interrupt-Serviceroutine bedient wird. Die Rabbit-Prozessoren erlauben jedoch Interrupts, Serviceroutinen gemäß Prioritäten zu unterbrechen (insgesamt 4).

Rabbit Semiconductor behauptet, dass der Befehlssatz von Rabbit-Prozessoren für C-Code optimiert ist.

Dynamisch C.

Das vielleicht bemerkenswerteste Merkmal des Rabbit-Mikrocontrollers ist seine Entwicklungsumgebung. Dynamic C, ein Produkt von Rabbit Semiconductor, weist im Vergleich zum ANSI-C-Standard Ergänzungen, Löschungen und Inkonsistenzen auf.

Hinweis
(Referenz: Portieren eines Programms auf Dynamic C-Rabbit Semiconductor)

Dynamic C folgt dem ISO / ANSI C-Standard, wenn dies machbar und wünschenswert ist. Da der Standard die besonderen Anforderungen eingebetteter Systeme nicht berücksichtigt, ist es erforderlich, in einigen Bereichen vom Standard abzuweichen und in anderen wünschenswert zu sein. Der Standard berücksichtigt keine wichtigen Probleme mit eingebetteten Systemen wie Nur-Lese-Speicher und eingebettete Assemblersprache. Aus diesem Grund entsprechen praktische Compiler für eingebettete Systeme nicht vollständig dem Standard, sondern verwenden ihn als Leitfaden.

Als Beispiel für eine Addition verfügt Dynamic C über einen Verkettungsmechanismus , um Codefragmente aus verschiedenen Unterroutinen mit einer beliebigen Anzahl von Ketten zu verketten . Diese Erweiterung ermöglicht die Verwendung nicht nur initialisierter Variablen, sondern auch von beliebigem Code, der ausgeführt werden kann, bevor ein Programm mit der Ausführung in der Hauptfunktion beginnt.

Als Beispiel für eine Löschung unterstützt Dynamic C ab Version 10.23 keine Blockbereichsvariablen oder Bitfelder . Die Entwicklungs-Toolchain enthält keinen separaten Präprozessor und Linker, was das Portieren vorhandener Programme auf den Compiler erschweren kann. Ab Version 10.64 wird der Blockbereich für Variablen unterstützt.

Als Beispiel für eine Inkonsistenz behandelt Dynamic C implizit alle initialisierten globalen Variablen so, als ob sie mit dem const Qualifizierer deklariert worden wären . Darüber hinaus befinden sich alle const Variablen im Flash-Speicher. Frühere Versionen von Dynamic C haben die Verwendung des const Schlüsselworts in Parametern nicht überprüft. Es war möglich, eine const Variable als Parameter an eine Funktion zu übergeben, die dies nicht erwartet hatte, was möglicherweise zu Versuchen führte, in den Flash-Speicher zu schreiben. Ab der neuesten Version von Dynamic C erzeugt der Compiler einen Fehler, wenn der Benutzer versucht, eine const Variable direkt zu ändern , und eine Warnung, wenn der Benutzer das const Qualifikationsmerkmal verwirft, wenn er einen Parameter an eine Funktion übergibt.

Multitasking-Konstrukte

Ein bemerkenswertes Merkmal von Dynamic C ist die Einbeziehung von Sprachkonstrukten zur Vereinfachung des Multitasking. Diese Konstrukte, die costate Anweisung und die slice Anweisung, implementieren eine Form von kooperativem bzw. präventivem Multitasking. Betrachten Sie als Beispiel das folgende Programm, bei dem zwei LEDs mit unterschiedlichen Frequenzen blinken:

void main()
{
    while (1)
    {
        // Create 2 costatements which will toggle our LEDs.
        costate
        {
            led1on();
            waitfor(DelayMs(100));
            led1off();
            waitfor(DelayMs(50));
        }
        costate
        {
            led2on();
            waitfor(DelayMs(200));
            led2off();
            waitfor(DelayMs(50));
        }
    }
}

Wenn dieser Code ausgeführt wird, wird die erste Kalkulation ausgeführt und die erste LED leuchtet auf. Die Kalkulation ergibt dann die zweite Anweisung, während sie 100 Millisekunden wartet. Die zweite Kalkulation wird auf ähnliche Weise ausgeführt. Während beide Kosten warten, bis ihre Zeit abgelaufen ist, wartet die while-Schleife beschäftigt , aber diese Wartezeit kann möglicherweise zur Ausführung anderer Aufgaben verwendet werden. Weitere Informationen finden Sie im Dynamic C-Benutzerhandbuch .

Siehe auch

Verweise

Externe Links