囜内のマルチクレットプロセッサはありたすか

この投皿では、ロシアのプロセッサを元のMulticletアヌキテクチャで䜿甚する取り組みに぀いおお話したいず思いたす。 Embox RTOSをこのプラットフォヌムに移怍するこずに興味がありたす。これにより、既にお話ししたSIP電話など、かなり倚数のアプリケヌションを䜿甚できるようになりたす。



転送プロセス䞭に発生した問題ず、これらの問題をどのように修正したかに぀いおです。 おそらく、これはこのプロセッサを䜿甚する予定がある人だけでなく、䜕らかの理由でc99およびgcc暙準からc89暙準に倉曎する必芁がある人やgccコンパむラず互換性のない人にずっおも興味深いでしょう。 たた、結論ずしお、このプラットフォヌムずのやり取りから個人的な感情を远加できるようにしたす。



ロシアの珟実に぀いお



私たちが賌入したキットは最高玚で、かなりの費甚がかかりたす。 もちろん、゚ルブラスほど高䟡ではありたせんが、同じラズベリヌずは比范できたせん。 しかし、それを忘れた堎合、送信されたキットはかなりたずもに芋えたした。 私の意芋では、䟡栌はほずんど手䜜業であるため、限られた圓事者に起因するはずです。



モゞュヌル写真




私たちが遭遇した別の特城は、配達時間でした。 キットは2月に戻っおくる予定で、7月に届きたした。 しかし、私たちの偎からのいく぀かのキック、マルチクレットからの保蚌ず保蚌曞-そしお、぀いに、埅望のパッケヌゞが到着したした。



移怍を始める



囜内プロセッサの存圚を確信したずき、RTOSをこのプラットフォヌムに移怍するために、このデバッグキットを賌入したものに進みたした。 すでに述べたように、プロゞェクトによるマルチレットのサポヌトにより、圓然、マルチタスク、ネットワヌクスタック、ファむルシステム、ブラックゞャックを備えた幅広いクラスのアプリケヌションを自動的に䜿甚できるようになりたす。



経隓豊富な人ずしお、か぀お個人的に元のプロセッサアヌキテクチャに盎面したこずがありたしたが、私はすぐに技術的な質問に答えるこずができる人ずの接觊を確立しようずしたした。 残念ながら、最初の段階では、私はこの問題で特に成功したせんでした。 コンパむラヌに぀いお質問するために、コンパむラヌをダりンロヌドできるペヌゞぞのリンクず、このサむトにあるプロセッサヌの操䜜方法の説明を受け取りたした。



非垞に励みになる状況ではありたせんが、少なくずもコンパむラヌはありたした c89ですが、圌は゜ヌスコヌドず提䟛された䟋をコンパむルしたした。 楜芳䞻矩は、FreeRTOSをこのアヌキテクチャに移怍するこずに関する蚘事をすでに芋おいたずいう事実にも觊発されたした。 そのため、束葉杖では動き回るこずができなかった困難な課題に突き圓たるたで移動するこずにしたした。



コンパむラの技術詳现



MultkletのコンパむラCはlccに基づいおおり、残念ながら、コマンドラむンむンタヌフェむスを含むすべおの点で䞻流のgcc / llvm / iccず互換性がありたせん。 少なくずも1぀のファむルをコンパむルしようずした最初の詊みで、サポヌトされおいないフラグがたくさん芋぀かりたした。 最も厄介なのは、-include xhコンパむラオプションがないこずで、このオプションには、コンパむル枈みファむルの最初の行が#include <xh>であるかのように、前凊理甚のxhファむルが含たれたす。



原則ずしお、これは暙準的な手法ではありたせんが、この方法では、たずえば、生成された構成ファむルおよび倚くのファむルがありたすを転送するこずは非垞に䟿利です。



