• ベストアンサー

なぜソフトウェアでハードウェアが動くのか

osietenoidの回答

回答No.1

すべてのソフトウェアはその言語そのものの記載のまま動いているわけではありません。 あくまで人間が見やすいように記載しているだけです。これをコンパイラやリンカによって 機械語(0と1のカタマリ)に直して、これを元に動かすことになります。この機械語という 言語は、そのビット1個1個の構造自体が1つの命令およびシーケンス決定機能を持ってい て、プロセッサ内部レジスタのどれを参照するのかとそれをどうするのかなどといった決め 事を実施する条件となり、その処理が終わったら次の命令を処理する(分岐命令の場合は分岐 先に移動する)といった処理を繰り返して動作させているものです。 組み込みソフトウェアの開発をされているのであれば、何らかの対象ハードウェアを知って いると思いますので、そのプロセッサのアセンブラコマンドマニュアルなどを見てみること をお勧めします。このアセンブラは機械語の1命令を1行で見易くしたものですので、実際 のハードウェア(プロセッサ内部レジスタ)をどのように動作させるのかといった動作内容が 1目で分かります。 当方は組み込みシステム開発なども行うハードウェア技術者ですので、あまり説明になって いないかもしれませんが、参考まで。

関連するQ&A

  • ハードウェアを学びたい

    将来プログラマーになりたいと思っています。 勉強していたらアセンブリ言語というものに興味が湧きました。 そこで、アセンブリ言語の入門サイトを少し覗いたらレジスタなどあって難しそうでした。 そこで、ハードウェアについて学ぼうと思ったのですがどういう本を買えば良いか分かりません。 どのような本を買えば良いのでしょうか?

  • 組み込みマイコンでのソフトウェアによるリセット

    組み込み用マイコン向けのファームウェアをC言語で 書いています. ここで, ソフトウェア側からマイコンにリセットをかけ るにはどのような方法があるでしょうか? ※マイコン自体には内部的なハードウェアリセットを行 う機能は無いものとします. 素人考えで思いつく限りだと: ・リセットを行う場所の関数からmainまですべて戻る 経路を作っておく. main (または, mainを呼び出すスタートアップルーチ ンの部分)をループにしておき, その始めで内蔵周辺 機能のレジスタやstatic領域のメモリをすべて初期化 するようなコードを ひたすらハードコーディングしておく. (※static領域のメモリ初期化はどのみち行うからよ いとして, 内蔵周辺機能のレジスタをひたすら初期化 するのが面倒に思われます) ・ウォッチドッグタイマ機能があれば, わざとカウン タをオーバーフローさせてハードウェアリセットをか ける. ・外部リセット端子に何らかの形で出力ポートを 接続しておいて, 自分でハードウェアリセットをかける. 上記のものでもやればそれなりに動作しそうな気は しますが, どういう方法が一般的なのか知らないため どうしてよいか悩んでいます. どのようにリセットを行うのがスマートであるか ご教示いただけませんでしょうか?

  • H8マイコン 学習キットと参考書 (初心者向け)

    H8マイコン 学習キットと参考書 (初心者向け) H8マイコンの  初期設定  ポート制御  液晶表示  タイマ制御  割り込み  A/D変換  シリアル通信(UART, I2C, SPI) といった組込みにおける基本的なプログラミング(C言語希望)を実機(学習キット)+参考書で 実際に統合開発環境HEWを用い独学で勉強しようと考えています。 ネットで調べた感じでは、 北斗電子の  H8/3067 スターターキット と オーム社  H8マイコンによるネットワーク・プログラミング をセットで学習するのがよさそうに思いました。  理由)北斗電子のスターターキット        ・・・HPで詳細資料がアップされており大変わかりやすい     H8マイコンによるネットワーク・プログラミング        ・・・著者HPにてサンプルプログラムコード公開しており親切           実際の現物は本屋で確認したいがこれから。。       【質問】  実際にH8マイコンの基礎確立のため、学習された方の経験では初心者にあう実機の  組込みプログラミングの学習用にはどういったもの(学習実機用キット+参考書)を  使われていましたでしょうか。  ※スクールで手っ取り早く、基礎的なことは学べるのですが、内容の割に  費用が高すぎると思ったため。できることなら独学で学習できないかと考えてます。  ※秋月の学習キットは資料が雑すぎるので、考えていません。(学習できる人にはできるのかも   しれませんが。。優しさがない。。) ((補足として私の組込み関係の知識・技術レベル)) ・組込み業務経験なし ・C(++)言語使用可 ・組込みの基礎的な知識(座学)は学習済み   エンベデッドシステムスペシャリスト試験(未合格/1年ほど勉強済み)   JASA ETEC 組み込みソフトウェア技術者クラス2 グレードA認定 あり   参考書:組込み現場のC言語 等を読破 ・E8aエミュレータあり ・Hew使用経験ほとんどなし ・アセンブリ言語多少勉強済み ((実機学習の目的))  組込みエンジニアへの転職です。  まずは組込みソフトのエンジニアから。。いずれは全般的に。。

  • 組込みプログラム言語の容量・速さの比較

    組込みプログラム言語の容量・速さの比較 組込みプログラムで使用する言語には ・C(++) ・アセンブリ言語 ・JAVA ・(組込み用JAVAのJ2ME) ・(組込み用JAVAのKVM) がありますが、ターゲットデバイス(マイコンなど)へロードする ロードモジュールの状態でのサイズ(容量)は同じなのでしょうか。 違うのであればどれくらいの差があるのでしょうか。 私の予想では  アセンブリ言語 < C(++) < JAVA ですが、どれくらいの差があるのか想像がつきません。 また処理の速さは  アセンブリ言語 > C(++) > JAVA になるのでしょうか。

  • C言語で制御できる教育向けキット

    この度、専門学校に頼まれて、ちょっとしたC言語による組み込みプログラミングの 講義をすることになりました。 座学では退屈するのは明白ですので、何らかのマイコンボードのようなHWキット (たとえば、7セグを制御するとか音を鳴らすとか、ロボットのようなものを制御するとか)を 使って、それをC言語でプログラミングして制御するような実習を組み込みたいと 考えています。 このような用途で使えるマイコンボードや学習キットの情報を教えていただけないで しょうか。 秋月通商をざっと見たのですが、なかなか見つけることができませんでした。 ●要件 価格はあまり高価ではない。 C言語でプログラミングして、ハードウェアを制御する 型番とか情報がありましたしたら是非おしえてください。

  • 汎用レジスタについて

    組み込み開発初心者です。 C言語で汎用レジスタを直接さわることはできるのでしょうか?

  • H8マイコンでled制御

    H8/3052FのマイコンとAKI-H8-USBのキットを使用しています。 ledを制御する際に、通常はportのデータレジスタの該当ビットをlow(0)にしたときに消灯、high(1)に点灯となると思うのですが、 なぜか逆になります。つまりlowレベルのとき点灯します。 他に接続しているスイッチも逆になっているみたいです。 回路の組み立てがおかしいのでしょうか? 理由が分からず悩んでいました。 よろしくお願いします。

  • 中高年専門の求人情報サイトはありませんか?

    中高年専門の求人情報サイトはありませんか? 中高年の求人といえば、警備、掃除ばかりです。 もっと多方面の求人情報を扱うサイトはありませんか? 私は長年、制御・マイコン組み込み系ソフトウエア開発に携わってきましたので、それを活かすことを希望しています。

  • オープン系とか、組込み系とかって何?

    よく、ソフトウェア開発の世界では、「オープン系」とか、「組込み系」、「汎用系」などと言う分野がありますよね。 これってそれぞれどう違い、どのような特徴があるのでしょうか。 また、上記以外のもので他にも「~系」ってあるのでしょうか。あればそれについても概要が知りたいのです。 「アプリ系」などというのもありますか。市販の、例えばグラフィック関連のソフトとか、ゲーム・ソフトや、会計ソフトなどはこう呼ぶのでしょうか。 また、Webプログラミングはどの分野の系統に属するのでしょうか。 ただ、「組込み系」だけは、多少わかりました。例えば電化製品などに内蔵されているマイコンを制御するプログラムを開発するのですよね。国内でも、この分野の技術者が不足しているということも知りました。 自分のイメージですが、この組込み系というのは、いわゆる市販のパソコン・ソフトを開発する分野と比べると、出力する画面のデザインなどの見た目については、あまりこだわらず、制御にいそしむ、ある意味、地味な領域なのかなという気もしました。 それに、結構、マイコンに関するハードの知識も必要とされるのですよね。 私は、ソフト開発のみというよりも結構、電子基盤の操作などに魅力を感じるので、組込みの仕事もしてみたいなとも思うですが、実は、これからVisualBasic.NETを学習しようかと思っています。 これはまったく、的外れな努力でしょうかね。やっぱり、組込みはC言語で無ければならないのでしょうか。 反対に、VisualBasic.NETを生かす道としてはどのような分野が考えられますか。Webやデータベース、サーバサイドのプログラミングなどでしょうか。 ASP.NETなどもありますしね。 どなたか貴重な解説・御意見を頂けましたら、よろしくお願い致します。

  • メモリを確保する方法(アセンブラにおけるORGの様な)ありませんか?

    PICボードの制御プログラミングをC言語で行っています。 通常は、コンパイラで自動的にメモリ領域の確保を行ってくれます。 そこをあえてプログラミングで操作したいのですが 何か良い方法がありましたら教えて下さい。 目的プログラムは、タイマ割り込みによるLEDの制御です。 組み込みソフトウェア開発の勉強中です。