IP Force 特許公報掲載プロジェクト 2022.1.31 β版

知財求人 - 知財ポータルサイト「IP Force」

▶ セガー,ロルフの特許一覧

特表2024-539043CPUサイクルタイムベースを用いたリアルタイムオペレーティングシステム
<>
  • 特表-CPUサイクルタイムベースを用いたリアルタイムオペレーティングシステム 図1
  • 特表-CPUサイクルタイムベースを用いたリアルタイムオペレーティングシステム 図2
  • 特表-CPUサイクルタイムベースを用いたリアルタイムオペレーティングシステム 図3
< >
(19)【発行国】日本国特許庁(JP)
(12)【公報種別】公表特許公報(A)
(11)【公表番号】
(43)【公表日】2024-10-28
(54)【発明の名称】CPUサイクルタイムベースを用いたリアルタイムオペレーティングシステム
(51)【国際特許分類】
   G06F 9/48 20060101AFI20241018BHJP
【FI】
G06F9/48 150Z
【審査請求】有
【予備審査請求】未請求
(21)【出願番号】P 2024522676
(86)(22)【出願日】2022-08-16
(85)【翻訳文提出日】2024-06-07
(86)【国際出願番号】 US2022040500
(87)【国際公開番号】W WO2023069180
(87)【国際公開日】2023-04-27
(31)【優先権主張番号】63/271,037
(32)【優先日】2021-10-22
(33)【優先権主張国・地域又は機関】US
(31)【優先権主張番号】17/887,252
(32)【優先日】2022-08-12
(33)【優先権主張国・地域又は機関】US
(81)【指定国・地域】
(71)【出願人】
【識別番号】524141751
【氏名又は名称】セガー,ロルフ
(74)【代理人】
【識別番号】110003694
【氏名又は名称】弁理士法人有我国際特許事務所
(72)【発明者】
【氏名】セガー,ロルフ
(57)【要約】
チックベースのスケジューリングではなく、サイクルベースのスケジューリングを使用する改良型リアルタイムオペレーティングシステム(RTOS)設計について本明細書で説明する。従来のチックベースのスケジューリングに対してサイクルベースのスケジューリングを使用することにより、組み込みシステムに技術的な利点が提供される。例えば、サイクルベースのスケジューリングは、スケジューリングの分解能を向上させることにより、組み込みシステムの基本単位時間を変更することができる。典型的なRTOS実装で使用されるシステムチック(例えば、1ミリ秒ごとに発生するチック)に依存する代わりに、本明細書で説明する改良型RTOS設計は、一部または全ての操作にCPUサイクルを内部的に使用する。典型的なRTOS実装では単位システムチックで指定されていたタスク遅延、タイムアウト、および/またはソフトウェアタイマのような操作は、現在、CPUサイクルで指定され得る。
【特許請求の範囲】
【請求項1】
オペレーティングシステムを格納するよう構成されたメモリデバイスと、;
前記メモリデバイスと通信するハードウェアプロセッサであって、前記ハードウェアプロセッサによって実行されると、前記ハードウェアプロセッサに:
第1のハードウェアタイマに、前記ハードウェアプロセッサのサイクル毎にサイクルカウント値を増加させる;
前記ハードウェアプロセッサ上で実行されているタスクが、時間枠を指定するアプリケーションプログラミングインターフェース(API)関数を呼び出したことを判定させる;
呼び出される前記API関数に応答して、第2のハードウェアタイマを設定して、前記ハードウェアプロセッサのサイクル毎にカウント値を変更させる;
前記第2のハードウェアタイマが満了したと判定させる;
前記第2のハードウェアタイマに割り込みを生成させる;
前記サイクルカウント値の現在のバージョンを使用して、前記API関数によって指定された時間枠が経過したことを判定させる;
前記タスクを起動させる、
コンピュータ実行可能命令で構成されるハードウェアプロセッサ、を含むコンピューティングデバイス。
【請求項2】
前記コンピュータ実行可能命令は、実行されると、さらに、前記ハードウェアプロセッサに、前記カウント値がゼロまたは前記時間枠に対応する値のいずれかに達したことを判定させる、請求項1に記載のコンピューティングデバイス。
【請求項3】
前記時間枠は、前記ハードウェアプロセッサのサイクル数、単位時間、または単位システムチックのうちの1つを含む、請求項1に記載のコンピューティングデバイス。
【請求項4】
前記コンピュータ実行可能命令は、実行されると、さらに、前記ハードウェアプロセッサに、前記ハードウェアプロセッサのサイクル毎に前記カウント値を増加するように前記第2のハードウェアタイマを設定させる、請求項1に記載のコンピューティングデバイス。
【請求項5】
前記コンピュータ実行可能命令は、実行されると、さらに、前記ハードウェアプロセッサに、前記ハードウェアプロセッサのサイクル毎に前記カウント値を減少するように前記第2のハードウェアタイマを設定させる、請求項1に記載のコンピューティングデバイス。
【請求項6】
前記オペレーティングシステムは、リアルタイムオペレーティングシステムを含む、請求項1に記載のコンピューティングデバイス。
【請求項7】
前記コンピューティングデバイスは、組み込みシステムを含む、請求項1に記載のコンピューティングデバイス。
【請求項8】
前記オペレーティングシステムは、拡張APIと互換性があり、前記拡張APIは、第1の関数、第2の関数、または第3の関数のうちの少なくとも1つを含み、前記第1の関数は、呼び出されると、単位チックが指定され、第1のパラメータに対応する前記ハードウェアプロセッサの第1のサイクル数が経過した後に割り込みをトリガするように前記オペレーティングシステムをスケジュールするように指示する前記第1のパラメータを前記オペレーティングシステムに渡し、前記第2の関数は、呼び出されると、前記ハードウェアプロセッサの第2のサイクル数が指定され、前記ハードウェアプロセッサの前記第2のサイクル数が経過した後に割り込みをトリガするように前記オペレーティングシステムをスケジュールするように指示する第2のパラメータを前記オペレーティングシステムに渡し、前記第3の関数は、呼び出されると、単位時間が指定され、第3のパラメータに対応する前記ハードウェアプロセッサの第3のサイクル数が経過した後に割り込みをトリガするように前記オペレーティングシステムにスケジュールするように指示する、前記第3のパラメータを前記オペレーティングシステムに渡す、請求項1に記載のコンピューティングデバイス。
【請求項9】
前記単位時間は、ミリ秒、マイクロ秒、またはナノ秒のうちの1つを含む、請求項8に記載のコンピューティングデバイス。
【請求項10】
前記第1のハードウェアタイマは、長期時間測定に使用され、前記第2のハードウェアタイマは、ワンショットタイマである、請求項1に記載のコンピューティングデバイス。
【請求項11】
コンピュータ実装方法であって、:
第1のハードウェアタイマに、ハードウェアプロセッサのサイクル毎にサイクルカウント値を増加させるステップと;
前記ハードウェアプロセッサ上で実行されているタスクが、時間枠を指定するアプリケーションプログラミングインターフェース(API)関数を呼び出したことを判定するステップと;
呼び出される前記API関数に応答して、第2のハードウェアタイマを設定して、前記ハードウェアプロセッサのサイクル毎にカウント値を変更するステップと;
前記第2のハードウェアタイマが満了したと判定するステップと;
前記第2のハードウェアタイマに割り込みを生成させるステップと;
前記サイクルカウント値の現在のバージョンを使用して、前記API関数によって指定された時間枠が経過したことを判定するステップと;
前記タスクを起動するステップと、を含み、
前記ハードウェアプロセッサによって実行されるオペレーティングシステムによって実行されるコンピュータ実装方法。
【請求項12】
前記第2のハードウェアタイマが満了したと判定するステップは、前記カウント値がゼロまたは前記時間枠に対応する値のいずれかに達したと判定するステップをさらに含む、請求項11に記載のコンピュータ実装方法。
【請求項13】
前記時間枠は、前記ハードウェアプロセッサのサイクル数、単位時間、または単位システムチックのうちの1つを含む、請求項11に記載のコンピュータ実装方法。
【請求項14】
前記第2のハードウェアタイマを設定するステップは、さらに、前記ハードウェアプロセッサのサイクル毎に前記カウント値を増加するように前記第2のハードウェアタイマを設定するステップを含む、請求項11に記載のコンピュータ実装方法。
【請求項15】
前記第2のハードウェアタイマを設定するステップは、さらに、前記ハードウェアプロセッサのサイクル毎に前記カウント値を減少するように前記第2のハードウェアタイマを設定するステップを含む、請求項11に記載のコンピュータ実装方法。
【請求項16】
前記オペレーティングシステムは、リアルタイムオペレーティングシステムを含む、請求項11に記載のコンピュータ実装方法。
【請求項17】
組み込みシステムは、ハードウェアプロセッサを含む、請求項11に記載のコンピュータ実装方法。
【請求項18】
前記オペレーティングシステムは、拡張APIと互換性があり、前記拡張APIは、第1の関数、第2の関数、または第3の関数のうちの少なくとも1つを含み、前記第1の関数は、呼び出されると、単位チックが指定され、第1のパラメータに対応する前記ハードウェアプロセッサの第1のサイクル数が経過した後に割り込みをトリガするように前記オペレーティングシステムをスケジュールするように指示する前記第1のパラメータを前記オペレーティングシステムに渡し、前記第2の関数は、呼び出されると、前記ハードウェアプロセッサの第2のサイクル数が指定され、前記ハードウェアプロセッサの前記第2のサイクル数が経過した後に割り込みをトリガするように前記オペレーティングシステムをスケジュールするように指示する第2のパラメータを前記オペレーティングシステムに渡し、前記第3の関数は、呼び出されると、単位時間が指定され、第3のパラメータに対応する前記ハードウェアプロセッサの第3のサイクル数が経過した後に割り込みをトリガするように前記オペレーティングシステムにスケジュールするように指示する、前記第3のパラメータを前記オペレーティングシステムに渡す、請求項11に記載のコンピュータ実装方法。
【請求項19】
前記単位時間は、ミリ秒、マイクロ秒、またはナノ秒のうちの1つを含む、請求項18に記載のコンピュータ実装方法。
【請求項20】
前記第1のハードウェアタイマが長期時間測定に使用され、前記第2のハードウェアタイマは、ワンショットタイマである、請求項11に記載のコンピュータ実装方法。

