大学の情報系の学生です。
組み込みシステムやリアルタイムOS(特にこっちについて)興味があり勉強したいのですが、本を読むだけでなく実際に手を動かしたりして勉強したいです。
どんなことから始めてみたら良いでしょうか。
ちなみに私は以下のことを、とても詳しいとは言えませんが勉強したことがあります。
・C言語
・アセンブラ(本当に少し)
・組み込みシステム概論
・リアルタイムOS(μITRON仕様について若干)
気になる質問をクリップする
クリップした質問は、後からいつでもMYページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
回答4件
0
iTRONというのであれば、Toppersで、Windowsの実装が公開されてますんで、それで一通り動作させてみる、なにか組んで見るってところから始めればどうでしょ。
まあ、なにか評価用のマイコンボードを買ってきてそれでどうにかするというのは最終目的ですが、それをするにはそれなりにハードの知識が必要となりますし、ちとハードルが高いかとはおもいます。
投稿2019/01/19 08:06
総合スコア88088
0
私自身は組み込みガチ勢ではないので、あくまで個人的意見ですが。
とにかく手を動かして、なんでもやってみれば良いと思います。もし、コードを書いた経験やハードウェアをいじった経験が少なく不安があるのであれば、最初に手を付けるのは簡単な電子工作を伴って、規模が小さく、問題が起きたときに解決策を得やすい、情報が多く出廻っているものが良いと思います。
例えばarduinoでもいいし、ラズパイのGPIOを使ってもいいし、ラズパイでWiringPiを併用してみるのもいいでしょうし、ベアメタルに挑戦してみるのもいいでしょうし、ボードの種類が豊富なmbedのようなものもあります。
これらは質問者さんが特に興味をお持ちのリアルタイムOSを使ったものではありませんが、開発環境の整備や自分にとって未知のハードウェアを扱うときには、情報が多く、動作確認が取れているものが多いという点で取り組む際の障壁が低いです。
「リアルタイムOSではないし、物足りないな」と思われるかもしれませんが、実際にやってみると案外思ったとおりに動かず、所望の動きになるまで苦労するものです。ソフトウェア(ファームウェア)を書くための知識はもちろんですが、ハードウェアに対する基本的な知識、問題が起きたときに必要に応じてテスターやロジックアナライザーを使ったり、そもそも外部デバイスを使うにあたってはデバイスのデータシートを読み、回路図をたぐるようなケースも出てきます。反対に言うと、それらに対応できると現場で強いです。
リアルタイムOSは本当にシビアにリアルタイム性を求められる製品であったり、逆にリソースが少ないものの、精密で多機能な動きを求められるケースで使われます。最近では組み込みといえどもCPU性能が高くなっているのでもともと動作が速く、ゆっくりとポーリングでI/Oをしたり、ポーリングでまかなえないところは割り込みを併用して使うにとどめるケースが多いように思います。それが組み込みlinuxやベンダーの独自組み込みOSに現れていて、尚更リアルタイムOSに触れる機会は少なくなっています。
別回答でTOPPERS/JSPのお話が出ていましたが、オープンソースのリアルタイムOSは主に最終的に自分たちが設計したボードにポーティング(移殖)することを想定しています。ですので、ポーティングにあたってはかなり広範で、高度な知識が実装者に求められることもあります。
フリーなリアルタイムOSと言えば、別回答で出たμITRONの実装であるTOPPERS/JSPのほかに、おととし(2017年)に話題になったFreeRTOSもあります。
FreeRTOS - Wikipedia
Amazon FreeRTOS
こちらはいくつか評価ボードも出ていますし、情報を眺めてみるのも良いのではないでしょうか。
組み込み系に片足を突っ込みつつ、主にOS上で動くアプリを作っている立場での意見ですが、組み込み系OSではないlinuxでもWindowsでも、システムが用意しているシステムコールやAPIの仕様やそれが提供されている背景、マルチタスク/プロセス/スレッドを実現するためのミューテックスやセマフォを使った排他制御、コンテキストスイッチなどに関する知識はリアルタイムOSにも共通するものです。ですので、もし単なるPC上のアプリを造る場合でもそれらを意識しておくと、他のプラットフォームでの開発にも役立ち、決して無駄にはならないと考えます。
組み込み系やリアルタイムOSに興味がお有り、と言うのはどちらかと言うと珍しく、業界にとってとても貴重(<ほめてます)ですので、ぜひモチベーションを保って頑張っていただきたいです。
投稿2019/01/20 04:45
総合スコア9318
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
0
ベストアンサー
既にいくつか回答がありますが、参考として、、。
組み込みシステムと言いますが、リアルタイムOS を採用した時点で、大半の処理は、組み込みを意識しないで作られている事が多いです。正確には、OS周りのサポートでなければ、となりますが。
理由は簡単で、ハードウェア/処理タイミングを(あまり)意識せずにシステムを作るために、OSを採用しているので、個々の処理で意識するようだと、OSを採用した意味が無くなるからです。
そして、ゼロから作るのでなければ、LEDを光らせるのもパネルから入力するのも大抵、ライブラリ化されていて、呼び出すだけってのが、現場には多いと思います。(少なくとも自分の経験では) fgetc() の代わりに xxInput()とかを使うとか。
その一方、ゼロから作るのだと、ハードウェアの知識が必要になります。場合によっては、回路図を読む必要があります。また、外部I/Oのためには、各種プロトコル仕様なども知らないといけません。昔(8bit CPUの頃とか)だったら、ハードウェアもシンプルで、通信と言っても RS232C知っていれば、良かったかも知れませんが、今の複雑なシステムでは、全てを知っている人は居ないんじゃないかと思います。
お手軽には、既に回答のあるように、ラズパイなんかも良いと思います。(と言っても、大抵はライブラリ使うようですが) その辺で勉強しながら、色々と調べるのはどうでしょう。(結局、当たり前の話になりましたが)
後はコードを書くときに動作タイミングを意識しながら、書くだけでも違うと思います。
投稿2019/01/20 14:31
総合スコア6385
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
あなたの回答
tips
太字
斜体
打ち消し線
見出し
引用テキストの挿入
コードの挿入
リンクの挿入
リストの挿入
番号リストの挿入
表の挿入
水平線の挿入
プレビュー
質問の解決につながる回答をしましょう。 サンプルコードなど、より具体的な説明があると質問者の理解の助けになります。 また、読む側のことを考えた、分かりやすい文章を心がけましょう。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。