2017-01-07 15 views
0

ハードウェアスタックへのアクセスを備えた拡張MCUを使用して、XC8でスケジューラ/ RTOSプロジェクトを作成することに興味があります。XC8でのスケジューラ/ RTOSの作成

私はソフトウェアスタックの作成を制御する方法を理解しようとしているので、各タスクのソフトウェアスタックは汎用RAMに特定の範囲を取得します。

概念的には、これはASMでプログラムするのは簡単ですが、Cプログラムを記述し、各タスクのソフトウェアスタックを正しいアドレス空間に配置したいと考えています。

コードの特定のセクションに別のソフトウェアスタックを作成するオプションや、複数のソフトウェアスタックを作成するオプションはありません - どのようにすればいいですか?

おかげ

+0

8ビットのPICでは、約8KのROMで、多くのRAMではありません。各スタックにどれくらいのスペースが必要ですか – cup

+0

サブ250バイト。これにより、およそ4つのタスク実行する。また、このデバイスには、すべてのバンク切り替えに使用できる線形RAMアクセスがあります。 – FourierFlux

答えて

0

スタックの切り替えはTEHスケジューラ、ないTEHコンパイラの責任である - ので、あなたはそのためコンパイラオプションを見つけることができません。実際にスケジューラーが行うことの大部分は、書き込みを予定しているスケジューラーに実装する必要があります。

RTOSでは、切り替えコンテキストには、実行のスレッドに関連するすべてのレジスタを格納し、それらのレジスタを別のスレッドのものに置き換えることが含まれます。これには、スタックポインタの置き換えが含まれます。つまり、スレッド間でスタックを切り替える方法です。プログラムカウンタレジスタがロードされて、新しいスレッドの最後の実行ポイントにジャンプするとき(スタックポインタを復元することを含むすべてのレジスタが復元されたとき)、コンテキストスイッチが完了する。

コンテキストスイッチ自体は、大量のアセンブラコードが残っていますが、その多くはC言語で記述されている可能性があり、タスクそのものはC言語で書かれています。単純なRTOSスケジューラについては、Jean LabrosseのμC/ OS-II-freely available in PDF μC/ OS-IIのPIC18ポートにはhereがダウンロードされています。

+0

ありがとうございます、はい私は理解しています。私はソフトウェアスタックがXC8を使ってどこにあるのかを制御することに問題がありました。そして、それは適切な変数を使用していました(すべてが別々のスタックの詩に "コンパイルされたスタック"と呼ばれるものを使用します)。コンパイラが使用するレジスタを登録するか、またはRAMの特定の領域から命令することが可能かどうかをASMで確認することができますが、XC8のユーザーガイドではコンパイラの実装に関する詳細がわかりません。 – FourierFlux

+0

to:https://www.micrium.com/books/ucosii/(あなたのリンクは自分のホームフォルダにリンクしています) –

+0

@JonathanV:ありがとう、リンクを修正しました。 – Clifford

関連する問題