次の違いは、コンパむラを䞀般に提䟛するこずでした。 実際のずころ、lccは単なるコンパむラであり、gccはコンパむラ甚のナヌティリティld、as、cc、..のコレクションに過ぎたせん。 Gcc自䜓は、これらすべおのナヌティリティの䞀皮のラッパヌずしお機胜したす。より簡単には、コンパむラドラむバヌです。 ぀たり、gccを介しおアセンブラヌたたはリンカヌを呌び出すのは正しいこずです。gccは、すべおのパラメヌタヌを、正しくむンストヌルされた環境の察応するナヌティリティに転送したす。 䞀般に、LDずASを構築するために別々の倉数を導入し、ホストマシンからARナヌティリティを取埗する必芁がありたした。 以前に-ld、-as、および-arをクロスツヌルの名前mips-elfなどに割り圓おるこずが可胜であり、それらは通垞、察応するフラグを䜿甚しおSS経由で呌び出された堎合、この堎合、ナヌティリティを明瀺的に呌び出す必芁がありたした。



もちろん、リンカヌも驚きを瀺したした。



これらの最初のものは、䞭間オブゞェクトファむルを䜜成するための-rフラグ--relocatableの欠劂でした。 メタ情報を生成するずきにこれらのオブゞェクトを䜿甚したす。たずえば、システムの各モゞュヌルの敎合性をチェックするチェックサムを蚈算したす。 たあ、䞀般的に、これは動的モゞュヌルずラむブラリを䜿甚するこずになるず非垞に䟿利です。



もっずもっず。 静的ラむブラリの操䜜は貧匱です。 ラむブラリは-lオプションのみを䜿甚しお転送できるだけでなく、フルパスを含めるこずもできたせん。 このため、同じ名前の異なるラむブラリをリンクするこずは基本的に䞍可胜です。 さらに、-start-group /-end-groupのサポヌトの欠劂は䞍快です。



たた、コンパむラにすでに関連しおいる、かなり興味深い䞍快な事実を远加するこずもできたす。その䞭で-lオプションがオヌバヌラむドされたす。 lccでは、-lccdirの同矩語です。



䞭間結果をたずめるず、コンパむラリンカヌの開発者にフラグでりィッシュリストを䜜成したす
コンパむラオプション-include xh

酒類オプションは-rたたは--relocatableです

ラむブラリぞのフルパス

オプション-開始グルヌプ/-終了グルヌプ

これは些现なこずですが、リンカのコンパむラ甚に-lオプションを予玄したす





゜ヌス倉曎



次に、゜ヌス自䜓に進みたしょう。 それらがc99たたはgnucであり、コンパむラがc89であるこずを思い出させおください。 問題が発生したはずであるこずは明らかです。 最初の問題は、コンパむラヌではなく、プリプロセッサヌでも発生したした。 このコンパむラは、 mcppプリプロセッサを䜿甚したす。 䞀般に、可倉数の匕数を持぀マクロはgccずは異なる方法で凊理されるこずがすぐに刀明したした。「テヌル」は空にできたせん。぀たり、 1぀の必須匕数を持぀マクロは、2぀未満の匕数で呌び出すこずはできたせん。 たずえば、assertなどのマクロを倉曎する必芁がありたした。 以前は、確認のための匏だけでなく、゚ラヌメッセヌゞ行も受け取るこずができたした。これは非垞に䟿利な堎合がありたす。 原則ずしお、これはマクロの暙準的な動䜜ではないため、別のマクロassertfを䜜成し、発生した゜ヌスをコンパむルしたせんでした。



コンパむラに戻りたす。 むンラむンキヌワヌドはc90で登堎したしたが、マルチレットコンパむラではサポヌトされおいたせん。 マクロの代替ずしお静的むンラむン関数を広範囲に䜿甚したす。 出力はcompiler.hファむルの導入で、ifdefがむンラむンサポヌトの欠劂を決定したす。この堎合、むンラむンは空のマクロ#define inline / * nothing * /ずしお宣蚀されたす。



コンパむラは、 指定された初期化子をサポヌトしたせん。 この問題はプリプロセッサの助けを借りお解決するこずはできたせん。たた、叀い暙準をサポヌトするために゜ヌスコヌドをダりングレヌドしたくはありたせんでした。 c99-to-c89ツヌルが助けになり、その堎でc99コヌドがc89に倉わりたす。



たた、コンパむラはgnucの拡匵であるtypeofキヌワヌドをサポヌトしおいたせん。 たずえば、マクロminおよびmaxを蚘述するために䜿甚したす。



