An seinem einfachsten ein Thread benötigen:
- Einige Speicher für Stapelspeicher
- Irgendwo seinen Kontext zu speichern
(dh Registerinhalte, Programmzähler, Stapelzeiger, usw.).
Darüber hinaus müssen Sie einen einfachen "Kernel" implementieren, der für die Thread-Umschaltung verantwortlich sein wird. Und wenn Sie vorbeugende Threads implementieren möchten, benötigen Sie auch eine periodische Quelle von Interrupts. z.B. ein Timer. In diesem Fall können Sie Ihren Thread-Switching-Code im Timer-Interrupt ausführen.
Schauen Sie sich die Routinen setjmp()/longjmp() und die entsprechende Struktur jmp_buf an. Dadurch erhalten Sie einfachen Zugriff auf den Stapelzeiger, so dass Sie Ihren eigenen Stapelspeicherplatz zuweisen können, und Sie erhalten eine einfache Möglichkeit, alle Registerinhalte zu erfassen, um den Kontext Ihres Threads bereitzustellen.
In der Regel ist die longjmp() -Funktion ein Wrapper für eine Rückkehr von Interrupt-Anweisung, die sehr gut mit Thread-Scheduling-Funktionalität in der Timer-Interrupt passt. Sie müssen jedoch die Implementierung von longjmp() und jmp_buf für Ihre Plattform überprüfen.
Suchen Sie nach Thread-Implementierungen auf kleineren Mikroprozessoren, die in der Regel keine Betriebssysteme haben. z.B. Atmel AVR oder Microchip PIC. Zum Beispiel: discussion on AVRFreaks
Welche Plattform/Betriebssystem? –
Sie benötigen mehr als die C-Standardbibliothek, da Sie in der Lage sein müssen, mit Hardware-Interrupts usw. zu interagieren. –
Ich habe diese Fähigkeit mit Xilinx PowerPC 440 API – socksocket