Lazuliは、AVRマイクロコントローラーをターゲットにした、先制的なマルチタスクRTO(リアルタイムオペレーティングシステム/カーネル)です。 AVRマイクロコントローラーのリアルタイムコンテキストで複数の独立したタスクをプログラムおよび実行できます。基本的な構成では、Lazuli RTOSのメモリフットプリントが低い(ROMの4キロバイト未満、静的RAMの<200バイト)。 Lazuli RTOを使用して、最小限のハードウェアで、強力なリアルタイム制約または需要マルチタスクを備えた組み込みアプリケーションまたはファームウェアを開発できます。
AVR MCUは、組み込みの産業用デバイスおよびアプリケーションで広く使用されており、Arduinoボードでも使用されていることが知られています。 Lazuli RTOSの上に書かれたアプリケーションは、産業システムと愛好家の創造物に合わせています。
Lazuli RTOは、ソースコード形式で配布され、独自の最終実行可能ファイルと静的にリンクされます。これにより、カーネルを静的に構成し、コンパイラの最適化の恩恵を受けることができます。
このプロジェクトは、https://github.com/randruc/lazuliのGithubでホストされています
今のところ、Lazuliカーネルは次の機能を提供します。
SCHED_RR )printf()実装を含むAVR USARTドライバーLazuliプロジェクトには、それをユニークにする非常に具体的な目標があります。これらは:
Lazuli RTOは現在、Atmega328p MCU(Arduinoで使用されています)で実行されていますが、他のAVRプラットフォームに簡単に移植できるはずです。
Lazuliはコードの品質と安定性の高いレベルに達する傾向がありますが、これらの特定の用途で認定されていないため、安全性が批判的なシステムに適していません。安全性批判システムの詳細については、https://en.wikipedia.org/wiki/safety-critical_systemをお読みください
プロジェクトのドキュメントは、https://lazuli.readthedocs.io/en/latest/でお読みください。
APIドキュメントはhttps://randruc.github.io/lazuli/doxygen/latest/でお読みください。
プロジェクトの文書化には、2つの異なるツールが使用されます。
sphinx 、crompructuredTextで記述されたファイルからユーザードキュメントを生成します。ソースはドキュメント/ディレクトリにあります。doxygen 。 Lazuli RTOを使用する例プログラムは、ディレクトリのExampleプログラム/にあります。
クラシックな点滅LEDが表示されます。組み込みシステムのHello World 。 Lazuli APIの紹介として機能するために大いにコメントされています。
#include <stdint.h>
#include <Lazuli/lazuli.h>
#include <Lazuli/sys/arch/AVR/registers.h>
/*
* This is the Blink task. It simply blinks the built-in LED on Arduino
* platforms.
* This task is scheduled in real-time. It is configured to blink with an exact
* period of 1 second.
*/
void
Blink ()
{
/* On the Arduino, this pin corresponds to the built-in LED */
const uint8_t ledPin = 0x20 ;
DDRB |= ledPin ; /* Set the pin to be an output pin */
PORTB &= ~ ledPin ; /* The initial state of the pin will be 0 */
/* Now this is the main loop of this task */
for (;;) {
/* Wait for the next real-time activation of the task */
Lz_Task_WaitActivation ();
PINB |= ledPin ; /* Toggle the pin */
}
}
void
main ( void )
{
/* Allocate a configuration object on the stack */
Lz_TaskConfiguration configuration ;
/* Initialize the configuration object with default values */
Lz_TaskConfiguration_Init ( & configuration );
/* Configure the Blink task to be cyclic real-time (RMS scheduling) */
configuration . schedulingPolicy = CYCLIC_RT ;
/* The Blink task has a period of 25 time slices. */
/* Our platform has a 16 MHz clock, and the system clock resolution */
/* frequency is configured to 50 Hz. This is an arbitrary value that */
/* can be configured by the user. */
/* With a system clock resolution frequency set to 50 Hz, the system */
/* clock period is then 1 / 50 = 0.02 second. */
/* So 0.02 * 25 = 0.5 second, which corresponds to the half period */
/* of our task. */
configuration . period = 25 ;
/* The Blink task has a completion of 10 time slices (arbitrary here */
/* because our task does almost nothing). */
configuration . completion = 10 ;
/* Register the Blink task to run with the parameters above */
Lz_RegisterTask ( Blink , & configuration );
/* Run the system */
Lz_Run ();
}Lazuliは、他の既存のコードに依存していません。単に独自のコードを作成し、システムを構築し、ターゲットMCUにアップロードするだけで実行できます。
Lazuliで開発するには、Lazuli Docker画像を使用することを強くお勧めします。必要なすべてのツールを備えた完全な開発環境の恩恵を受けることができます。
Lazuli RTOSには、Dockerイメージとして提供される完全でコンテナ化された開発環境が付属しています。この画像には、Lazuli RTOを使用して独自のプロジェクトを構築するために必要なすべてのツールが含まれています。コンパイラとリンカー、ビルドツール、バイナリユーティリティ、マンページなどが含まれます。
公式のLazuli Dockerの画像は、https://hub.docker.com/r/randruc/lazuliから引き出すことができます
公式ドキュメントで開発環境を設定する方法の詳細:https://lazuli.readthedocs.io/en/latest/set_up_environment.html
Lazuli開発環境コンテナの開始
Lazuli開発環境コンテナの男ページ
Lazuliカーネルは完全に構成可能です。ビルドシステムはcmakeに依存しています。 ccmakeの助けを借りて、コンソールで構成をインタラクティブに実行することもできます。
詳細については、公式ドキュメントをご覧ください:https://lazuli.readthedocs.io/en/latest/developing_your_project.html
ccmakeを使用した構成
cmakeを使用して構築します
AVR MCUSでは、 avrdude使用して最終的なバイナリをターゲットマシンにアップロードできます。スクリプトスクリプト/avr/upload.shを使用できます。 HEXファイルをパラメーターとして使用します。
シリアルラインとの相互作用は、GNU screenの助けを借りて実行できます。スクリプトスクリプト/serial.shを使用して、USBシリアルラインと対話できます。
プロジェクトのIssuesタブ(https://github.com/randruc/lazuli/issues)を使用して、トラブルシューティングを報告するか、提案をする必要があります。
貢献は大歓迎です!
このプロジェクトはGithub(https://github.com/randruc/lazuli)でホストされており、Githubはすべてを管理するために使用されます。プル要求、問題などを管理します。
公式ドキュメントで紹介する方法の詳細:https://lazuli.readthedocs.io/en/latest/kernel/contributing.html
また、プロジェクトのIssuesタブを使用して質問をしたり、コーディングせずに機能を提案したり、希望するものを提案したりすることもできます。
すべてのプロジェクトは、GNU General Public License v3.0のみで配布されています。このライセンスの完全なコピーは、ファイルライセンス/gpl-3.0-only.txtで入手できます。