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

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

▶ ロベルト・ボッシュ・ゲゼルシャフト・ミト・ベシュレンクテル・ハフツングの特許一覧

(19)【発行国】日本国特許庁(JP)
(12)【公報種別】特許公報(B2)
(11)【特許番号】
(24)【登録日】2023-08-25
(45)【発行日】2023-09-04
(54)【発明の名称】データを処理するための方法および装置
(51)【国際特許分類】
   G06F 9/52 20060101AFI20230828BHJP
【FI】
G06F9/52 150C
【請求項の数】 12
(21)【出願番号】P 2022517837
(86)(22)【出願日】2020-09-17
(65)【公表番号】
(43)【公表日】2022-11-24
(86)【国際出願番号】 EP2020076031
(87)【国際公開番号】W WO2021053103
(87)【国際公開日】2021-03-25
【審査請求日】2022-03-18
(31)【優先権主張番号】102019214324.5
(32)【優先日】2019-09-20
(33)【優先権主張国・地域又は機関】DE
(73)【特許権者】
【識別番号】591245473
【氏名又は名称】ロベルト・ボッシュ・ゲゼルシャフト・ミト・ベシュレンクテル・ハフツング
【氏名又は名称原語表記】ROBERT BOSCH GMBH
(74)【代理人】
【識別番号】100118902
【弁理士】
【氏名又は名称】山本 修
(74)【代理人】
【識別番号】100196508
【弁理士】
【氏名又は名称】松尾 淳一
(74)【代理人】
【識別番号】100147991
【弁理士】
【氏名又は名称】鳥居 健一
(74)【代理人】
【識別番号】100201743
【弁理士】
【氏名又は名称】井上 和真
(72)【発明者】
【氏名】モッケン,トーマス
【審査官】三坂 敏夫
(56)【参考文献】
【文献】国際公開第2019/094072(WO,A1)
【文献】特開平06-110845(JP,A)
【文献】特開2008-299360(JP,A)
【文献】国際公開第2018/094509(WO,A1)
(58)【調査した分野】(Int.Cl.,DB名)
G06F 9/455-9/54
(57)【特許請求の範囲】
【請求項1】
データを処理するための方法であって、
第1のデータを少なくとも一時記憶するための第1のメモリ構造(SS1)および第2のデータを少なくとも一時記憶するための第2のメモリ構造(SS2)を含むデータ構造(DS)を提供するステップ(200)と、
第1のプログラム関数(F1)を提供するステップ(210)と
前記データ構造(DS)に記憶されたデータの読出しおよび/または出力を行うように構成された第2のプログラム関数(F2)を提供するステップ(220)と
を備え、
前記第1のプログラム関数(F1)が、対象データ(VD1、VD2)を受け付けて前記データ構造(DS)に記憶するように構成され、
前記第1のプログラム関数(F1)がさらに、前記第1のプログラム関数(F1)に時間的に連続して渡された対象データ(VD1、VD2)を前記第1のメモリ構造(SS1)と前記第2のメモリ構造(SS2)とに交互に記憶するように構成され
前記第2のプログラム関数(F2)が、
a)前記データの前記読出し前に、前記2つのメモリ構造(SS1、SS2)のうちのいずれから前記データが読み出されるべきかを決定し、
b)前記データの前記読出し前に、割り当てられたメモリ構造(SS1、SS2)から前記データが読み出されるべきカウンタの第1のカウンタ値を決定し、
c)前記データの前記読出し後、割り当てられたメモリ構造(SS1、SS2)から前記データがこの時点で読み出されるべきカウンタの第2のカウンタ値を決定し、
d)前記第1のカウンタ値を前記第2のカウンタ値と比較するように構成された、方法。
【請求項2】
前記第1のプログラム関数(F1)が、前記データ構造(DS)に割り当てられた状態変数の少なくとも1つを使用して、前記第1のメモリ構造(SS1)および/または前記第2のメモリ構造(SS2)への書込みアクセスの開始もしくは実施を決定するように、および/または少なくとも一時記憶を実行するように構成される、請求項1に記載の方法。
【請求項3】
前記第1のプログラム関数(F1)が、状態変数として第1のカウンタ(C1)を使用して、前記データ構造(DS)および/または前記第1および/または第2のメモリ構造(SS1、SS2)への書込みアクセスの回数を決定するように、および/または少なくとも一時記憶を実行するように構成された、請求項2に記載の方法。
【請求項4】
前記第1のプログラム関数(F1)が、前記第1のカウンタ(C1)に応じて、
a)前記第1のプログラム関数(F1)に渡された対象データ(VD1、VD2)が、前記第1のメモリ構造(SS1)に書き込まれるか前記第2のメモリ構造(SS2)に書き込まれるかを決定するように、および/または、
b)前記第1のプログラム関数(F1)に渡された対象データ(VD1、VD2)を前記第1のメモリ構造(SS1)または前記第2のメモリ構造(SS2)に書き込むように構成された、請求項3に記載の方法。
【請求項5】
前記第2のプログラム関数(F2)が、特に前記第1のプログラム関数(F1)の時間的に連続する呼出しに関して、前記データ構造(DS)に記憶されているデータを前記第1のメモリ構造(SS1)および前記第2のメモリ構造(SS2)から交互に読み出すように構成された、請求項1から4のいずれか一項に記載の方法。
【請求項6】
前記第1のカウンタ(C1)が前記第1のメモリ構造(SS1)に割り当てられ、
第2のカウンタ(C2)が提供され、前記第2のカウンタ(C2)が前記第2のメモリ構造(SS2)に割り当てられ、
前記第1のプログラム関数(F1)が、前記第1のメモリ構造(SS1)への書込みアクセス時に前記第1のカウンタ(C1)を増加させ、前記第2のメモリ構造(SS2)への書込みアクセス時に前記第2のカウンタ(C2)を増加させるように構成された、請求項3または4に記載の方法。
【請求項7】
前記比較により前記第1のカウンタ値が前記第2のカウンタ値と異なることが示されたとき、a)前記データの前記読出し中に、読み出された前記メモリ構造(SS1、SS2)にデータが改めて書き込まれたことを推定すること、および、b)前記決定されたメモリ構造からの前記データの新たな読出しのうちの少なくとも1つの要素が実行される、請求項1から6のいずれか1項に記載の方法。
【請求項8】
前記データ構造(DS)が、
a)前記第1のプログラム関数(F1)に渡された前記対象データ(VD1、VD2)が前記2つのメモリ構造(SS1、SS2)のうちのいずれに書き込まれるべきかを示す書込みポインタ(WRPTR)、および、
b)特に第2のプログラム関数(F2)によって、前記2つのメモリ構造(SS1、SS2)のうちのいずれからデータが読み出されるべきかを示す読出しポインタ(RDPTR)、のうちの少なくとも1つの要素を含む、請求項1からの少なくともいずれか一項に記載の方法。
【請求項9】
前記データ構造(DS)が前記書込みポインタ(WRPTR)および前記読出しポインタ(RDPTR)を含み、特に前記メモリ構造(SS1、SS2)への前記対象データ(VD1、VD2)の書込みの実行後に、前記第1のプログラム関数(F1)が、前記書込みポインタ(WRPTR)の値と前記読出しポインタ(RDPTR)の値とを互いに交換する、請求項に記載の方法。
【請求項10】
請求項1からの少なくともいずれか一項に記載の方法を実施するように構成された装置(300)。
【請求項11】
コンピュータプログラムであって、コンピュータによって実行されると、請求項1から9のいずれか一項による方法を前記コンピュータに実施させる命令を含むコンピュータプログラム。
【請求項12】
特にコンピュータプログラム(PRG)の形態での命令を含むコンピュータ可読記憶媒体(SM)であって、前記命令が、コンピュータによって実行されると、請求項1から9のいずれか一項に記載の方法を前記コンピュータに実施させる、コンピュータ可読記憶媒体(SM)。
【発明の詳細な説明】
【技術分野】
【0001】
本開示は、データを処理するための方法に関する。
【0002】
さらに、本開示は、データを処理するための装置に関する。
【発明の概要】
【0003】
好ましい実施形態は、データを処理するための方法に関し、この方法は、第1のデータを少なくとも一時記憶するための第1のメモリ構造および第2のデータを少なくとも一時記憶するための第2のメモリ構造を含むデータ構造を提供するステップと、第1のプログラム関数を提供するステップとを備え、第1のプログラム関数が、対象データを受け付けてデータ構造に記憶するように構成され、第1のプログラム関数がさらに、第1のプログラム関数に時間的に連続して渡された対象データを第1のメモリ構造と第2のメモリ構造とに交互に記憶するように構成される。これにより、有利には、読出しアクセスと書込みアクセスとに関する別々のメモリ構造が提供され、したがって書込みアクセスは、読み出されるデータの一貫性に影響を及ぼすことなく、1つまたは複数の読出しアクセスと並列にまたは重複して行うことができることが保証される。
【0004】
さらなる好ましい実施形態では、記憶すべき対象データの受信または転送は、第1のプログラム関数が呼び出されたときに引数またはパラメータとして対象データ(または対象データへのポインタ)を転送することによって実現することができる。
【0005】
さらなる好ましい実施形態では、第1のプログラム関数が、データ構造に割り当てられた状態変数の少なくとも1つを使用して、第1のメモリ構造および/または第2のメモリ構造への書込みアクセスの開始もしくは実施を決定するように、および/または少なくとも一時記憶を実行するように構成されることが提供される。
【0006】
さらなる好ましい実施形態では、第1のプログラム関数が、状態変数として第1のカウンタを使用して、データ構造および/または第1および/または第2のメモリ構造への書込みアクセスの回数を決定する、および/または少なくとも一時記憶を実行するように構成されることが提供される。
【0007】
さらなる好ましい実施形態では、第1のプログラム関数が、データ構造に割り当てられた第1またはさらなる状態変数の内容に応じて、第1のプログラム関数に渡された対象データを第1のメモリ構造または第2のメモリ構造に書き込むように構成されることが提供される。
【0008】
さらなる好ましい実施形態では、第1のプログラム関数が第1のカウンタに応じて、a)第1のプログラム関数に渡された対象データが、第1のメモリ構造に書き込まれるか第2のメモリ構造に書き込まれるかを決定するように、および/または、b)第1のプログラム関数に渡された対象データを第1のメモリ構造または第2のメモリ構造に書き込むように構成されることが提供される。
【0009】
さらなる好ましい実施形態では、方法が、データ構造に記憶されたデータの読出しおよび/または出力を行うように構成された第2のプログラム関数を提供するステップをさらに含むことが提供される。
【0010】
さらなる好ましい実施形態では、第2のプログラム関数が、特に第1のプログラム関数の時間的に連続する呼出しに関して、データ構造に記憶されているデータを第1のメモリ構造および第2のメモリ構造から交互に読み出すように構成されることが提供される。それにより、有利には、さらなる好ましい実施形態によれば、データ構造への読出しアクセスを書込みアクセスに適合させることができる。
【0011】
さらなる好ましい実施形態では、第2のプログラム関数が、各場合に、第1のプログラム関数によって最後に完全に書き込まれたメモリ構造(または2つのメモリ構造の一方)から、データ構造に記憶されているデータを読み出すように構成されることが提供される。
【0012】
さらなる好ましい実施形態では、第1のカウンタが第1のメモリ構造に割り当てられ、第2のカウンタが提供され、第2のカウンタが第2のメモリ構造に割り当てられ、第1のプログラム関数が、第1のメモリ構造への書込みアクセス時に第1のカウンタを増加させ、第2のメモリ構造への書込みアクセス時に第2のカウンタを増加させるように構成されることが提供される。
【0013】
さらなる好ましい実施形態では、第2のプログラム関数が、a)データの読出し前に、2つのメモリ構造のうちのいずれからデータが読み出されるべきかを決定し、b)データの読出し前に、割り当てられたメモリ構造からデータが読み出されるべきカウンタの第1のカウンタ値を決定し、c)データの読出し後、割り当てられたメモリ構造からデータがこの時点で読み出されるべきカウンタの第2のカウンタ値を決定し、d)第1のカウンタ値を第2のカウンタ値と比較するように構成されることが提供される。これにより、有利には、例えば関連のメモリ構造からのデータの読出し中、例えばデータの読出しに少なくとも部分的に重複する関連のメモリ構造への書込みアクセスにより、場合によってはデータ内容が変更された、またはより新しいデータが関連のメモリ構造に書き込まれたかどうかを判断することができる。
【0014】
さらなる好ましい実施形態では、比較により第1のカウンタ値が第2のカウンタ値と異なることが示されたとき、a)データの読出し中に、読み出されたメモリ構造にデータが改めて書き込まれたことを推定すること、および、b)特に請求項8に記載の決定されたメモリ構造からの(すなわち、そこから読み出されるべきであると決定されたメモリ構造からの)データの新たな読出しのうちの少なくとも1つの要素が実行されるように提供される。要素b)によって、特にデータの読出しと少なくとも部分的に重複するメモリ構造への書込みアクセス時にも、常に最新のデータをメモリ構造から読み出すことを保証することができる。
【0015】
さらなる好ましい実施形態では、データ構造が、a)第1のプログラム関数に渡された対象データが2つのメモリ構造のうちのいずれに書き込まれるべきかを示す書込みポインタ、および、b)特に第2のプログラム関数によって、2つのメモリ構造のうちのいずれからデータが読み出されるべきかを示す読出しポインタ、のうちの少なくとも1つの要素をさらに備えることが提供される。
【0016】
さらなる好ましい実施形態では、データ構造が書込みポインタおよび読出しポインタを含み、特にデータの書込みの実施後に、第1のプログラム関数が、書込みポインタの値と読出しポインタの値とを互いに交換することが提供される。それにより、2つのメモリ構造の交互の書込みを特に効率的に行うことができる。さらに、これにより、同様に、データが読み出されるべきメモリ構造を非常に効率的に定めることもできる。
【0017】
さらなる好ましい実施形態では、第1のプログラム関数が、以下の要素のうちの少なくとも1つを受け付けように構成されることが提供される。a)データ構造および/またはデータ構造の記憶場所を特徴付ける第1の変数、特にデータ構造へのポインタ、b)対象データおよび/または対象データの記憶場所を特徴付ける第2の変数、特に対象データへのポインタ、c)対象データの量および/またはサイズを特徴付ける第3の変数。さらなる好ましい実施形態では、第1の変数によって、第1のプログラム関数は、それ自体またはそのメモリ構造にデータが記憶されるべきデータ構造を決定することができ、これは、データ構造またはデータ構造のインスタンスが複数ある場合に特に有用である。
【0018】
さらなる好ましい実施形態では、第2のプログラム関数が、以下の要素のうちの少なくとも1つを受け付けように構成されることが提供される。a)データ構造および/またはデータ構造の記憶場所を特徴付ける第4の変数、特にデータ構造へのポインタ、b)読み出すべきデータを少なくとも一時記憶するためのターゲット記憶場所を特徴付ける第5の変数、特に対象データへのポインタ、c)対象データの量および/またはサイズを特徴付ける第3の変数。さらなる好ましい実施形態では、第4の変数によって、第2のプログラム関数は、それ自体またはそのメモリ構造からデータが読み出されるべきデータ構造を決定することができ、これは、データ構造またはデータ構造のインスタンスが複数ある場合に特に有用である。
【0019】
さらなる好ましい実施形態は、データを処理するための装置であって、第1のデータを少なくとも一時記憶するための第1のメモリ構造および第2のデータを少なくとも一時記憶するための第2のメモリ構造を含むデータ構造を提供するステップと、第1のプログラム関数を提供するステップとを実施するように構成され、第1のプログラム関数が、対象データを受け付けてデータ構造に記憶するように構成され、第1のプログラム関数がさらに、第1のプログラム関数に時間的に連続して渡された対象データを第1のメモリ構造と第2のメモリ構造とに交互に記憶するように構成された、第1のプログラム関数を提供するステップを実施するための装置に関する。
【0020】
さらなる好ましい実施形態では、実施形態に従う方法を実施するための装置が構成されることが提供される。
【0021】
さらなる好ましい実施形態は、コンピュータプログラムがコンピュータによって実行されると、実施形態による方法をコンピュータに実施させる命令を含むコンピュータプログラム製品に関する。
【0022】
さらなる好ましい実施形態は、コンピュータにより実行されると、実施形態による方法をコンピュータに実施させる、特にコンピュータプログラムの形での命令を含むコンピュータ可読メモリ媒体に関する。
【0023】
さらなる好ましい実施形態は、実施形態によるコンピュータプログラム製品を特徴付けるおよび/または伝送するデータキャリア信号に関する。さらなる好ましい実施形態では、データキャリア信号は、例えば、第1のユニットから第2のユニットへの、例えばサーバコンピュータから、実施形態によるコンピュータプログラムを実行することができるクライアントコンピュータへの、実施形態によるコンピュータプログラム製品またはコンピュータプログラムの伝送に使用することができる。伝送は、例えば、データネットワーク、特にインターネットなどのプライベートおよび/またはパブリックコンピュータネットワークを介した実施形態によるコンピュータプログラムのダウンロードを含むことができ、データキャリア信号は、例えば複数のデータパケットを含むことができる。さらなる好ましい実施形態では、伝送は、例えば少なくとも部分的に(セルラ)モバイルネットワークを介して、例えば4Gまたは5G標準に従って行うこともできる。
【0024】
さらなる好ましい実施形態は、a)計算デバイスの複数の異なる計算コア、および/または、b)コンピュータプログラムの複数のタスクの間でデータを交換するための、実施形態による方法および/または実施形態による装置および/または実施形態によるコンピュータプログラム製品の使用に関する。
【0025】
本発明のさらなる特徴、利用可能性、および利点は、図面の図に示されている本発明の例示的実施形態の以下の説明から明らかになる。ここで、説明または図示されているすべての特徴は、特許請求項またはその従属先請求項での要約に関係なく、また本明細書または図面でのそれらの用語または表現にも関係なく、個別にまたは任意の組合せで本発明の主題を成す。
【図面の簡単な説明】
【0026】
図1】好ましい実施形態による方法の概略的な簡略フローチャートである。
図2A】第1の動作状態におけるさらなる好ましい実施形態によるデータ構造の概略的なブロック図である。
図2B】第2の動作状態における図2Aによるデータ構造の概略的なブロック図である。
図3】さらなる好ましい実施形態による装置の概略的な簡略ブロック図である。
図4A】さらなる好ましい実施形態による記憶媒体を概略的に示す図である。
図4B】さらなる好ましい実施形態によるコンピュータプログラムを概略的に示す図である。
図5A】好ましい実施形態による方法の概略的な簡略フローチャートである。
図5B】さらなる好ましい実施形態による方法の概略的な簡略フローチャートである。
図5C】さらなる好ましい実施形態による方法の概略的な簡略フローチャートである。
図5D】さらなる好ましい実施形態による方法の概略的な簡略フローチャートである。
図5E】さらなる好ましい実施形態による方法の概略的な簡略フローチャートである。
図6】さらなる好ましい実施形態による概略的なタイミング図である。
【発明を実施するための形態】
【0027】
好ましい実施形態は、データを処理するための方法に関し、この方法を、図1による簡略フローチャートを参照して以下に述べる。この方法で使用可能なデータ構造DSが、それぞれ異なる動作状態で図2Aおよび図2Bに概略的に示されている。
【0028】
さらなる好ましい実施形態では、この方法は、例えばコンピュータ実装方法として実現可能であり、第1のデータを少なくとも一時記憶するための第1のメモリ構造SS1および第2のデータを少なくとも一時記憶するための第2のメモリ構造SS2を含むデータ構造DSを提供するステップ200と、第1のプログラム関数F1を提供するステップ210(図1)とを含み、第1のプログラム関数F1が、対象データを受け付けてデータ構造DSに記憶するように構成され、第1のプログラム関数F1がさらに、第1のプログラム関数F1に時間的に連続して渡された対象データVD1、VD2を第1のメモリ構造SS1と第2のメモリ構造SS2とに交互に記憶するように構成される。これにより、有利には、第1のデータと第2のデータとの確実な分離が保証され、いつでも、書込みアクセス(第1のプログラム関数F1による)を、特に1つまたは複数の読出しアクセス(例えば、任意選択のさらなるプログラム関数によって実現可能)と並列にまたは重複して、データ構造DSに対して実行することができる。
【0029】
これに関し、図2Aは、データ構造DSの第1の状態を概略的に示す。この第1の状態は、2つのメモリ構造SS1、SS2がヌルに設定されている初期化状態(図示せず)から始めて、第1のプログラム関数F1による2つの記憶プロセスの後である。例えばパラメータの形式で第1のプログラム関数F1に転送することができる対象データが第1のプログラム関数F1によって最初に記憶された後、これらの対象データは、第1のメモリ構造SS1に第1の対象データVD1として記憶される。第1のプログラム関数F1による後続の第2の記憶プロセスのために、第2の記憶プロセスに関する対象データが第2のメモリ構造SS2に記憶される。この状態が図2Aに示されている。その後、第1のプログラム関数F1による第3の記憶プロセスが行われる限り、この第3の記憶プロセスのために、第3の記憶プロセスに関する対象データVD3が第1のメモリ構造SS1に再び書き込まれる、すなわち、第1の記憶プロセス以来第1のメモリ構造SS1に記憶されている第1の対象データVD1が上書きされる。第2のメモリ構造SS2は、引き続き第2の対象データを含む。この状態は図2Bに示されている。
【0030】
図5Aは、さらなる好ましい実施形態による簡略フローチャートを概略的に示す。ステップ230で、第1のプログラム関数F1によって、第1の対象データVD1がデータ構造DSの第1のメモリ構造SS1に記憶され、後続のステップ232で、第1のプログラム関数F1によって、第2の対象データVD2がデータ構造DSの第2のメモリ構造SS2に記憶され、後続のステップ234で、第1のプログラム関数F1によって、第3の対象データVD3が、再びデータ構造DSの第1のメモリ構造SS1に記憶される(図2B)。
【0031】
さらなる好ましい実施形態では、第1のプログラム関数F1が、第1のカウンタC1を使用して、データ構造DSおよび/または第1および/または第2のメモリ構造SS1、SS2への書込みアクセスの回数を決定するように、および/または少なくとも一時記憶を実行するように構成されることが提供される。これにより、例えば第1のプログラム関数F1がデータ構造DSへの対象データの新規記憶のために呼び出されたときに、どのメモリ構造SS1、SS2に対象データを記憶すべきかを効率的に決定することができる。さらなる好ましい実施形態では、例えば、第1のカウンタC1が偶数(ゼロを含む)を有するときに対象データを第1のメモリ構造SS1に記憶し、第1のカウンタC1が奇数を有するときに対象データを第2のメモリ構造SS2に記憶するように提供することができる。
【0032】
言い換えると、さらなる好ましい実施形態では、第1のプログラム関数F1が、第1のカウンタC1に応じて、a)第1のプログラム関数F1に渡された対象データが第1のメモリ構造SS1に書き込まれるべきか、第2のメモリ構造に書き込まれるべきかを決定するように、および/または、b)第1のプログラム関数F1に渡された対象データを第1のメモリ構造SS1または第2のメモリ構造SS2に書き込むように構成されることが提供される。
【0033】
図5Bは、さらなる好ましい実施形態による簡略フローチャートを概略的に示す。ステップ240で、2つのメモリ構造SS1、SS2のうちのいずれに対象データが記憶されるべきかを決定するために第1のカウンタC1が評価され、ステップ242で、ステップ240に従って決定されたメモリ構造に対象データが記憶される。
【0034】
さらなる好ましい実施形態では、方法が、データ構造DSに記憶されているデータの読出しおよび/または出力を行うように構成された第2のプログラム関数F2を提供するステップ220(図1参照)をさらに含むことが提供される。
【0035】
さらなる好ましい実施形態では、第2のプログラム関数F2が、特に第1のプログラム関数F1の時間的に連続する呼出しに関して、データ構造DSに記憶されているデータを第1のメモリ構造SS1および第2のメモリ構造SS2から交互に読み出すように構成されることが提供される。それにより、有利には、さらなる好ましい実施形態によれば、データ構造への読出しアクセスを書込みアクセスに適合させることができる。特に、それにより、第2のプログラム関数F2による読出し時、常に「最新の」データ、すなわち第1のプログラム関数F1によって最後にデータ構造DSまたはそのメモリ構造SS1、SS2に書き込まれたデータが読み出されることを実現することができる。したがって、図2Aによるデータ構造DSの第1の状態から始めて、第2のプログラム関数F2による読出し時、第2の対象データVD2が第2のメモリ構造SS2から読み出され、一方では、図2Bによるデータ構造DSの第2の状態から始めて、第2のプログラム関数F2による読出し時、第3の対象データVD3が第1のメモリ構造SS1から読み出される。それらのデータがより新しいからである。
【0036】
図5Cは、さらなる好ましい実施形態による簡略フローチャートを概略的に示す。ステップ250で、例えば、図2Aによるデータ構造DSの第1の状態から始めて、データ構造DSに記憶されているデータが、第2のプログラム関数F2によって最初に読み出される。ここで、第2のメモリ構造SS2が現在最新のデータVD2を含んでいるので、この読出しは、第2のメモリ構造SS2から行われる。ステップ252で、データ構造DSに記憶されているデータVD2は、第2のプログラム関数F2によって改めて読み出される。それ以降、すなわちステップ250、252の間、データ構造DSでの第1のプログラム関数F1によるデータの記憶が行われていないので、ステップ252でも、第2のメモリ構造SS2からデータが読み出される。これらのデータが依然として「最新の」データであるからである。同様のことが、後続の読出しステップ254にも当てはまる。ステップ254の後、データ構造DSでの第1のプログラム関数F1によるデータの記憶が行われ、それにより、図2Bによる第2の状態に達する(ステップ254、256間の図5Cの矢印234も参照)。したがって、データ構造DSからデータを読み出すためのステップ256に従って第2のプログラム関数F2が再度実行されるとき、ここでは、データ構造DSから第3の対象データVD3が読み出される。記憶ステップ234後には、第3の対象データVD3が最新のデータだからである。
【0037】
さらなる好ましい実施形態では、第1のカウンタC1が第1のメモリ構造SS1(図2A)に割り当てられることが提供され、第2のカウンタC2が提供され、第2のカウンタC2は、第2のメモリ構造SS2に割り当てられ、ここで、第1のプログラム関数F1は、第1のメモリ構造SS1への書込みアクセス時に第1のカウンタC1を増加させ、第2のメモリ構造SS2への書込みアクセス時に第2のカウンタC2を増加させるように構成される。例として図5Dによるフローチャートに基づいてこれを示す。ステップ260で、データは、第1のプログラム関数F1によって第1のメモリ構造SS1に記憶され、第1のカウンタC1は、例えば値1だけ増分される。ステップ262で、データは、第1のプログラム関数F1によって第2のメモリ構造SS2に記憶され、第2のカウンタC2は、同様に例えば値1だけ増分される。
【0038】
さらなる好ましい実施形態(図5Eによるフローチャートも参照)では、第2のプログラム関数F2が、a)データの読出し前に、2つのメモリ構造SS1、SS2のうちのいずれからデータが読み出されるべきかを決定し(図5Eのステップ270を参照)、b)データの読出し前に、割り当てられたメモリ構造SS1、SS2からデータが読み出されるべきカウンタC1、C2の第1のカウンタ値を決定し(図5Eのステップ272を参照)、c)データの読出し(273)の後、割り当てられたメモリ構造SS1、SS2からデータがこの時点で読み出されるべきカウンタC1、C2の第2のカウンタ値を決定し(図5Eのステップ274を参照)、d)第1のカウンタ値を第2のカウンタ値と比較する(図5Eのステップ276を参照)ように構成されることが提供される。これにより、有利には、例えば関連のメモリ構造からのデータの読出し(273)中、場合によってはデータ内容が変更された、または例えば関連のメモリ構造への書込みアクセスによってより新しいデータが関連のメモリ構造に書き込まれたかどうかを判断することができる。これは、データの読出しと少なくとも部分的に重複する。
【0039】
さらなる好ましい実施形態では、比較(276)により第1のカウンタ値が第2のカウンタ値と異なることが示されたとき、a)データの読出し(273)中に、読み出されたメモリ構造にデータが改めて書き込まれたことの推定(277)、および、b)同じメモリ構造からのデータの新たな読出し(278)、という要素のうちの少なくとも1つが実行されることが提供される。要素b)の新たな読出し(278)によって、特にデータの読出し(273)と少なくとも部分的に重複するメモリ構造への書込みアクセス時にも、常に最新のデータをメモリ構造から読み出すことを保証することができる。
【0040】
さらなる好ましい実施形態では、データ構造が、a)第1のプログラム関数F1に渡された対象データが2つのメモリ構造SS1、SS2のうちのいずれに書き込まれるべきかを示す書込みポインタWRPTR(図2A)、および、b)特に第2のプログラム関数F2によって2つのメモリ構造SS1、SS2のうちのいずれからデータが読み出されるべきかを示す読出しポインタRDPTR、という要素のうちの少なくとも1つをさらに有することが提供される。
【0041】
さらなる好ましい実施形態では、データ構造が書込みポインタWRPTRおよび読出しポインタRDPTRを有し、第1のプログラム関数F1が書込みポインタWRPTRの値と読出しポインタRDPTRの値とを互いに交換することが提供される。それにより、2つのメモリ構造SS1、SS2の交互の書込みを特に効率的に行うことができる。さらに、これにより、同様に、データが読み出されるべきメモリ構造を非常に効率的に定めることもできる。
【0042】
さらなる好ましい実施形態では、第1のプログラム関数が、以下の要素のうちの少なくとも1つを受け付けるように構成されることが提供される。a)データ構造および/またはデータ構造の記憶場所を特徴付ける第1の変数、特にデータ構造へのポインタ、b)対象データおよび/または対象データの記憶場所を特徴付ける第2の変数、特に対象データへのポインタ、c)対象データの量および/またはサイズを特徴付ける第3の変数。さらなる好ましい実施形態では、第1の変数によって、第1のプログラム関数は、それ自体またはそのメモリ構造にデータが記憶されるべきデータ構造を決定することができ、これは、データ構造またはデータ構造のインスタンスが複数ある場合に特に有用である。
【0043】
さらなる好ましい実施形態では、第2のプログラム関数が、以下の要素のうちの少なくとも1つを受け付けるように構成されることが提供される。a)データ構造および/またはデータ構造の記憶場所を特徴付ける第4の変数、特にデータ構造へのポインタ、b)読み出すべきデータを少なくとも一時記憶するためのターゲット記憶場所を特徴付ける第5の変数、特に対象データへのポインタ、c)対象データの量および/またはサイズを特徴付ける第3の変数。さらなる好ましい実施形態では、第4の変数によって、第2のプログラム関数は、それ自体またはそのメモリ構造からデータが読み出されるべきデータ構造を決定することができ、これは、データ構造またはデータ構造のインスタンスが複数ある場合に特に有用である。
【0044】
さらなる好ましい実施形態は、データを処理するための装置300に関する。装置300は、実施形態による方法を実施するように構成される。
【0045】
図3は、装置300の簡略ブロック図を概略的に示す。デバイス300は、例えば1つまたは複数の計算コア302a、302b、302cを含み得る少なくとも1つの計算デバイス302と、コンピュータプログラムPRGを少なくとも一時記憶するために計算デバイス302に割り当てられた少なくとも1つのメモリデバイス304とを備え、コンピュータプログラムPRGは、特に装置300の動作を制御するようにおよび/または好ましい実施形態による方法を実施するように構成される。
【0046】
さらなる好ましい実施形態では、計算デバイス302は、マイクロプロセッサ、マイクロコントローラ、デジタル信号プロセッサ(DSP)、プログラマブルロジックモジュール(例えば、FPGA、フィールドプログラマブルゲートアレイ)、ASIC(特定用途向け集積回路)、ハードウェア回路のうちの少なくとも1つの要素を有する。さらなる好ましい実施形態では、これらの組合せも考えられる。
【0047】
さらなる好ましい実施形態では、メモリデバイス304は、揮発性メモリ304a、特にランダムアクセスメモリ(RAM)、不揮発性メモリ304b、特にフラッシュEEPROMのうちの少なくとも1つの要素を有する。コンピュータプログラムPRGは、好ましくは、不揮発性メモリ304bに保存される。
【0048】
さらなる好ましい実施形態では、少なくとも1つのさらなるコンピュータプログラムPRG2もメモリデバイス304に記憶することができる。さらなる好ましい実施形態では、コンピュータプログラムPRGは、図1図5Eを参照して例として上述したような実施形態による方法の機能を提供することができる。特に、さらなる好ましい実施形態では、PRGはまた、例えばメモリデバイスのメモリ領域に、および/またはライブラリなどの形態で第1および/または第2のプログラム関数F1、F2を提供することができ、ここで、第1および/または第2のプログラム関数F1、F2は、例えば、データ構造DS(図2A)にデータを記憶するためおよび/またはデータ構造DSからデータを読み出すために、少なくとも1つのさらなるコンピュータプログラムPRG2によって呼び出すことができる。
【0049】
計算デバイス302は、さらなる好ましい実施形態では「コンピュータ」とも呼ばれ、好ましい実施形態による方法は、すでに述べたように、特にコンピュータ実装方法としても実現可能であり、さらなる好ましい実施形態ではコンピュータ302によって実施可能である。
【0050】
さらなる好ましい実施形態は、コンピュータ302によるコンピュータプログラムPRGの実行時に、実施形態による方法をコンピュータ302に実施させる命令を含むコンピュータプログラム製品PRG(図4Aおよび図4B参照)に関する。
【0051】
さらなる好ましい実施形態は、コンピュータ302による実行時に、実施形態による方法をコンピュータ302に実施させる、特にコンピュータプログラム製品PRGの形での命令を含むコンピュータ可読メモリ媒体SM(図4A)に関する。記憶媒体SMは、例えば、ハードディスクメモリ(ハードディスク)、および/または半導体メモリ、例えばSSDおよび/または光メモリ(CD-ROM、DVDなど)、および/または他の好ましくはデジタルのコンピュータ可読メモリを含むことができる。
【0052】
さらなる好ましい実施形態は、実施形態によるコンピュータプログラム製品PRGを特徴付けるおよび/または伝送するデータキャリア信号に関する。さらなる好ましい実施形態では、データキャリア信号は、例えば、第1のユニットから第2のユニットへの(例えば図3の装置300への)、例えばサーバコンピュータから実施形態によるコンピュータプログラムPRGを実行することができるクライアントコンピュータ300への、実施形態によるコンピュータプログラム製品またはコンピュータプログラムPRGの伝送に使用することができる。伝送は、例えば、データネットワーク、特にインターネットなどのプライベートおよび/またはパブリックコンピュータネットワークを介した実施形態によるコンピュータプログラムのダウンロードを含むことができ、データキャリア信号は、例えば複数のデータパケットを含むことができる。さらなる好ましい実施形態では、伝送は、例えば少なくとも部分的に(セルラ)モバイルネットワークを介して、例えば4Gまたは5G標準に従って行うこともできる。
【0053】
さらなる好ましい実施形態は、a)計算デバイス302の複数の異なる計算コア302a、302b、302c、および/または、b)コンピュータプログラムPRG2の複数のタスクの間でデータを交換するための、実施形態による方法および/または実施形態による装置300および/または実施形態によるコンピュータプログラム製品PRGの使用に関する。
【0054】
さらなる有利な態様およびさらなる好ましい実施形態を以下に述べる。それらの態様および実施形態は、個別にまたは組み合わせて、例として上述した好ましい実施形態の1つまたは複数と併合可能である。
【0055】
さらなる好ましい実施形態では、実施形態による原理を使用して、コンピュータプログラムPRG2(図3)のタスク(例えば、送信側タスクおよび1つまたは複数の受信側タスク)間、および/または例えば複数の計算コア302a、302b、302cを含むマルチコアシステムとして構成された計算デバイスのタスクおよび/または計算コア302a、302b、302c間でデータ交換するための方法を提供することができ、このマルチコアシステムは、並列処理でもデータ一貫性とデータ整合性を保証し、および/または従来のシステムの欠点が回避もしくは少なくとも低減され、および/または、例えばマルチコアシステム300(図3)などのいくつかのターゲットシステムにおける特別な要件および条件に関して最適化されもしくは最適化可能であり、例えば自動車分野に関する制御装置に関して、例えばエアバッグシステム用の制御装置として使用可能である。
【0056】
好ましい実施形態によるデータ構造DS(図2A)およびプログラム関数F1、F2は、有利には、例えば装置300の異なるコンポーネント(例えば、タスクおよび/または計算コア)間の非同期通信を可能にし、「メッセージボックス」と呼ぶこともできる。したがって、メモリ構造SS1、SS2は、さらなる好ましい実施形態によれば、メッセージとも呼ぶことができ、またはそれぞれメッセージ(例えば、記憶するために提供される対象データ)を有するもしくは表すことができる。メッセージの「送信」は、例えば第1のプログラム関数F1によって行うことができ、メッセージの「受信」は、例えば第2のプログラム関数F2によって行うことができる。
【0057】
非同期に機能する方法として、さらなる好ましい実施形態による方法は、アクティブ待機、タスクの一時停止、またはデッドロックのリスクなどのミューテックス(Mutex)、セマフォ(Semaphore)、またはスピンロック(Spinlock)による従来のタスク同期の欠点を回避する。
【0058】
他の既知の方法と比較して、好ましい実施形態は以下の利点を有する。
- 送受信レート(データがデータ構造DSに記憶される、および/またはデータ構造DSから読み出されるレート)が変化する際のロバストな挙動。好ましくは、2つのストレージ構造SS1、SS2(図2A)に交互に書き込まれるので、設計上、問題となる「メッセージボックスが満杯」の状況は発生しない。メッセージSS1、SS2の最初の書込み後、「メッセージボックスが空」という特殊な状況は発生しなくなる(メッセージボックスDSが再初期化されない限り)。
- 2つのメッセージSS1、SS2が静的に定められるので、メッセージボックスに必要なメッセージ数に関する設計/構成は必要ない。
- 1:n(1:1も)の通信が可能であり、受信側タスクの数が変わるときに、特にメッセージボックス構成の変更も必要なく、好ましくは、それぞれ書込みインスタンスが存在する。
- 特に自動車アプリケーションでの使用に有用な「last is best(最後が最良)」セマンティクスの使用。好ましくは、メッセージ内のデータセットの最新の更新のみが保持され、古くなったデータセットを有するメッセージは、メッセージボックスから自動的に削除され、読み出される必要はない。
- この方法はメッセージボックスごとに2つのメッセージSS1、SS2のみを用いるため、メモリ要件が低い。
【0059】
さらなる好ましい実施形態では、例えば、ただ1つの送信側タスクおよび1~n個の多くの受信側タスク(n≧1)が存在する。
【0060】
さらなる好ましい実施形態では、特にメッセージボックスが初期化され、メッセージSS1が最初に書き込まれた後、メッセージは常に受信および読出しに利用可能であり、常に書込みおよび送信にも利用可能である。したがって、メッセージボックスが空になることも満杯になることもない。
【0061】
さらなる好ましい実施形態では、メッセージの送信を含む書込みは、第1のプログラム関数F1(図4B)に対応して、送信側タスクが実行する対応するメッセージボックス機能の呼出しによって実行される。さらなる好ましい実施形態では、この呼出しは、(例えばメッセージボックスが満杯になることによる)送信側タスクのアクティブ待機も一時停止(スリープ状態への移行)も生じない。第1のプログラム関数F1の呼出しが処理されると、次いで、このとき記憶されているデータVD1、VD2、VD3は、受信側タスクにより実施され得る受信のためにすぐに利用することができる。
【0062】
さらなる好ましい実施形態では、メッセージの読出しを含む受信は、第2のプログラム関数F2(図4B)に対応して、受信側タスクが実行する対応するメッセージボックス機能の呼出しによって実行される。さらなる好ましい実施形態では、この呼出しは、例えばメッセージボックスが空になることによる、受信側タスクのアクティブ待機も一時停止も生じない。呼出しが処理されると、受信側タスクは、読み出されたデータをローカルで使用できる。
【0063】
さらなる好ましい実施形態では、例えば、特にメールボックスまたはデータ構造DSの初期化の直後に、メールボックスまたはデータ構造への記憶が例えば第1のプログラム関数F1によってまだ行われていないとき、例えば第2のプログラム関数F2を使用した読出しは、ヌルのデータを生じる。
【0064】
さらなる好ましい実施形態では、メッセージボックス(データ構造DS)にアクセスする受信側タスクは、最後に送信されたメッセージを読出しのために準備される(「last is best」)。送信レートが受信レートよりも高い場合、これは、単に、送信されたすべてのメッセージが受信されるおよび読み出されるわけではないという結果をもたらす。さらなる好ましい実施形態では、「last is best」は、ほとんどの場合、制御装置でのタスク通信に十分である、または要求される。
【0065】
それに対応して、さらなる好ましい実施形態では、読出しのために準備されたメッセージは、書込みが行われた後に送信側タスクがメッセージボックス内のそれぞれ別のメッセージを送信した時点で「古く」なる。
【0066】
さらなる好ましい実施形態では、最後に古くなったメッセージは、このメッセージが読み出されたか否かに関係なく、送信側タスクの新たな書込みおよび送信のために利用可能にされる。
【0067】
さらなる好ましい実施形態では、メッセージボックスまたはデータ構造DSが満たされることはない。メッセージ(メモリ構造SS1、SS2)は、新たな書込みおよび送信のために常に利用可能である。
【0068】
以下、さらなる好ましい実施形態の態様をテーブルの形で列挙する。各テーブルは、プログラムコードの行を定めるゼロよりも大きい自然数を有する第1の(左側の)列と、少なくとも1つのさらなる(右側の)列とを有し、右側の列は、第1の列とはスペースで区切られており、プログラムコードまたはコメントを含む。テーブル1は、特に、値およびデータ型およびデータ構造の例示的な定義を含み、テーブル2は、プログラム関数の例示的な宣言を含み、テーブル3は、例として、データセットの設定を特徴付けるもの、テーブル4は、例として、特に初期化のためのメインプログラム関数を特徴付けるもの、テーブル5は、例として、データのコピーのための補助プログラム関数を特徴付けるもの、テーブル6は、例として、好ましい実施形態によるデータ構造の初期化のためのプログラム関数を特徴付けるもの、テーブル7は、例として、データの読出しのためのプログラム関数を特徴付けるもの、テーブル8は、例として、データの書込みおよび送信のためのプログラム関数を特徴付けるもの、テーブル9は、例として、データの送信のためのプログラム関数を特徴付けるるものである。
【0069】
これらのテーブルは、例えばパーソナルコンピュータ上でのソフトウェア開発のためのオープンソースプログラミングツールと共に使用可能である、さらなる好ましい実施形態の例示的実装形態を示す。
【0070】
関連のプログラム関数の詳細な説明については、テーブルの後に記載する。
【0071】
【表1】
【0072】
【表2】
【0073】
【表3】
【0074】
【表4】
【0075】
【表5】
【0076】
【表6】
【0077】
【表7】
【0078】
【表8】
【0079】
【表9】
【0080】
【表10】
【0081】
【表11】
【0082】
以下、さらなる好ましい実施形態による、テーブルの形で上に列挙されたプログラム関数について詳細に述べる。
【0083】
40行目(テーブル4)のmain関数は、例としてテストのために提案されており、テーブル1~テーブル9の関数を呼び出すアプリケーション(例えば、コンピュータプログラムPRG2、図3)の役割を表す。さらなる好ましい実施形態では、テーブル1~テーブル9の関数またはプログラム関数F1、F2は、API(Application Programming Interface、プログラミングインターフェース)の形でも提供され得る。
【0084】
メッセージボックスに必要なデータ型は、6~18行目に定義されている。メッセージは、8~11行目でTmsg型のデータ構造として定義され、要素として、任意の構造および長さのデータセットへのポインタ「datPtr」(したがって、単にcharへのポインタとして取り決められる。6行目のTdat型の定義を参照)と、メッセージが新たに書き込まれるたびに増加される、いわゆる更新カウンタ「updCtr」とを含む。
【0085】
13~18行目では、実際のメッセージボックスに関するデータ型Tmboxが定義される。したがって、メッセージボックスは、タイプTmsgの要素msg1およびmsg2、すなわち2つのメッセージと、読出し操作に使用されるメッセージへのポインタである要素「rdPtr」および書込み操作に使用されるメッセージへのポインタである要素「wrPtr」とからなる。
【0086】
したがって、さらなる好ましい実施形態では、図2Aによるデータ構造DSは、テーブル1の18行目からのプログラムコード構造Tmboxに少なくともほぼ対応し、メモリ構造SS1、SS2は、16、17行目からの構造msg1、msg2に少なくともほぼ対応し、9行目からの整数変数updCtrは、カウンタC1、C2に少なくともほぼ対応する。
【0087】
各メッセージボックスに必要な2つのデータセット(メッセージごとに1つ)を含む、アプリケーションPRG2に必要なメッセージボックスの定義が、アプリケーションPRG2の問題である。このために、この定義は、提供されたデータ型Tmboxを使用し、任意選択で間接的にデータ型TmsgおよびTdatも使用する。
【0088】
API関数initMbox(テーブル6、115~127行目)は、メッセージボックスを初期化するために使用される。このために、この関数は、引数として、メッセージボックスのアドレス(引数p)、2つのデータセットのアドレス(引数dPtrlおよびdPtr2)、およびデータセットのサイズ(引数size)を受け付ける。2つのポインタ要素wrPtrおよびrdPtrは、メッセージボックス要素msg1およびmsg2のアドレスを書き込まれることによって初期化される。要素msg1とmsg2はそれぞれ初期化される。カウンタmsg1.updCtrおよびmsg2.updCtrがヌルに設定され、ポインタmsgl.datPtrおよびmsg2.datPtrが2つのデータセット(dPtrlおよびdPtr2)のアドレスを書き込まれる。最後に、123行目のforループを用いて、これら2つのデータセットはヌルを書き込まれる。
【0089】
API関数readMsgMbox(テーブル7、129~144行目)は、メッセージボックスから、呼出し元のアプリケーションが提供するメモリ領域にメッセージのデータを読み出すために使用される。したがって、この関数は、さらなる好ましい実施形態によれば、第2のプログラム関数F2(図4B)に少なくともほぼ対応する。
【0090】
関数readMsgMboxは、引数として、メッセージボックスのアドレス(引数p)、メッセージのデータがコピーされるべきメモリ領域へのポインタ(引数datPtr)、およびコピーすべきデータセットのサイズ(引数size)を渡される。135~137行目では、まず、読出しポインタrdPtr(これは、メッセージボックスでの読出しに使用されるメッセージを示す)と、読み出すべきメッセージの更新カウンタupdCtrの内容およびアドレスとがローカルに一時記憶される。次に、コピールーチンcopyによって、メッセージデータは、アプリケーションのメモリ領域にコピーされる。最後に、143行目で、場合によってはメッセージの読出し中、メッセージが書込み用に解放されただけでなく使用もされたかどうかがチェックされる。このために、メッセージの更新カウンタの現在の値が、読出し前に一時記憶されていた値と比較される。変わっていない場合、読み出されたデータは有効である。その間にメッセージが変更されていた場合、メッセージは書込みに使用されたか、または使用されており、含まれているデータはもはや有効でないまたは一貫性がない場合がある。この場合、好ましくは、135~142行目の指示を繰り返すことができる。これは、134行目で始まり143行目で終わるdo-whileループで実現される。特に、この反復時、読出しポインタがメッセージボックスから新たに読み出され、それにより最新の状態になる。その後(再び)、読出しポインタは、読出しのために現在解放されているメッセージを示し、書込みのために解放または使用されているメッセージを示さない。メッセージを反復して読み出した後、好ましくは、更新カウンタ値のチェックも新たに実行することができる。
【0091】
API関数writeSendMsgMbox(146~158行目)は、メッセージボックスからのメッセージの書込みおよび送信のために使用される。したがって、API関数は、さらなる好ましい実施形態によれば、第1のプログラム関数F1(図4B)に少なくともほぼ対応する。このために、関数writeSendMsgMboxは、引数として、メッセージボックスのアドレス(引数p)、送信すべきデータセットのアドレス(引数datPtr)、およびこのデータセットのサイズ(引数size)を渡される。まず149行目で、書込みのために現在解放されているメッセージへの書込みポインタがローカルに一時記憶され、次に150行目で、このメッセージに関する更新カウンタが増分される。これは、このメッセージが読出しにはもう使用されないこと、および場合によってはすでに読み出されたデータを破棄すべきであることを通知する(API関数readMsgMboxに関する上記の説明を参照)。
【0092】
使用されるターゲットシステムおよび/またはコンパイラに応じて、任意選択でメモリバリア(英語で「フェンス」とも呼ばれる)の挿入を提供することができる(152行目のコメント参照)。これにより、コンパイラは、このバリアを越えて読出しおよび書込み指示の並べ替えを行わないように指示される。これは、更新カウンタの増分がいずれにせよメッセージの書込み前に行われることを保証し、この場合、コンパイラ最適化は、好ましくは何も変更してはならない。
【0093】
153行目で、コピールーチンcopyを用いて、書き込むべきデータセットがメッセージにコピーされる。ここで、156および157行目は、メッセージの送信に対応する操作を含む。すなわち、メッセージボックスの読出しポインタと書込みポインタとの内容が交換(「スワップ」)される。これにより、新たに書き込まれたメッセージが読出しのために解放され、以前に読出しのために準備されていたメッセージが、新たな書込みのために解放され、それにより読出しアクセスをされなくなる。API関数getWrMsgMbox(160~164行目)とsendMsgMbox(166行目以降)との使用は、「メッセージの書込み」と「書き込まれたメッセージの送信」のプロセスを互いに別々に独立して実施し、ここで、送信すべきメッセージに直接書き込むことができるアプリケーションを使用可能にする。これらは、writeSend-MsgMbox関数の代替として使用することができる。
【0094】
関数getWrMsgMboxは、引数としてメッセージボックスのアドレスを受け付ける。最初に、この関数は、書込み用に現在解放されているメッセージの更新カウンタを増分し、このメッセージがここでは書込みのために使用されることを通知する。次いで、この関数は、書き込むべきデータセットへのポインタを返す。呼出し元のアプリケーションは、このポインタによって、メッセージのデータセットに直接書き込むことができる。
【0095】
関数sendMsgMboxは、そのようにして書き込まれたメッセージを送信する、すなわち読出しのために解放するために使用される。sendMsgMboxは、引数として同様にメッセージボックスのアドレスを受け付ける。送信は、上述したようにメッセージボックスの読出しポインタと書込みポインタとの内容を交換することによって再び行われる(171および172行目)。
【0096】
テーブル1~テーブル9を参照して例として上述した例示的実装形態は、さらなる好ましい実施形態を説明するためのものであり、特に限定として解釈すべきではない。
【0097】
さらなる好ましい実施形態では、上述したようにポインタが使用される前に、上述したポインタの1つまたは複数をヌル値についてチェックすることを提供することができる。
【0098】
さらなる好ましい実施形態では、バイトごとにコピーする代わりに、copy関数は、例えばC++プログラミング言語によるmemcpy()関数の様式で、ブロックごとのコピーを提供することができる。
【0099】
さらなる好ましい実施形態では、関数writeSendMsgMboxおよび/またはreadMsgMboxは、渡されたパラメータ「size」を有効な値範囲についてチェックし、特に例えば記憶すべきデータ(*datPtr、10行目を参照)に関する最大メモリサイズを特徴付ける所定の最大値を上回ったかどうかについてチェックすることを提供することもできる。
【0100】
図6は、さらなる好ましい実施形態によるタイミング図を概略的に示す。アプリケーションPRG2(図3)の第1のタスクT1が示されており、このアプリケーションは、例えばエアバッグ制御デバイスの機能ソフトウェアを表し、機能ソフトウェアは、マルチコアシステム300(図3)上で実行可能であり、複数のタスクT1、T2、T3間の非同期データ通信を含み、この非同期データ通信は、実施形態による原理を使用して、データ構造DS(図2A)(「メッセージボックス」とも呼ばれる)と、プログラム関数F1(記憶または送信)、F2(読出しまたはロードまたは受信)とによって可能である。
【0101】
第1のタスクT1は、第1のプログラム関数F1(図4B)によって、データをデータ構造DSに定期的に記憶する。これは、以下では、メッセージボックスDSへのデータの送信とも呼ばれる。メッセージボックスDSへのデータの送信は、例えば、第1の時間範囲t_1内で行われ、矢印a1は送信の開始(すなわち第1のプログラム関数F1の呼出し)を示し、矢印a2は送信の終了(すなわち第1のプログラム関数F1の終了)を示す。時間範囲t_4、t_7、t_10で、さらなる送信プロセスが行われる(矢印a3、a4、a5、a6;a7、a8も参照)。ここで、第1のメモリ構造SS1(「第1のメッセージMSG1」に対応する)と第2のメモリ構造SS2(「第2のメッセージMSG2」に対応する)とにおいて送信または記憶が交互に行われる。時間範囲t_1、t_4、t_7、t_10中、さらなる好ましい実施形態では、関連する書き込まれたメッセージまたは対応するメモリ構造は、好ましくは読出し目的でアクセスされない。
【0102】
さらなる好ましい実施形態では、これは、上述した、読出しおよび書込みポインタRDPTR、WRPTRの内容の交換によって行うことができる。
【0103】
時間範囲t_2、t_6中、第2のタスクT2は、第2のプログラム関数F2によって読出し目的でメッセージボックスDSにアクセスし、時間範囲t_2では第1のメッセージMSG1(メモリ構造SS1)が読み出され、時間範囲t_6では第2のメッセージMSG2(メモリ構造SS2)が読み出される。読出しの開始と終了は、それぞれ矢印a9、a10、a13、a14で示されている。
【0104】
時間範囲t_4、t_6(矢印a11、a12)、t_6、t_10、t_11(矢印a15、a16、a17、a18)中、第3のタスクT3は、第2のプログラム関数F2によって読出し目的でメッセージボックスDSにアクセスし、時間範囲t_2、t_6では第1のメッセージMSG1(メモリ構造SS1)が読み出され、時間範囲t_6、t_10、t_11では第2のメッセージMSG2(メモリ構造SS2)が読み出される。ここで、読出しアクセスの終了a12は時間範囲t_5内にあり、時間範囲t_5では、矢印a4での前の記憶プロセスが完了しているので、基本的には第1のメッセージを再び書込み可能である。それにもかかわらず、時間範囲t_5内のデータは、第1のタスクT1による第1のメッセージMSG1の新たな書込み(矢印a5を参照)まで、第1のメッセージMSG1から読出し可能である。
【0105】
対照的に、矢印a15、a16の間の第3のタスクT3による読出し期間Dは長過ぎる(稲妻の記号参照)。なぜなら、読出しの完了a16の前に、すでに第1のタスクT1が第2のメッセージMSG2にデータを再び書き込んでいるからである(矢印a7参照)。さらなる好ましい実施形態では、これは、図5Eによるシーケンス(または例えばテーブル7のプログラムコードの144行目)によって認識することができる。したがって、さらなる好ましい実施形態では、その後、ここでは第1のメッセージMSG1に対する読出しプロセス(図5Eのステップ278)が新たに実行される(矢印a17、a18を参照)。
【0106】
時間範囲t_3は、第2のメッセージMSG2を書き込むことができる(「書込み準備完了」)時間範囲を表し、時間範囲t_8も同様である。時間範囲t_11は、第1のメッセージMSG1を書き込むことができる(「書込み準備完了」)時間範囲を表す。これらの時間範囲t_3(MSG2)、t_8(MSG2)、t_11(MSG1)中の読出しも可能である。時間範囲t_9は、第1のメッセージMSG1を読み出すことができる時間範囲を表す。
【0107】
好ましい実施形態による原理は、コンピュータの異なるタスクおよび/または計算コア間の、特にメモリ効率が高く、簡単だが、柔軟な非同期通信を可能にする。
【0108】
さらなる好ましい実施形態によるさらなる有利な態様を以下に述べる。
【0109】
TLがメッセージボックスへの読出しアクセスの期間であり、DSminがメッセージボックスへの2つの書込みプロセス間の(例えばシステム構成によって保証される)最小の時間間隔(書込みの終了から次の書込みの開始まで)である場合、さらなる好ましい実施形態による方法は、読出しアクセスの期間にわたってTL<DSminが有効である限り、各読出しアクセスが、それが実行される時点に関係なく、書込みアクセスによって常に「妨害されない」ことを可能にするまたは保証することができる。「妨害されない」とは、さらなる好ましい実施形態によれば、読み出されるデータが一貫していて最新であることを意味するだけでなく、特にタイミングに影響が及ぼされないことも意味する。すなわち、さらなる好ましい実施形態によれば、読出しプロセスは、同時に行われる書込みプロセスの完了を待つ必要がない。したがって、マルチコアシステムでは、さらなる好ましい実施形態によれば、例えばコア(計算コア)はメッセージボックスに書き込むことができ、その書込みと同時にかつ書込みに妨害されずに、1つまたは複数の他のコアがメッセージボックスから読み出しを行う。
【0110】
さらなる好ましい実施形態では、システム設計は、TL<DSminが好ましくは常に保たれることを保証することができる。読出しプロセスにかかる時間がより長い場合(TL≧DSmin、例えばシステムの過負荷による)、ここで読み出されるバッファへの並列書込みアクセスが行われることがある。しかし、さらなる好ましい実施形態では、読出し機能はこの状況を認識し、現在有効な読出しバッファへの変更と共に、メッセージボックスからの新たな読出しを開始する。それにより、この場合にも、読み出されるデータの一貫性が保証されるが、タイミングへの影響がある。すなわち、読出しアクセスが延長される。
図1
図2A
図2B
図3
図4A
図4B
図5A
図5B
図5C
図5D
図5E
図6