【発明の詳細な説明】
【技術分野】
【0001】
関連出願の相互参照
本出願は、「REAL―TIME OPERATING SYSTEM WITH A CPU CYCLE TIME BASE」と題する2021年10月22日出願の米国仮出願第63/271037号の利益を主張するものであり、その開示内容は、その全体が参照により本明細書に組み込まれる。
【0002】
著作権表示
本特許文書の開示の一部には、著作権保護の対象となる内容が含まれている。 著作権者は、特許商標庁の特許ファイルまたは特許記録に記載されているように、本特許文書または本特許開示のファクシミリ複製に対して何ら異議を唱えないが、それ以外の場合全ての著作権を留保する。
【背景技術】
【0003】
組み込みコンピューティングシステム(または組み込みシステム)は、1つまたは複数のプロセッサまたは中央演算処理装置(CPU)によって制御される電気システムの他、メモリや入出力(I/O)ユニットを含むことがある。組み込みシステムの例は、電子レンジ、食器洗い機、オーブン、冷蔵庫などの家庭用 (白物家電) 機器、コードレス電話、携帯電話、電話基地局などの通信システム、アンチロックブレーキシステムやエンジン制御システムなどの自動車システム、ポータブルオーディオプレーヤ、ムービープレーヤ、ポータブルゲームデバイスなどのエンターテインメントシステム、産業用制御装置を含む産業用システム、計測デバイス、医療デバイスなどを含んでもよい。
【0004】
これらの組み込みデバイスのソフトウェアやファームウェアは、非常に複雑であり得る。例えば、これらの組み込みデバイスは、マイクロコントローラの単一の中央演算処理ユニット(CPU)コア上で複数のタスクの実行を可能にするリアルタイムオペレーティングシステム(RTOS)を実行してもよい。
【発明の概要】
【0005】
本開示の一態様は、オペレーティングシステムを格納するよう構成されたメモリデバイスを含むコンピューティングデバイスを提供する。コンピューティングデバイスは、さらに、前記メモリデバイスと通信するハードウェアプロセッサであって、前記ハードウェアプロセッサによって実行されると、前記ハードウェアプロセッサに:第1のハードウェアタイマに、前記ハードウェアプロセッサのサイクル毎にサイクルカウント値を増加させる;前記ハードウェアプロセッサ上で実行されているタスクが、時間枠を指定するアプリケーションプログラミングインターフェース(API)関数を呼び出したことを判定させる;呼び出される前記API関数に応答して、第2のハードウェアタイマを設定して、前記ハードウェアプロセッサのサイクル毎にカウント値を変更させる;前記第2のハードウェアタイマが満了したと判定させる;前記第2のハードウェアタイマに割り込みを生成させる;前記サイクルカウント値の現在のバージョンを使用して、前記API関数によって指定された時間枠が経過したことを判定させる;前記タスクを起動させる、コンピュータ実行可能命令で構成されるハードウェアプロセッサ、を含む。
【0006】
前の段落のコンピューティングデバイスは、以下の特徴の任意のサブコンビネーションを含むことができる:前記コンピュータ実行可能命令は、実行されると、さらに、前記ハードウェアプロセッサに、前記カウント値がゼロまたは前記時間枠に対応する値のいずれかに達したことを判定させる;前記時間枠は、前記ハードウェアプロセッサのサイクル数、単位時間、または単位システムチックのうちの1つを含む;前記コンピュータ実行可能命令は、実行されると、さらに、前記ハードウェアプロセッサに、前記ハードウェアプロセッサのサイクル毎に前記カウント値を増加するように前記第2のハードウェアタイマを設定させる;前記コンピュータ実行可能命令は、実行されると、さらに、前記ハードウェアプロセッサに、前記ハードウェアプロセッサのサイクル毎に前記カウント値を減少するように前記第2のハードウェアタイマを設定させる;前記オペレーティングシステムは、リアルタイムオペレーティングシステムを含む;前記コンピューティングデバイスは、組み込みシステムを含む;前記オペレーティングシステムは、拡張APIと互換性があり、前記拡張APIは、第1の関数、第2の関数、または第3の関数のうちの少なくとも1つを含み、前記第1の関数は、呼び出されると、単位チックが指定され、第1のパラメータに対応する前記ハードウェアプロセッサの第1のサイクル数が経過した後に割り込みをトリガするように前記オペレーティングシステムをスケジュールするように指示する前記第1のパラメータを前記オペレーティングシステムに渡し、前記第2の関数は、呼び出されると、前記ハードウェアプロセッサの第2のサイクル数が指定され、前記ハードウェアプロセッサの前記第2のサイクル数が経過した後に割り込みをトリガするように前記オペレーティングシステムをスケジュールするように指示する第2のパラメータを前記オペレーティングシステムに渡し、前記第3の関数は、呼び出されると、単位時間が指定され、第3のパラメータに対応する前記ハードウェアプロセッサの第3のサイクル数が経過した後に割り込みをトリガするように前記オペレーティングシステムにスケジュールするように指示する、前記第3のパラメータを前記オペレーティングシステムに渡す;前記単位時間は、ミリ秒、マイクロ秒、またはナノ秒のうちの1つを含む;及び、前記第1のハードウェアタイマは、長期時間測定に使用され、前記第2のハードウェアタイマは、ワンショットタイマである。
【0007】
本開示の別の態様は、コンピュータ実装方法であって、:第1のハードウェアタイマに、ハードウェアプロセッサのサイクル毎にサイクルカウント値を増加させるステップと;前記ハードウェアプロセッサ上で実行されているタスクが、時間枠を指定するアプリケーションプログラミングインターフェース(API)関数を呼び出したことを判定するステップと;呼び出される前記API関数に応答して、第2のハードウェアタイマを設定して、前記ハードウェアプロセッサのサイクル毎にカウント値を変更するステップと;前記第2のハードウェアタイマが満了したと判定するステップと;前記第2のハードウェアタイマに割り込みを生成させるステップと;前記サイクルカウント値の現在のバージョンを使用して、前記API関数によって指定された時間枠が経過したことを判定するステップと;前記タスクを起動するステップと、を含み、前記ハードウェアプロセッサによって実行されるオペレーティングシステムによって実行されるコンピュータ実装方法を提供する。
【0008】
前の段落のコンピュータ実装方法は、以下の特徴の任意のサブコンビネーションを含むことができる:前記第2のハードウェアタイマが満了したと判定するステップは、前記カウント値がゼロまたは前記時間枠に対応する値のいずれかに達したと判定するステップをさらに含む;前記時間枠は、前記ハードウェアプロセッサのサイクル数、単位時間、または単位システムチックのうちの1つを含む;前記第2のハードウェアタイマを設定するステップは、さらに、前記ハードウェアプロセッサのサイクル毎に前記カウント値を増加するように前記第2のハードウェアタイマを設定するステップを含む;前記第2のハードウェアタイマを設定するステップは、さらに、前記ハードウェアプロセッサのサイクル毎に前記カウント値を減少するように前記第2のハードウェアタイマを設定するステップを含む;前記オペレーティングシステムは、リアルタイムオペレーティングシステムを含む;組み込みシステムは、ハードウェアプロセッサを含む;前記オペレーティングシステムは、拡張APIと互換性があり、前記拡張APIは、第1の関数、第2の関数、または第3の関数のうちの少なくとも1つを含み、前記第1の関数は、呼び出されると、単位チックが指定され、第1のパラメータに対応する前記ハードウェアプロセッサの第1のサイクル数が経過した後に割り込みをトリガするように前記オペレーティングシステムをスケジュールするように指示する前記第1のパラメータを前記オペレーティングシステムに渡し、前記第2の関数は、呼び出されると、前記ハードウェアプロセッサの第2のサイクル数が指定され、前記ハードウェアプロセッサの前記第2のサイクル数が経過した後に割り込みをトリガするように前記オペレーティングシステムをスケジュールするように指示する第2のパラメータを前記オペレーティングシステムに渡し、前記第3の関数は、呼び出されると、単位時間が指定され、第3のパラメータに対応する前記ハードウェアプロセッサの第3のサイクル数が経過した後に割り込みをトリガするように前記オペレーティングシステムにスケジュールするように指示する、前記第3のパラメータを前記オペレーティングシステムに渡す;前記単位時間は、ミリ秒、マイクロ秒、またはナノ秒のうちの1つを含む;及び、前記第1のハードウェアタイマが長期時間測定に使用され、前記第2のハードウェアタイマは、ワンショットタイマである。
【0009】
本開示を要約する目的で、いくつかの実施形態の特定の態様、利点、および新規な特徴を本明細書で説明する。本明細書に開示される実施形態の任意の特定の実施形態に従って必ずしも全てのそのような利点が達成し得るわけではないことを理解されたい。したがって、本明細書で開示される実施形態は、本明細書で教示または示唆されるような他の利点を必ずしも達成することなく、本明細書で教示されるような1つの利点または利点のグループを達成または最適化する方法で具体化または実施し得る。
【図面の簡単な説明】
【0010】
以下、本明細書に開示される特徴を、図面を参照して説明する。図面は、本明細書に記載の発明の実施形態を説明するために提供されるものであり、その範囲を限定するものではない。
【0011】
図1は、サイクルベースのスケジューリングを用いたRTOS実装を実行する組み込みシステムを含む操作環境の例を示す。
【0012】
図2は、タスクを起動させるために図1の操作環境のコンポーネントによって実行される操作の例を示す。
【0013】
図3は、図1の組み込みシステムで実装され得るサイクルベースのスケジューリングルーチンの例を示す。
【発明を実施するための形態】
【0014】
上で説明したように、組み込みデバイスは、マイクロコントローラの単一のCPUコア上で複数のタスクの実行を可能にするRTOSを実行してもよい。典型的なRTOS実装は、タイムベース(例えば、基本単位時間)として使用されるシステムチックを使用する。一般的に、典型的なRTOS実装では、ハードウェアタイマを使用して周期的なシステムチック割り込みを生成し、全てのRTOSタイムアウト、タスク遅延、および/または期間は、時間(ミリ秒など)ではなくシステムチックで指定される。言い換えると、典型的なRTOS実装におけるタイムアウト、タスク遅延、および/または期間は、タイムアウト、タスク遅延、および/または期間がシステムチックの整数倍で発生するように、システムチックに調整される。システムチックはユーザが設定可能であるが、典型的なRTOS実装では典型的には1ミリ秒に設定される。システムチックを1ミリ秒に設定すると、ハードウェアタイマは、典型的なRTOS実装では1秒間当たり1000回のシステムチック割り込みを生成するようプログラムされる。
【0015】
しかし、1ミリ秒ごとに発生するシステムチック割り込みは、最新の組み込みシステムで要求されてもよい操作を実行するには不十分であってもよい。例えば、タスク遅延および/またはタイムアウトは、システムチックに調整されるため、タスク遅延および/またはタイムアウトは、2つのシステムチック割り込みの間の時間内に満了することはできない。したがって、典型的なRTOS実装において、連続するシステムチック割り込み間の期間より短い期間の遅延を有するタスク遅延を構成することはできなくてもよい。
【0016】
さらに、1ミリ秒(またはその他の期間)ごとに発生するシステムチック割り込みは、計算リソースの浪費および/または過剰な電力消費をもたらすことができる。例えば、CPUコアがいくつかの連続するシステムチックで1つのタスクのみを実行している場合、この間スケジューラは実行されないため、スケジューラをトリガする割り込みは必要ない。しかし、典型的なRTOS実装は、タスクの実行を追跡し、それに応じてシステムチック割り込みを調整するメカニズムを有さない。むしろ、ハードウェアタイマは、タスクの実行状態に関係なく、システムチック割り込みを生成し続け、スケジューラを起動し、それにより、計算リソースを浪費し、および/または、過剰な電力を消費する。
【0017】
したがって、本明細書では、チックベースのスケジューリングではなく、サイクルベースのスケジューリングを使用する改良型RTOS実装について説明する。従来のチックベースのスケジューリングに対してサイクルベースのスケジューリングを使用することにより、以下でより詳細に説明するように、組み込みシステムに技術的な利点が提供される。本明細書で説明する改良型RTOS実装は、チックベースのスケジューリングの代わりにサイクルベースのスケジューリングを使用するが、本明細書で説明する改良型RTOS実装は、従来のRTOS実装に存在するアプリケーションプログラミングインターフェース(API)関数と依然として互換性を有してもよい(例えば、本明細書で説明する改良型RTOSは、従来のRTOS実装に存在するAPI関数を読み取って実行することができる)。従来のRTOSAPI関数との互換性を維持することによって、本明細書で説明する改良型RTOS実装は、既存のコードが同じタイミング(例えば、システムチックの整数倍、通常はミリ秒)を維持することを可能にし、したがって、既存のコードは変更されないままで維持できる。本明細書で説明する改良型RTOS実装は、以下に説明するサイクルベースのスケジューリングをサポートするために、追加のAPI関数を実装することもできる。
【0018】
例えば、本明細書で説明するサイクルベースのスケジューリングは、スケジューリングの分解能を向上させることにより、組み込みシステムの基本単位時間を変更することができる。典型的なRTOS実装で使用されるシステムチック(例えば、1ミリ秒ごとに発生するチック)に依存する代わりに、本明細書で説明する改良型RTOS実装は、一部または全ての操作にCPUサイクルを内部的に使用する。典型的なRTOS実装では単位(例えば、倍数)チック(例えば、ミリ秒)で指定されていたタスク遅延、タイムアウト、および/またはソフトウェアタイマのような操作は、現在、CPUサイクル(例えば、組み込みシステムの内部単位)で指定することができる。操作は、従来のチック単位やミリ秒単位だけでなく、マイクロ秒、ナノ秒などのシステムに依存しない高分解能単位で指定し得る。本明細書で使用する場合、CPUサイクルは、マイクロコントローラがプロセッサ操作を実行するのに要する時間であってもよく、組み込みシステムのクロックレートの逆数に等しくてもよい。
【0019】
本明細書で説明する改良型RTOS実装によって提供されるより細かい時間粒度は、典型的なRTOS実装と比較して、組み込みシステム上で実行されるアプリケーションのタイミングニーズがより良い精度と正確さで満たされ得ることを意味することができる。例えば、典型的なRTOS実装に対する改良は、桁数(例えば、3桁、4桁、5桁など)で測定し得る。
【0020】
この改良により、本明細書で説明する改良型RTOS実装におけるスケジューリングは、典型的なRTOS実装によって提供される粗い時間分解能のために、以前は典型的なRTOS実装でスケジューリングを使用できなかった多くの状況で使用可能になってもよい。例えば、5マイクロ秒から100マイクロ秒の間の遅延がタスクまたはサブルーチンによって要求される状況が多くあるが、チックベースのシステムである典型的なRTOS実装では達成し得ない。しかし、5マイクロ秒から100マイクロ秒の遅延は、本明細書で説明するサイクルベースのスケジューリングで達成し得る。
【0021】
本明細書で説明するサイクルベースのスケジューリングを実装するRTOS実装は、いくつかの技術的な利点を提供することができる。例えば、任意の種類の遅延を、マイクロ秒、CPUクロックサイクル、ナノ秒、および/またはそのようなものなどのより小さい単位で指定することができる。これらの単位は整数として渡すことができるため、単位分解能を高くすることで、より高い遅延精度をもたらすことができる。別の例として、単位分解能の向上により、本明細書で説明する改良型RTOS実装では、以前は時限遅延を使用できなかった場合でも、時限遅延を使用可能になる。別の例として、遅延がより正確になってもよい。典型的なRTOS実装では、API関数delay(10)が呼び出されると、組み込みシステムの次のシステムチックがどの程度離れているかに応じて、9から10msの間の時間、スレッドの操作を一時停止してもよい。本明細書で説明する実装のような、サイクルベースのスケジューリングを実装するRTOS実装では、API関数delay_ms(10)が呼び出されると、正確、またはほぼ正確に(例えば、1%、2%、3%以内など)10msの時間、スレッドの操作を一時停止することがある。別の例として、サイクルベースのスケジューリングは、計算リソースを浪費し、および/または過剰な電力を消費できる周期的な割り込み生成をもたらさなくてもよい。むしろ、本明細書で説明する実装のようなサイクルベースのスケジューリングを実装するRTOS実装は、特定のAPI関数が呼び出されたこと(例えば、delay_ms(t))に応答して、ハードウェアタイマに割り込みを生成させてもよい。言い換えれば、本明細書で説明するサイクルベースのスケジューリングを実装するRTOS実装は、タイムベースのアクションが必要なときにハードウェアタイマに割り込みを生成させてもよい。このように、本明細書で説明するサイクルベースのスケジューリングを用いてRTOS実装を実装する組み込みシステムのマイクロコントローラのCPUコアは、割り込みの生成が必要でない、または望まれない状況において、他のタスクを実行し、および/または、エネルギーを保存するために休止モードに入ることができる。
【0022】
本明細書で使用される場合、「リアルタイム」および「準リアルタイム」という用語は、通常の意味を有することに加えて、本明細書では、組み込みシステムの操作に知覚可能な遅延を生じさせないように十分に高速に実行される操作またはアクションを説明するために使用されることが多く、「直ちに」または「瞬時に」を意味してもよいが、その必要はない。さらに、本明細書では、通常の意味を有することに加え、「ソフトウェア」と「ファームウェア」という用語は、 互換的に使用してもよい。さらに、いくつかの機能性例がCプログラミング言語に関して本明細書で説明されているが、 本明細書で説明される特徴は、そのように限定されるものではない。むしろ、本明細書で説明する特徴を実装するために、任意のプログラミング言語を使用してもよい。
【0023】
本開示の前述の態様および付随する利点の多くは、添付の図面と組み合わせて考慮した場合、以下の詳細な説明を参照することによってよりよく理解されるようになるにつれて、より容易に理解されるであろう。
【0024】
サイクルベースのスケジューリングを実装するRTOSを用いた組み込みシステムの例
図1は、サイクルベースのスケジューリングを用いたRTOS実装を実行する組み込みシステム120を含む操作環境100の例を示す。図1に示されるように、組み込みシステム120は、1つまたは複数のハードウェアタイマ121、オプションのカウンタ122、メモリ123、1つまたは複数のCPU125、および任意で、入出力(I/O)ポート、タイマ、データ記憶デバイス、センサ、および/またはそのような他のハードウェア126を含む。
【0025】
サイクルベースのスケジューリングを実装するRTOS実装は、組み込みシステム120のメモリ123にロードされてもよく、組み込みシステム120の単一のCPU125または複数のCPU125(例えば、対称マルチ処理)によって実行されてもよい。サイクルベースのスケジューリングを実装し、CPU125によって実行されるRTOS実装は、本明細書では、"改良型RTOS"または "CPU125によって実行されるRTOS"と呼ばれてもよい。CPU125はまた、本明細書において、プロセッサ、ハードウェアプロセッサ、処理コア、および/またはそのようなものとして呼ばれてもよい。CPU125は、CPU125によって実行されると、CPU125に本明細書で説明する操作の一部または全てを実行させるコンピュータ実行可能命令で構成されてもよい。CPU125によって実行されるRTOSは、1つまたは複数のスレッドが同時に実行されることを可能にしてもよい。スレッドは、プログラムの「実行スレッド」であってもよい。これらのスレッドは、スレッドが実行される組み込みシステム120が単一のCPU125を有する場合であっても、準同時実行してもよい。CPU125は、タイムスライシングまたは優先度制御スケジューリングの少なくとも2つの方法のうちの1つでスレッドを同時に実行することができる。
【0026】
CPU125がタイムスライシング(例えば、「ラウンドロビン」スケジューリングとしても知られる)を実装している場合、CPU125は、特定の時間(例えば、タイムスライス)の間、(何らかの理由でブロックされていないが、実行の準備ができている)一部または全てのスレッドを実行する。その後、CPU125は次のスレッドを特定の時間(典型的には同じ時間)実行する。このようにして、いくつかのスレッドまたは全てのスレッドがCPU125を等しく共有する。一例として、タイムスライスはミリ秒またはミリ秒の倍数であってもよい。
【0027】
タイムスライシングの1つの問題は、特定のタスクが実行されるまでに多くのタイムスライス(例えば、数ミリ秒、数十ミリ秒など)がかかり得ることである。この遅延は、ユーザインターフェース(UI)をレンダリングおよび/または表示するタスクにとっては重要でなくてもよく、ユーザは応答の10ミリ秒の遅延に気づかなくてもよい。一方、別スレッドで操作できるネットワークスタックのようなタスクにとっては、低遅延の方が重要であり得る。ネットワークスタックが低遅延を達成できない場合、ネットワークスタックが特定の操作を実行できなくてもよい。
【0028】
優先度制御スケジューリングは、よりタイムクリティカルなタスクに、よりタイムクリティカルでないタスクよりも高い優先度を提供することによって、タイムスライシングの技術的欠陥を克服してもよい。例えば、上記のUIタスクは、ネットワークスタックタスクよりもよりも低い優先度を有してもよい。ネットワークスタックタスクは、割り込みによってトリガされるイベントなどのイベントを待機できる。割り込みは、パケットが組み込みシステム120によって受信されたときに、割り込みサービスルーチン(ISR)によってトリガされてもよい。割り込みがトリガされると、CPU125によって実行されるRTOSは、直ちに、またはほぼ直ちに、ネットワークスタックタスクを起動することができ、ネットワークスタックテストは、その後、受信パケットを処理し、反応することができる。
【0029】
CPU125によって実行されるRTOSは、タイムスライシングスケジューリング、優先度制御スケジューリング、および/またはタイムスライシングと優先度制御スケジューリングの組み合わせを実装してもよい。例えば、RTOSは、異なる優先度で実行されるタスクに対して優先度制御スケジューリングを使用し、同一の優先度で実行されるタスクに対してタイムスライシングスケジューリングを使用してもよい。
【0030】
典型的なRTOS実装は、通常はミリ秒ごとに1回、周期的な割り込みを生成するように構成された1つのハードウェアタイマを使用する。実施形態では、サイクルベースのスケジューリングを実装し、CPU125によって実行されるRTOSは、2つ以上のハードウェアタイマ121を使用して操作することができる。例えば、複数のハードウェアタイマ121が存在する実施形態では、第1のハードウェアタイマ121は、CPU125のサイクルごとにサイクルカウント値(例えば、CycleCnt)を増加(または減少)することができ、長期的な精度のためにRTOSによって使用され得る。第1のハードウェアタイマ121は、連続モードで実行することができるが、割り込みを生成しなくてもよい。むしろ、第1のハードウェアタイマ121は、周期的にサイクルカウント値を増加(または減少)することができ、これは、CPU125のサイクルで現在の組み込みシステム120の時間を計算するためのタイムベースとしてRTOSによって使用され得る。
【0031】
第2のハードウェアタイマ121は、定義された時間後に割り込みを生成するようにRTOSによってプログラムすることができる。例えば、第2のハードウェアタイマ121は、指定された周波数でカウント値を増加または減少することができ、シングルショットモードで操作することができる。これは、第2のハードウェアタイマ121が0までカウントダウンするか、そのカウンタ限界までカウントアップし、0またはカウンタ限界に達すると単一の割り込みを生成することを意味する。
【0032】
あるいは、サイクルベースのスケジューリングを実装し、CPU125によって実行されるRTOSは、単一のハードウェアタイマ121を使用して操作することができる。単一のハードウェアタイマ121は、CPU125のサイクルごとに増加(または減少)することができ、連続モードで実行し、長期的な精度のために使用でき、1つまたは複数の割り込みを生成できる。したがって、上記の第1および第2のハードウェアタイマ121の機能性を単一のハードウェアタイマ121に組み合わせることができる。
【0033】
本開示では、ハードウェアタイマ121が連続モードで実行し、サイクルカウント値を増加(または減少)することができると説明しているが、これは限定を意味するものではない。例えば、ハードウェアタイマ121は、長期的な精度のためにCPU125のサイクルごとに周期的にサイクルカウント値を増加(または減少)することによって、カウンタ(例えば、カウンタ122)の機能性を実装することができる。別の例として、ハードウェアタイマ121とは別のカウンタ122が、上記のカウンタの機能性を実装することができる。この実施形態では、ハードウェアタイマ121は連続モードで実行されなくてもよい。むしろ、別のカウンタ122が連続モードで実行され、サイクルカウント値を増加(または減少)することによって長期的な精度を提供してもよい。
【0034】
実施形態では、サイクルカウント値は64ビット値である。64ビットのサイクルカウント値のオーバーフローが発生する可能性があるが、オーバーフローは、システムが電源オンで連続実行している場合、約585年である264CPU125のサイクル(1GHzクロックを想定)の後に発生する。約585年後に起こるオーバーフローが問題となる場合、CPU125によって実行されるRTOSは、その問題を克服するように構成され得る。例えば、CPU125は、より遅いクロックソース(例えば、100MHzなど、1GHz未満の速度のクロック)を使用するよう構成され得る。例えば、CPU125が100MHzのクロックを使用する場合、約5850年後にオーバーフローが発生する。別の例として、ハードウェアタイマ121の最下位ビットは無視され得る。ハードウェアタイマ121の全32ビットの代わりにハードウェアタイマ121の28ビットが使用される場合、CPU125によって実行されるRTOSによって観測される周波数は16分の1に減少され得、その結果、約9360年後にオーバーフローが発生する。別の例として、オーバーフローは、CPU125によって実行されるRTOSによって処理され得る。例示的な例として、RTOSは、オーバーフローを適切に考慮するように書き込まれ得る(例えば、サイクルカウント値の前回の値を表すカウント値と、サイクルカウント値の現在値がサイクルカウント値の前回の値より小さくなる毎に増加され、オーバーフローの数を表す第2のカウント値を維持する)。
【0035】
典型的なRTOS実装に存在する、組み込みシステム120が開始してからの時間チック(例えば、割り込み)の数を表すカウンタ値(例えば、TickCnt)は、CPU125によって実行されるRTOSにおいて任意で排除される。典型的なRTOS実装では、ネットワーク(例えば、ウェブ)インターフェースで表示するため、またはタイムアウトを伴う短いループで使用するために、ミリ秒単位でシステム時間を取得することが時々有用であった。サイクルベースのスケジューリングを実装するCPU125によって実行されるRTOSでは、固定された1ミリ秒のシステムチックがもはや存在しないため、ネットワークインターフェースにシステム時間を表示する必要はなくてもよい。本明細書で説明するように、ハードウェアタイマ121は依然として割り込みを生成してもよいが、割り込みは必ずしも周期的である必要はない。その代わりに、ハードウェアタイマ121は、タスク、スケジューラ、および/またはそのようなものによって必要なときに正確に割り込みを生成するようにプログラムされるシングルショットタイマであってもよい。
【0036】
CPU125によって実行されるRTOSにおいて、時間チックの数を表すカウンタ値を排除され得るが、これは限定を意味するものではない。例えば、CPU125によって実行されるRTOSは、組み込みシステム120のユーザまたはオペレータによって望まれる場合、依然としてミリ秒(または任意の他の時間単位)ごとに周期的な割り込みを生成することができる。特に、時間チックの数を表すカウンタ値を複製するために、RTOSは、第1のAPI関数(例えば、OS_TIME_GetCycles())を呼び出して、サイクルベースタイム(例えば、第2のハードウェアタイマ121またはカウンタ122によって維持されるカウント値によって示されるように、組み込みシステム120が操作を開始するか、または開始されてから発生したCPU125のサイクル数)を取得することができる。次に、RTOSは、サイクルベースタイムをCPU125のサイクル周波数(例えば、ミリ秒などの時間単位におけるCPU125のサイクル数)で割ることができる。例示的な例として、600MHzの組み込みシステム120では、RTOSは第1のAPI関数を呼び出し、結果の値を600000で割って、組み込みシステム120が操作を開始するか、または開始されてから経過した時間単位の数を表すミリ秒単位の時間値を取得してもよい。代替的または追加的に、CPU125によって実行されるRTOSは、呼び出されると、組み込みシステム120が操作を開始するか、または開始されてから経過した時間単位の数を返すAPI関数(例えば、OS_TIME_GetTime_ms())をサポートすることができる。
【0037】
上記のように、CPU125によって実行されるRTOSは、典型的なRTOS実装で使用可能な1つまたは複数のAPI関数をサポートすることができる。例えば、典型的なRTOS実装によってサポートされるAPI関数は、CPU125によって実行されるRTOSによって呼び出されるとき、典型的なRTOS実装と同じ方法で動作してもよい。例示的な例として、典型的なRTOS実装によってサポートされ、ミリ秒調整されたタイミングをもたらすAPI関数OS_Delay()は、CPU125によって実行されるRTOSによって呼び出されたとき、依然として同じミリ秒調整されたタイミングをもたらしてもよい。したがって、典型的なRTOSを備えた組み込みシステムで元々実行され、改良型RTOSを実行する組み込みシステム120に移行されるアプリケーションのタイミングは変化しなくてもよい。
【0038】
さらに、CPU125によって実行されるRTOSは、典型的なRTOSではサポートされない1つまたは複数の追加のAPI関数をサポートすることができる。例えば、CPU125によって実行されるRTOSは、OS_Delay_ms()、OS_delay_us()、OS_Delay_Cycles()、および/または、呼び出されると、時間単位またはCPU125のサイクルで指定された期間待機し、期間が満了した後にタスクをある状態から別の状態(例えば、待機状態から準備完了状態)に遷移させる他の任意のAPI関数をサポートすることができる。OS_Delay_ms()は、呼び出されると、呼び出しタスクを一時停止し、ミリ秒単位で指定された期間待機し、期間が満了した後にタスクをある状態から別の状態(例えば、待機状態から準備完了状態)に遷移させる関数であってもよい。OS_Delay_us()は、呼び出されると、呼び出しタスクを一時停止し、マイクロ秒単位で指定された期間待機し、時間が満了した後にタスクをある状態から別の状態(例えば、待機状態から準備完了状態)に遷移させる関数であってもよい。OS_Delay_Cycles()は、呼び出されると、呼び出しタスクを一時停止し、CPU125のサイクルで指定された期間待機し、期間が満了した後にタスクをある状態から別の状態(例えば、待機状態から準備完了状態)に遷移させる関数であってもよい。これらの追加のAPI関数の一部または全ては、本明細書で説明する理由により、より正確なタイミングを可能にしてもよい。全体として、典型的なRTOS実装によってサポートされるAPI関数と、典型的なRTOS実装によってサポートされない追加のAPI関数をサポートすることによって、CPU125によって実行されるRTOSは、典型的なRTOS実装と改良型RTOSによってサポートされるAPI関数を使用するアプリケーションに対して、典型的なRTOSと同じレベルの精度を提供することができ、1つまたは複数の追加のAPI関数を使用するように変更されたアプリケーションに対して、典型的なRTOSよりも正確なタイミングを提供することができる。
【0039】
CPU125は、任意のハードウェアプロセッサであってよく、単一コアまたは複数コアを含んでよい。いくつかの実施形態では、組み込みシステム120は、複数のディスクリートCPU125を含んでもよい。メモリ123は、ランダムアクセスメモリ(RAM)および/またはリードオンリーメモリ(ROM)を含んでもよい。示された実施形態では、メモリ123は、1つまたは複数のリアルタイムプログラム124(または任意で、リアルタイムで実行されない1つまたは複数のプログラム)を含む。一実施形態では、プログラム124はROMに格納される。プログラム124はまた、いくつかの実施形態ではRAMに格納されてもよい。
【0040】
組み込みシステム120は、ネットワーク110を介して他の電子デバイスまたはコンピューティングデバイスと通信することができる。例えば、ネットワーク110は、任意の有線ネットワーク、無線ネットワーク、またはそれらの組み合わせを含んでもよい。例えば、ネットワーク110は、パーソナルエリアネットワーク、ローカルエリアネットワーク、ワイドエリアネットワーク、無線放送ネットワーク(例えば、ラジオまたはテレビ用)、ケーブルネットワーク、衛星ネットワーク、携帯電話ネットワーク、またはそれらの組み合わせであってもよい。さらなる例として、ネットワーク110は、インターネットのような、様々な別個の当事者によって運営される可能性のある、リンクされたネットワークの公的にアクセス可能なネットワークであってもよい。いくつかの実施形態では、ネットワーク110は、企業または大学のイントラネットのようなプライベートまたはセミプライベートネットワークであってもよい。ネットワーク110は、モバイル通信用グローバルシステム(GSM)ネットワーク、符号分割多元接続(CDMA)ネットワーク、ロングタームエボリューション(LTE)ネットワーク、または任意の他のタイプの無線ネットワークなどの、1つまたは複数の無線ネットワークを含んでもよい。ネットワーク110は、インターネットまたは他の前述のタイプの任意のネットワークを介して通信するためのプロトコルおよびコンポーネントを使用することができる。例えば、ネットワーク110によって使用されるプロトコルは、ハイパーテキスト転送プロトコル(HTTP)、ハイパーテキスト転送プロトコルセキュア(HTTPS)、メッセージキューテレメトリトランスポート(MQTT)、制約アプリケーションプロトコル(CoAP)などのようなものを含んでもよい。インターネットまたは任意の前述の他の種類の通信ネットワークを介して通信するためのプロトコルおよびコンポーネントは、当業者に周知であり、したがって、本明細書ではこれ以上詳細に説明しない。
【0041】
実装例
上記のように、本明細書で説明するサイクルベースのスケジューリングを実装するRTOSは、様々な電子デバイスまたはコンピューティングデバイス(例えば、組み込みシステム120、コンピュータ、マイクロコントローラなど)用のリアルタイムまたは準リアルタイムアプリケーションの開発および実行に使用されるように設計された優先度制御(および/またはタイムスライシング)マルチタスクオペレーティングシステムであり得る。RTOSは、CPU125によって実行され、メモリ123にアクセスしてもよい。本明細書では、説明を容易にするために、RTOSは、組み込みシステム120のCPU125によって実行されるものとして説明される。しかし、RTOSは、任意のタイプの電子デバイスまたはコンピューティングデバイスのCPUコアまたは複数のCPUコアによって実行され得る。
【0042】
タスクは、組み込みシステム120のCPU125上で実行されるプログラムであってもよい。スレッドは、他のスレッドと同じメモリレイアウトを共有するタスクであってもよく、処理は、それ自身のメモリレイアウトを有するタスクであってもよい。改良型RTOSは、上記のマルチタスクオペレーティングシステムを提供することにより、単一のCPU125および/または複数のCPU125上で複数のタスクを実行可能にしてもよい。改良型RTOSは、実行のためにタスクをスケジュールすることができる。
【0043】
ハードウェアタイマ121によって生成される割り込みは、ハードウェアタイマ121によって引き起こされるプログラムの割り込みであってもよい。割り込みが発生すると、CPU125はそのレジスタを保存し、ISRと呼ばれるCPU125のサブルーチンを実行してもよい。ISRが完了した後、プログラムは実行の準備ができた最優先タスクに戻ってもよい。例えば、ISRは、タスクが起動および/または実行されるかどうかを判定することで、ハードウェアタイマ121の満了に応答することができる。
【0044】
システムチックをタイムベースとして使用する典型的なRTOS実装とは異なり、改良型RTOSはCPU125のサイクルをタイムベースとして使用する。例えば、1つのハードウェアタイマ121またはカウンタ122は、CPU125クロックレートによって判定される周波数など、特定の周波数で実行してもよい(例えば、ハードウェアタイマ121またはカウンタ122は、上記のように、CPU125のサイクルごとにサイクルカウント値を増加または減少することができる)。改良型RTOSは、単一のハードウェアタイマ121または複数のハードウェアタイマ121(および/またはカウンタ122)に依存することができる。改良型RTOSが複数のハードウェアタイマ121(および/またはカウンタ122)に依存する実施形態では、第1のハードウェアタイマ121は、CPU125のサイクルごとに(システムチックごとまたは時間単位ごとにではなく)サイクルカウント値を増加または減少し、長期タイムベースに使用されてもよい(例えば、組み込みシステム120の操作の経過にわたって連続的に増加または減少するサイクルカウント値を生成することができる)。第2のハードウェアタイマ121は、指定された周波数(例えば、タスクによるAPI呼び出しで指定された時間単位、CPU125のサイクル数、および/またはシステムチック単位の周波数)でカウント値を増加または減少し、カウント値が0またはカウンタ限界に達したときなど、1つまたは複数の割り込みを生成するために使用されてもよい。第2のハードウェアタイマ121の満了は、割り込みの発生を引き起こしてもよく、これにより、ISR(または他のCPU125サブルーチン)に、第1のハードウェアタイマ121によって維持されるサイクルカウント値を読み取らせ、第1のハードウェアタイマ121によって維持されるサイクルカウント値が、タスクが起動および/または実行をもたらす値に達したかどうかを判定してもよい。
【0045】
第2のハードウェアタイマ121は、改良型RTOSによって周期的にリセットされるワンショットタイマであってもよい。例えば、1つまたは複数のタスクは、それぞれのタスクが起動および/または実行されるべき時間枠を指定するAPI関数呼び出しを生成してもよい。時間枠は、単位時間、CPU125のサイクル数、および/または単位システムチックで指定され得、改良型RTOSは、時間枠がCPU125のサイクル数で指定されていない場合、単位時間および/または単位システムチックを等しいCPU125のサイクル数に変換することができる。改良型RTOSは、どのタスクが最初に起動されるかを判定し、(1)第2のハードウェアタイマ121を、起動される最初のタスクによって生成されたAPI関数呼び出しに対応するCPU125のサイクル数でカウント値を開始し(例えば、 起動される最初のタスクによって生成されたAPI関数呼び出しで指定されたCPU125のサイクルの数、または起動される最初のタスクによって生成されたAPI関数呼び出しで指定された単位時間、または単位システムチックに等しいと判定されたCPU125のサイクル数)、カウント値を0(または1)まで減少するように設定する、または(2)第2のハードウェアタイマ121を0(または1)でカウント値を開始し、起動される最初のタスクによって生成されたAPI関数呼び出しで指定されたCPU125のサイクルの数に達するまでカウント値を増加するように設定する、ことができる。
【0046】
カウント値が0(または1)またはCPU125のサイクル数に達すると、第1のハードウェアタイマ121は割り込みを生成することができ、CPU125のISRまたは他のサブルーチンは、第1のハードウェアタイマ121のサイクルカウント値をチェックして、起動されるのを待機している第1のタスクが起動されるべきかどうかを判定することができる。最初のタスクが起動されるべき場合、改良型RTOSのスケジューラ、最初のタスク、および/またはCPU125または改良型RTOSの他のサブルーチンは、結果として操作を実行してもよい(例えば、最初のタスクを起動させる)。これらの操作が完了すると、および/または操作が完了する前に、改良型RTOSは、第2のハードウェアタイマ121をリセットし、次にどのタスクが起動されるかを判定してもよい。改良型RTOSは、次に、2つのアクションのうちの少なくとも1つを実行してもよい。改良型RTOSは、起動されるのを待機している次のタスクによって生成されたAPI関数呼び出しに対応するCPU125のサイクル数から、以前に実行された第2のハードウェアタイマ121、およびスケジューラ、最初のタスク、および/または他のサブルーチンによって実行された任意の操作により既に経過したCPU125のサイクル数を差し引いたサイクル数でカウント値を開始し(例えば、起動されるのを待機している最初のタスクによって生成されたAPI関数呼び出しで指定されたCPU125のサイクル数、または起動されるのを待機している最初のタスクによって生成されたAPI関数呼び出しで指定された単位時間、または単位システムチックに等しいと判定されたCPU125のサイクル数から、第2のハードウェアタイマ121が最初に設定されてから経過したCPU125のサイクル数を差し引いたサイクル数)、カウント値を0(または1)に減少するように、第2のハードウェアタイマ121を設定してもよい。代替的または追加的に、改良型RTOSは、第2のハードウェアタイマ121を0(または1)でカウント値を開始するように設定し、起動されるのを待機している最初のタスクによって生成されたAPI関数呼び出しで指定されたCPU125のサイクル数から、以前に実行された第2のハードウェアタイマ121、およびスケジューラ、最初のタスク、および/または他のサブルーチンによって実行された任意の操作により既に経過したCPU125のサイクル数を差し引いたサイクル数に達するまで、カウント値を増加してもよい。カウント値が0(または1)またはCPU125のサイクル数に達すると、第1のハードウェアタイマ121は割り込みを生成することができ、ISRまたは他のサブルーチンは、第1のハードウェアタイマ121のサイクルカウント値をチェックし、起動されるのを待機している次のタスクを起動させるかどうかを判定することができる。この処理は、本明細書で説明するように、API関数呼び出しを生成する任意の数のタスクに対して任意の回数繰り返してもよい。
【0047】
CPU125のサイクルが発生する周波数はクロックレートの逆数でよいため、CPU125のサイクルは1ミリ秒ごとに1回よりもはるかに頻繁に発生してもよい。改良型RTOSはタイムベースとしてCPU125のサイクルに依存するため、改良型RTOSで実行されるタスクは、割り込みに応答して起動し、CPU125のサイクルの発生単位または倍数に基づく時間または周波数で実行するよう構成され得、したがって、1ミリ秒よりも細かい時間分解能で、または1ミリ秒ごとに1回よりも頻繁に発生する。しかし、システムチックは、せいぜい1ミリ秒ごとに1回発生する程度であってもよい。したがって、改良型RTOSで実行されるタスクは、タイムベースとしてシステムチックに依存する典型的なRTOS実装によって提供される時間分解能よりもはるかに細かい時間分解能で起動して実行するように構成され得る。その結果、生成される割り込みが少なくてもよく、CPU125リソースを節約し、電力消費を削減することができる。
【0048】
システムチックではなくCPU125のサイクルをタイムベースとして使用しているにもかかわらず、改良型RTOSは依然として既存のAPI関数と互換性があってもよい。例えば、改良型RTOSは、呼び出されたときにCPU125のサイクルをシステムチック(1ミリ秒ごとに1チックと仮定)に変換し、および/または単位システムチックを返すAPI関数、呼び出されたときにCPU125のサイクルを時間単位に変換し、および/または時間単位(例えば、ミリ秒、マイクロ秒、ナノ秒など)を返すAPI関数、呼び出されたときに時間単位をCPU125のサイクルに変換し、および/またはCPU125のサイクルの単位を返すAPI関数、および/またはそのようなものを含んでもよい。
【0049】
図2は、タスク210を起動させるために操作環境100のコンポーネントによって実行される操作の例を示す。図2に示されるように、ハードウェアタイマ121Aは、(1)でCPUサイクル毎にサイクルカウント値を増加することができる。ハードウェアタイマ121Aは、操作環境100の他のコンポーネントによって実行されている操作に関わらず、サイクルカウント値がCPUサイクル毎に増加され続けるような連続モードで操作してもよい。ハードウェアタイマ121Aは、本明細書では第1のハードウェアタイマ121Aとも呼ばれてもよい。
【0050】
タスク210は、(2)で起動される時間枠を指定するAPI関数呼び出しを生成することができる。例えば、時間枠は、単位時間、CPU125のサイクル、単位システムチック、および/またはそのようなものであり得る。RTOS225は、API関数呼び出しを受信し、ハードウェアタイマ121Bを設定することができる。ハードウェアタイマ121Bは、本明細書では第2のハードウェアタイマ121Bとも呼ばれてもよい。特に、RTOS225は、(3)のAPI関数呼び出しで指定された時間枠に基づいてカウント値を増加または減少するように、ハードウェアタイマ121Bを設定することができる。カウント値は、CPU125のサイクル毎に増加または減少されてもよい。例示的な例として、RTOS225は、カウント値がAPI関数呼び出しで指定されたCPU125のサイクル数に一致するまで、カウント値がAPI関数呼び出しで指定された単位時間が経過したときに達するであろう値に一致するまで、カウント値がAPI関数呼び出しで指定された単位システムチックが満たされたときに達するであろう値に一致するまで、および/またはそのような値に一致するまで、カウント値を増加するようにハードウェアタイマ121Bを設定することができる。別の例示的な例として、RTOS225は、カウント値がAPI関数呼び出しで指定されたCPU125のサイクル数と一致する回数に減少されるまで、カウント値がAPI関数呼び出しで指定された単位時間が経過したときに達するであろう数と一致する回数に減少されるまで、カウント値がAPI関数呼び出しで指定された単位システムチックが満たされたときに達するであろう数と一致する回数に減少されるまで、および/またはそのような回数に減少されるまで、カウント値を減少するようにハードウェアタイマ121Bを設定することができる。カウント値が減少される実施形態では、カウント値は、上記の条件のいずれかが満たされたときにカウント値が0になるような値に最初に設定される。
【0051】
これに応じて、ハードウェアタイマ121Bは、(4)でカウント値を増加または減少することができる。ハードウェアタイマ121Bは、CPU125のサイクル毎にカウント値を増加または減少することができる。RTOS225は、(5)でカウント値を監視し、(例えば、カウント値が減少される状況では)カウント値が0に達したとき、または(例えば、カウント値が増加される状況では)API関数呼び出しで指定された時間枠に達したときを判定することができる。
【0052】
ハードウェアタイマ121Bは、カウント値が0または指定された時間枠に達したとRTOS225が判定したとき、(6)で割り込みを生成させることができる。ISR220は、割り込みがトリガされたことを判定し、(7)でハードウェアタイマ121Aの現在のサイクルカウント値を判定することができる。現在のサイクルカウント値が、タスク210が起動されるべき時間枠に等しいかまたはそれを超えるCPUサイクル数が経過したことを示す場合、ISR220は、(8)においてタスク210を起動させることができる。
【0053】
サイクルベースのスケジューリングルーチンの例
図3は、図1の組み込みシステム120で実装され得る、サイクルベースのスケジューリングルーチン300の例を示す。例えば、改良型RTOSおよび/または組み込みシステム120の他のコンポーネントを実行するCPU125は、サイクルベースのスケジューリングルーチン300を実行することができる。サイクルベースのスケジューリングルーチン300は、ブロック302で開始される。
【0054】
ブロック304では、第1のハードウェアタイマは、CPUサイクル毎にサイクルカウント値を増加させる。例えば、第1のハードウェアタイマは、第1のハードウェアタイマが実行される組み込みシステム120が開始されるときに、サイクルカウント値の増加を開始してもよい。
【0055】
ブロック306では、CPU125上で実行されているタスクからAPI関数呼び出しが取得される。例えば、API関数呼び出しは、タスクが起動される時間枠を指定してもよい。タスクはAPI関数を呼び出した後、スリープ状態になるか、休止状態または待機状態になってもよい。
【0056】
ブロック308では、第2のハードウェアタイマが、CPUサイクル毎にカウント値を増加または減少するように設定される。例えば、第2のハードウェアタイマが設定される方法は、API関数呼び出しで指定された時間枠に依存してもよい。
【0057】
ブロック310では、第2のハードウェアタイマの満了に応答して割り込みが生成される。例えば、第2のハードウェアタイマは割り込みを生成してもよい。
【0058】
ブロック312では、API関数呼び出しによって指定された時間枠が経過したという判定に応答して、タスクが起動される。例えば、割り込みを生成することで、ISRにサイクルカウント値をチェックさせてもよい。判定は、サイクルカウント値をチェックして、現在のサイクルカウント値と前回のサイクルカウント値(例えば、API関数が呼び出されたときの現在のサイクルカウント値)との差が、API関数呼び出しで指定された時間枠に対応する(例えば、一致する)かどうかを判定することによって行われてもよい。タスクが起動された後、第2のハードウェアタイマは、タスクまたは別のタスクを起動させる将来の使用のためにリセットされてもよく、サイクルベースのスケジューリングルーチン300は、終了する。
【0059】
用語
本明細書に説明されたもの以外の多くの他の変形が、本開示から明らかになり得る。例えば、実施形態によっては、本明細書で説明するアルゴリズムの任意の特定の動作、イベント、または機能は、異なる順序で実行され得、追加され得、マージされ得、または完全に省かれる(例えば、説明する全ての動作またはイベントが、アルゴリズムの実施に必要でなくてもよい)。さらに、特定の実施形態では、動作またはイベントは、例えば、マルチスレッド処理、割り込み処理、または複数のプロセッサまたはプロセッサコア、または他の並列アーキテクチャ上を通じて、順次ではなく、同時に実行され得る。さらに、異なるタスクまたは処理は、一緒に機能することができる異なるマシンおよび/またはコンピューティングシステムによって実行され得る。
【0060】
本明細書に開示した実施形態に関連して説明した様々な例示的論理ブロック、モジュール、およびアルゴリズム要素は、電子ハードウェア、コンピュータソフトウェア、または両方の組み合わせとして実装され得る。ハードウェアとソフトウェアのこの互換可能性を明確に説明するために、様々な例示的コンポーネント、ブロック、モジュール、および要素を、その機能性の観点から一般的に上記してきた。このような機能性がハードウェアとしてまたはソフトウェアとして実装され得るかは、特定のアプリケーションおよびシステム全体に課される設計上の制約に依存する。説明した機能性は、特定のアプリケーション毎に様々な方法で実装され得るが、そのような実装の決定は、本開示の範囲からの逸脱を引き起こすものとして解釈されるべきではない。
【0061】
本明細書に開示される実施形態に関連して説明される様々な例示的論理ブロックおよびモジュールは、汎用プロセッサ、デジタル信号プロセッサ(DSP)、特定用途向け集積回路(ASIC)、フィールドプログラマブルゲートアレイ(FPGA)または他のプログラマブル論理デバイス、ディスクリートゲートまたはトランジスタ論理、ディスクリートハードウェアコンポーネント、または本明細書に説明される機能を実行するように設計されたそれらの任意の組み合わせなどの機械またはハードウェアプロセッサによって実装または実行され得る。汎用プロセッサは、マイクロプロセッサとし得るが、代替として、プロセッサは、コントローラ、マイクロコントローラ、またはステートマシン、これらの組み合わせまたはそのようなものとし得る。プロセッサは、コンピュータ実行可能命令を処理するように構成された電気回路を含み得る。別の実施形態では、プロセッサは、コンピュータ実行可能命令を処理することなく論理演算を実行するFPGAまたは他のプログラマブルデバイスを含み得る。プロセッサは、コンピューティングデバイスの組み合わせ、例えば、DSPとマイクロプロセッサ、複数のマイクロプロセッサ、DSPコアと組み合わせた1つまたは複数のマイクロプロセッサ、の組み合わせ、または任意の他のそのような構成として実装され得る。本明細書では主にデジタル技術に関して説明するが、プロセッサは主にアナログコンポーネントを含んでもよい。例えば、本明細書で説明する信号処理アルゴリズムの一部または全部は、アナログ回路またはアナログとデジタルの混合回路で実装されてもよい。コンピューティング環境は、マイクロプロセッサに基づくコンピュータシステム、メインフレームコンピュータ、デジタル信号プロセッサ、ポータブルコンピューティングデバイス、デバイスコントローラ、またはアプライアンス内の計算エンジンなどを含むが、これらに限定されない、任意のタイプのコンピュータシステムを含むことができる。
【0062】
本明細書に開示される実施形態に関連して説明される方法、処理、またはアルゴリズムの要素は、ハードウェアに直接、1つまたは複数のメモリデバイスに格納され、1つまたは複数のプロセッサによって実行されるソフトウェアモジュールに、またはその2つの組み合わせにより具体化され得る。ソフトウェアモジュールは、RAMメモリ、フラッシュメモリ、ROMメモリ、EPROMメモリ、EEPROMメモリ、レジスタ、ハードディスク、リムーバブルディスク、CD―ROM、または当該技術分野で公知の任意の他の形態の非一時的なコンピュータ可読記憶媒体、媒体、または物理的コンピュータストレージに存在することができる。記憶媒体の例は、プロセッサが記憶媒体から情報を読み取り、記憶媒体に情報を書き込むことができるように、プロセッサに結合され得る。代替として、記憶媒体をプロセッサと一体化され得る。記憶媒体は、揮発性または不揮発性であり得る。プロセッサと記憶媒体はASICに存在することができる。 ASICはユーザ端末に存在することができる。代替として、プロセッサと記憶媒体は、ユーザ端末内のディスクリートコンポーネントとして存在することができる。
【0063】
「できる」、「かもしれない」、「でもよい」、「例えば」などのような本明細書で使用される条件付きの言語は、特に別段の記載がない限り、または使用される文脈内で別段理解されない限り、特定の実施形態が特定の特徴、要素、および/または状態を含む一方、他の実施形態が含まないことを伝えることが一般的に意図され得る。したがって、このような条件付きの言語は、特徴、要素、および/または状態が、1つまたは複数の実施形態に任意の方法で必要とされてもよいこと、または1つまたは複数の実施形態が、これらの特徴、要素、および/または状態が、任意の特定の実施形態に含まれてもよいか、または実行されてもよいかどうかを、作成者の入力またはプロンプトの有無にかかわらず決定するためのロジックを必ず含むことを、一般的に意味し得ない。「含む」、「含む」、「有する」などの用語は、同義語であり、包括的に、オープンエンドな態様で使用されてもよく、追加の要素、特徴、行為、操作などを排除するものではない。 また、「または」という用語は、包括的な意味で(排他的な意味ではなく)使用され得、例えば、要素のリストを接続するために使用される場合、「または」という用語は、リスト内の要素の1つ、いくつか、または全てを意味する。さらに、本明細書で使用される「毎」という用語は、その通常の意味を有することに加え、「毎」という用語が適用され得る要素の集合の任意の部分集合を意味することができる。
【0064】
「X、Y、またはZのうちの少なくとも1つ」という語句のような選言的言語は、特に別段の記載がない限り、項目、用語などが、X、Y、またはZのいずれか、またはそれらの任意の組み合わせ(例えば、X、Y、および/またはZ)であってもよいことを示すために一般に使用される文脈で理解され得る。したがって、このような選言的言語は、特定の実施形態が、Xの少なくとも1つ、Yの少なくとも1つ、またはZの少なくとも1つがそれぞれ存在することを必要とすることが一般的に意図され得るものではなく、また意味されるべきではない。
【0065】
上記の詳細な説明は、様々な実施形態に適用される新規な特徴を示し、説明し、指摘したが、説明された装置またはアルゴリズムの形態および詳細における様々な省略、置換、および変更は、本開示の趣旨から逸脱することなく行われ得ることが理解され得る。認識され得るように、本明細書に説明される特定の実施形態は、いくつかの特徴が他の特徴とは別に使用または実施され得るので、本明細書に記載される特徴および利点の全てを提供しない形態で実装され得る。
図1
図2
図3
【国際調査報告】