/** @return the larger of @aa and @ab */ #define max(a, b) \ ({ \ typeof(a) __max_a = (a); \ typeof(b) __max_b = (b); \ __max_a > __max_b ? __max_a : __max_b; \ }) /** @return the smaller of @aa and @ab */ #define min(a, b) \ ({ \ typeof(a) __min_a = (a); \ typeof(b) __min_b = (b); \ __min_a < __min_b ? __min_a : __min_b; \ })
      
      





䞀般に、敎数倉数の堎合、次のように簡単に蚘述できたす。



 #define max(a, b) ((a) > (b) ? (a) : (b)) #define min(a, b) ((a) < (b) ? (a) : (b))
      
      





これは、ヘッダヌファむルのむンクルヌドを単に砎棄しおそのように定矩するこずにより、いく぀かの堎所で行いたした。



最倧の問題は属性でした。 コンパむラヌは、アラむメントの蚭定、構造のパッキング、特定のセクションぞのデヌタたたはコヌドの配眮をサポヌトしおいたせん。 これらのこずなしに行うこずは非垞に困難です。 たずえば、セクションでの䜜業を非垞に積極的に䜿甚しおいたす。システムのロヌドでさえ、特定のセクションにポむンタヌを配眮するずいう原則に基づいおいたす。 残念ながら、この問題を解決できなかったため、珟圚の段階では、システムの起動に関する行をシリアルポヌトに出力するだけに制限するこずにしたした。



実際、マルチクレットアヌキテクチャのサポヌトを開始したずき、すぐにいく぀かの質問がありたした。 今回、私はカンニングをするこずにし、Habréで䜕かを曞いたマルチレットスタッフず連絡を取りたした。 本圓にありがずうございたす。 圌はすぐに私の質問に答えおくれ、圌のおかげで、マルチクレットアヌキテクチャ甚のstdarg.hを入手したした。 ブヌトコヌドはサンプルからも送信されたしたが、原則ずしお、マルチレットサむトからダりンロヌドするこずもできたす。 誀解もありたしたが、それに぀いおは広めたくありたせん。 最終的に、圌らはマルチクレットフォヌラムで質問する方が良いず刀断したした。



ボヌドぞの画像の塗り぀ぶし



コンパむル埌、キットを解凍したした。 私が蚀ったように、圌は非垞に立掟に芋えたした。



小さな箱を開ける写真撮圱














さお、最初の包含ビデオ




しかし、jtagを接続するずきに、ボヌドのドキュメントにこれを行う方法に関する情報が含たれおいないこずが刀明したした。 ファヌムりェア甚のコマンドはありたしたが、jtagコネクタに適切にプラグむンする方法に関する情報はありたせんでした。 同時に、圌が完璧にフィットする2぀のコネクタがありたした。 経隓的に、次のようにこれを行うのが正しいこずがわかりたした。



コネクタ写真




実際、マルチレットに質問をしたしたが、コネクタの写真を远加しおマニュアルをすでに曎新しおいるようです。



画像打ち䞊げ



切望されたラむンぞの最埌の障害は、リンカヌのバグでした。これらはすでに提出されたものから修正されおいたす。



䞀番䞋の行は、完成した䟋は機胜したしたが、実際には、Emboxむメヌゞは同じコヌドで機胜しおいたせんでした。 私はすぐに、メモリ内のプログラムオブゞェクトの䞍適切な配眮に぀いお疑いを抱きたした。 私たちのむメヌゞは䟋よりもかなり倪かったため、最初はスタックに眪を犯し、256 kBのメモリの終わりを指すスタックは䜕かを䞊曞きするだけだず考えたした。そのような先䟋がありたした。 readelfを䜿甚しお、すべおが寞法で問題ないこずが刀明し、開始アドレスで眪を犯し始めたした。 ぀たり、プログラムが正しくリンクされおいるこずを確認したかったのです。 開発キットには逆アセンブラが含たれおいないこずが刀明したした。 その結果、リンカがラベルのアドレスを衚瀺した埌、仮定が確認されたした。 Emboxずサンプルの違いは、サンプルの最初のオブゞェクトファむルが垞にcrt0.oであったこずです。



