SST-超シンプルな構造解析タスクスケジューラ

SST(スーパーシンプルなタスク)は、紙ローベル区の考えに基づいているタスクの優先度、プリエンプティブ、イベント駆動型、RTC、シングルスタックの超簡単なタスクスケジューラ、に基づいており、ミロSamekは、再プログラミングであるC、でQPはQKの基本的な考え方です。

QKプラスイベントQFイベントプラスモデル駆動型開発ベースQMと結合されたシリアル・デバッグ機能QSpyと結合タスクに登録QEP、保存および分配機能の状態機械方法の処理は、QPとなりました。

2015年には、QPはトップ発明賞[1]「コンピューティングデザインを埋め込まれました」。

1.SST階層

b29d51e7a3a50701b8382071.jpg

2.SST全体構造

7063cdfc1db6ebd2fd037f7d.jpg

  • 送信イベント(イベントが生成されます)

    SST_post(目标任务优先级prio,信号sig,参数para )、タスク対応がPRIOイベントキュー、1キューステータスビットセットに送信するイベント。

  • スケジュール(消費イベント)

    SST_schedule_(void )キューが空の場合、タスクのスケジューリング機能、キュー・ステータス・ビットがクリア。

  • 表1キューの状態はセットです

    SST_readySet_ |= tcb->mask_ イベントキュー、対応する位置に配置されたとき。

  • キューステータステーブルがクリア

    SST_readySet_ &= ~tcb->mask_ なしイベントキューには、対応するビットがクリアされます。

3.SST TCB構造

8bd6dc3336faf96cac4b5f74.jpg

4.イベントの送信SST_post()フローチャートを

641fd8c4bd59a9e438db4940.jpg

5.スケジューリングSST_schedule()フローチャート

329cae640a2250dff6365469

前記ヘッダ関係

ff0bdfb46980065c8ad4b26a

割り込みを終了し、マクロのマクロを入力割り込み、および使用割り込み7。

  • マクロにブレーク
#define SST_ISR_ENTRY(pin_, isrPrio_) do { \
  (pin_) = SST_currPrio_; \      /*1.保存被中断的任务优先级(当前优先级)到pin中*/
  SST_currPrio_ = (isrPrio_); \  /*2.设置ISR的优先级isrPrio为当前优先级*/
  SST_INT_UNLOCK(); \            /*3.开中断*/ } while (0) 
  • 出口マクロ割り込み
#define SST_ISR_EXIT(pin_, EOI_command_) do { \
  SST_INT_LOCK(); \          /*1.关中断*/
  (EOI_command_); \          /*2.结束当前中断*/
  SST_currPrio_ = (pin_); \  /*3.恢复被中断前任务优先级为当前任务*/ SST_schedule_(); \ /*4.调度*/ } while (0) 
  • 割り込みは、マクロの例を使用します
//键盘中断ISR 
static void interrupt kbdISR(){ uint8_t pin; uint8_t key = inport(0x60); //取键值 displayPreemptions(SST_currPrio_, KBD_ISR_PRIO); //测试用,显示被抢占次数 SST_ISR_ENTRY(pin, KBD_ISR_PRIO); /*1.进入中断*/ SST_post(KBD_TASK_PRIO, KBD_SIG, key); /*2.发事件到KbdTask任务*/ SST_ISR_EXIT(pin, outportb(0x20, 0x20)); /*3.退出中断* } 

結論

ローベル区の論文は、謙虚な種子を例えるならば、SSTのミロSamekは小さな苗木である、とQPのミロSamekがそびえ立つ木に成長し、木はQP取得、2015年に、十年のために成長しています「組み込みコンピューティング設計」賞トップ発明[1]。

参考:
[1] QPは、「組込みコンピューティング・デザイン」された2015年トップ発明賞

おすすめ

転載: www.cnblogs.com/water-sea/p/12059525.html