このオペレーティングシステムは、クラスの割り当て中に作成されていました。コードは実験的で高度にテストされていませんが、機能するはずです。
OSは非常にシンプルなラウンドロビンスケジューラを使用し、262144クロックサイクルごとにコンテキストスイッチを実行します。この動作は、OCR0AとTimer0の予備選手を設定することにより制御可能です。アプリケーションでTimer0を使用することはできません。スケジューラだけで使用されます。
プロジェクトにosから始まるファイルを配置するだけです。 os_config.hを編集して、ニーズに合わせてください。メインから、 os_init()を呼び出し、 os_task_add(task_func, task_data)でタスクを作成します。スケジューラを起動するには、 os_run()を呼び出します。この呼び出しは返されないため、後続のコードは実行されないことに注意してください。
現在、タスクは終了することはなく、 os_current_task_kill()を使用して終了する必要があることに注意してください。 os_task_addに与えられたvoid-pointerにアクセスするには、 os_current_task_get_data()を呼び出します。
非常に限られたスタックしかないので、再帰またはディープコールスタックを使用しようとしないでください。 Timer0はスケジューラに使用されているため、使用できません。カスタム割り込みサービスルーチンを使用する場合、割り込みが再開されないようにしないでください!
オペレーティングシステムは、 os_config.hの次の定義マクロを使用して、コンパイル時に構成できます。
OS_STACK_SIZE 、 1つのタスクのスタックサイズを制御します。OS_TASK_COUNT 、同時に作成できるタスクの数を制御します。 著作権2020 Stephan Brunner
このソフトウェアと関連するドキュメントファイル(「ソフトウェア」)のコピーを入手する人に、これにより許可が無料で許可されます。
上記の著作権通知とこの許可通知は、ソフトウェアのすべてのコピーまたはかなりの部分に含まれるものとします。
このソフトウェアは、商品性、特定の目的への適合性、および非侵害の保証を含むがこれらに限定されない、明示的または黙示的なものを保証することなく、「現状のまま」提供されます。いかなる場合でも、著者または著作権所有者は、契約、不法行為、またはその他の訴訟、ソフトウェアまたはソフトウェアの使用またはその他の取引に関連する、またはその他の契約、またはその他の請求、またはその他の責任について責任を負いません。