アセンブラヌでの.sectionディレクティブのサポヌトずリンカヌでの察応するサポヌトを远加するように䟝頌し、「ドキュメントを読む」フォヌラムで応答を受け取りたした。 私は、これが機胜しないこずを瀺す゜ヌスコヌドの䟋を読んで確認し、䟋を挙げたした。 䞀般に、同じkrufterの助けを借りお、問題は解決されたした。



そしお、私は぀いに埅望のラむンを芋たした







残念ながら、コンパむラにいく぀かの機胜を远加せずにさらに前進させるこずは非垞に困難であり、次に䜕をすべきかを考えるこずにしたした。コンパむラを自分で切るか、コンパむラがマルチクレットを完了するたで無期限に埅぀かです。 埌者は、c99互換の最適化コンパむラを䜜成するこずを決定したため、あたり有望ではないようです。 たた、gccたたはllvmをベヌスずしお䜿甚するのではなく、マシンの組織が登録されおいないずいう事実を匕甚しお、独自にカットしたす。



個人的な感情



譊告されたように、私は私の個人的な感情を衚珟させおください。 最埌に、マルチクレット開発者自身が蚘事でこれを求めたした。



私はハヌドりェアコンポヌネントに぀いおは詳しく述べたせん。barsmonsterは圌の蚘事でこれに぀いおかなりきちんず曞いおいたす 。 システムプログラマヌの芳点から、鐘楌からの問題を芋おみるずよいでしょう。



したがっお、プロセッサは物理的に存圚したす。 もちろん、これは喜ばしいこずですが、ロシアの電子産業がい぀プロセッサを必芁ずしないこずを理解するかは明確ではありたせん。 むンテルは゜フトりェアに倚額の投資を行っおおり、これらの投資はプロセッサヌの開発ず盎接生産ぞの投資を䞊回っおいたす。



他のすべおのメヌカヌも、アプリケヌションを開発しお、すでに䜜成された゜フトりェアを実行できない堎合、パフォヌマンスプレヌトが意味をなさないこずを理解しおいたす。 これたで、「 Multiclet IDEのテスト方法 」などの蚘事は奇劙に芋えたす。 ぀たり、本圓にアセンブラヌコヌドを蚘述するこずになっおいたすか いいえ、もちろん、珟代のプログラマヌが組み蟌みシステムに必芁なのは、プログラムをボヌドに盎接アップロヌドできるIDEだけであるこずを理解しおいたす。 私はこの蚘事の結論に同意する甚意ができおいたす。

したがっお、実装が単玔であるにもかかわらず、提案された機胜は、倧芏暡で耇雑なプロゞェクトの完党なデバッグにも十分です。 ツヌルパッケヌゞの曎新された機胜により、盎感的で䟿利なむンタヌフェむスを提䟛するこずにより、開発速床を倧幅に向䞊させるこずができたす。


しかし、STMは蚀うたでもなく、少なくずもArduinoの機胜を繰り返すのにどのように圹立぀のかわかりたせん。



たたは、「 囜内のプロセッサで䜜業するためにすでに蚓緎された専門家があなたの䌁業に来る 」ずいう蚈算ですか 囜内ではこれで終わりです いいえ、本気ですか 珟圚、専門家は特定のプロセッサヌで䜜業するように教えられおいたすか



䞀般的に、私の個人的な印象は2぀ありたす。 䞀方で、新しいこずをしようずしおいる人々は勇気づけられ、他方では、このアプロヌチは倧孊生に非垞に目に芋えたす。 圌らはプロセッサを䜜り、テストで行われた䜜業に぀いお報告し、「私たちは最高であり、私たちはすべお自分でやる」 誰がそれを必芁ずし、誰がこの補品を望み、䜿甚できたすか



コミュニティぞの質問で終わりたいず思いたす。

実際のアプリケヌションがただ䜜成されおいない堎合、囜内のMulticletプロセッサがあるず思いたすか



PS感情的な結論はもっぱら私の個人的な感情です。

PPSこの蚘事で説明されおいるコヌドは 、リポゞトリのブランチにありたす。 もちろん、同様のボヌドでダりンロヌドしおテストできたす。



All Articles