• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:組み込み系C言語の学習法)

組み込み系C言語の学習法

このQ&Aのポイント
  • 組み込み系C言語の学習法について、経験のない方にアドバイスをお願いします。
  • 組み込みソフトを長年経験してきたが、C言語の知識が足りない部分があります。
  • 特にポインタや構造体や配列についてアセンブラとの関係について知りたいです。

質問者が選んだベストアンサー

  • ベストアンサー
  • zwi
  • ベストアンサー率56% (730/1282)
回答No.17

質問者さんはCに関しては初心者なので、本当は経験に基づいたありがたい知識なのかもしれませんよ。 早急に結論を出さずに、理解に努めてみたらどうでしょうか? こちらに書いてあるようなことを「確かにね」と思えるようになるまでがんばってみてください。 「プログラミングの禁じ手Web版 C言語編(InternetArchiveよりサルベージ) - Akio’s Log」 http://d.hatena.ne.jp/elwoodblues/20090206/1233878763 「Cプログラミング診断室」 http://www.pro.or.jp/~fuji/mybooks/cdiag/index.html#mokuji ちなみにアセンブラでも個性はありますし、嫌な書き方もさんざん見て来ました。テクニックに走りすぎでレジスタを訳分からん使い方しているのも見ました。 逆に綺麗なコードもあります。そういうのはアリゴリズムの選択やらレジスタの使い方がエレガントなんです。 アセンブラで、ちゃんとモジュールの構造化しているとかでも差がでますからね。

その他の回答 (16)

  • zwi
  • ベストアンサー率56% (730/1282)
回答No.16

Visarさん、wormholeさん、その等号条件の定数問題は平行線を辿るのでこの位で良いのではないでしょうか? 好き嫌いのレベルだと思います。

noname#175419
質問者

補足

確かに、"好き嫌い"は、個人の性格ですよね。 私が言いたいのがこれなんですよ。 他人の書いたコードを見て、「スマートじゃない」とか 「私だったらこうするとあーするとか」 ゴチャゴチャ言うのです。 正直、付き合いきれないのです。 アセンブラの場合は、書き方に自由度が無いため、 個人の性格は反映されにくいので、職場は円満でした。 今の職場は数名いますが、性格が2つに分かれます。 凝性な人とそうでない人です。 私は後者です。 凝性な人は、職人さん気質なので妥協しないのです。 C言語の話が職場の話になってしまいましたね。すいません。

  • wormhole
  • ベストアンサー率28% (1626/5665)
回答No.15

>比較演算子で定数を左にもってくるコーディングは、理由があってしています。 (以下略) その理由は知っています。 ですが左辺、右辺両方とも変数だったらどうするんですかね。 片方が定数の時はコンパイラがエラーにしてくれるかもしれませんが、共に変数だった場合には役に立ちません。 そんな事なら「常に比較演算子を使うようなときには気をつける」そういう癖をつける方がよっぽどいいと私は思います。

  • Visar
  • ベストアンサー率19% (17/87)
回答No.14

こんばんは。 >比較演算子で定数を左にもってくるコーディングを推進してるのや >NULLと0を混同してるようなのはうんざりしますけど読めないわけじゃないですし。 NULLと0の混同は問題外ですが、 比較演算子で定数を左にもってくるコーディングは、理由があってしています。 '80年代前半のCコンパイラはとっても賢くて、 '=='と'='を打ち間違えても、ワーニングとか出してくれませんでした。 例 if( a == 0 ) {  なんたら } を if( a = 0 ) {  なんたら } とかした場合です。 しかし、定数を左辺に持っていくコーディングをすると、 '=='と'='を打ち間違えたら if( 0 = a ) {  なんたら } いくら超賢い'80年代のCコンパイラでも、さすがに 0にaは代入できないのでコンパイルエラーとなります。 化石プログラマーの転ばぬ先の杖的な発想です。 P.S. もうひとつ、理由があって、当時のディスプレーは、 80桁×25桁の表示能力しか無くて、比較演算子の定数を右側に書くと、 ソースを縦スクロールして眺めるときに、ソースが横に長すぎると、 演算子の定数を見るのに横スクロールも必要になるので面倒で 見づらいからです。 過去の遺物かな。 失礼しました。

  • wormhole
  • ベストアンサー率28% (1626/5665)
回答No.13

>やたらとdefineで文字化してるし、型の取り方が自分と違うし正直まいってます。 「やたらdefine」というのは文字列化ではなく定数化かと。 数値に名前を付けることで可読性を上げるのと数値の変更に柔軟に対応できるようにしてるんだと思います。 数値を直接ソース上に書いた場合、その数値の意味はコメントに書かなければわかりませんし、その数値が多数の箇所で使われているような場合、その数値を探し出して変更していかなければなりません。また同値で意味が異なるものがあるような場合はさらに面倒なことになります。 アセンブラでもシンボルに値を設定するとかすることあると思いますけど使ったことありませんか?

noname#175419
質問者

補足

使ったことはあります。 多数の箇所で使われているような場合は納得できるし、 後で数値が変更になる場所とかね。 人によって、一箇所の場所でも定数化(名前化)するのです。 それもあまり変更するような個所でも。 だからソフトって人の性格なんですよね。 上手い下手というより個性だと私は思うのです。 気が合う人とは友達や恋人になりますが、 そうでない人とはそうはなりません。 みなさんはどう思われますか?

  • wormhole
  • ベストアンサー率28% (1626/5665)
回答No.12

>この辺はみなさんどのように感じて仕事されてますか? 職場ではコーディングスタイルの統一などあってますが私自身はよほど変な書き方でも無い限り別段気になりません。 比較演算子で定数を左にもってくるコーディングを推進してるのやNULLと0を混同してるようなのはうんざりしますけど読めないわけじゃないですし。

  • zwi
  • ベストアンサー率56% (730/1282)
回答No.11

>私は質問にも書きましたが、アセンブラ(構造化アセンブラ)経験者です。 >要するに、凝りに凝ったC言語風の書き方は出来ないです。 >アセンブラ風のC言語みたいな感じです。 時代の流れとしてC言語が必要になったのであれば受け入れるしか無いでしょうね。 組み込み現場によってはC++やJavaが使われている所もありますので、いきなりオブジェクト指向言語に成らないだけでも高級アセンブラと呼ばれるC言語でよかったな思うべきでしょう。 書き方に関しては共同作業を前提として統一コーディング・スタイルを決めるている職場は結構あります。作業に支障がありますから。 ただ、個別作業の多い現場では各人が個性的に書いている所もあるってのが現状で、そういう職場なのだと思います。 慣れてくれば大抵は読めるようになりますが、それでも読みたくないコードはあります。今の状態が嫌ならコーディング・スタイルの統一を働きかけてみたら良いでしょう。

  • Visar
  • ベストアンサー率19% (17/87)
回答No.10

こんにちは。 >例えば、サーミスタで温度を測定し、ファンモータの速度を可変するとかです。 >もっと具体的言うと、サーミスタからの入力電圧をAD変換して、 >その値を"AD値対温度の表"から温度に変換し、 >DAポートからアナログ出力してファンモータの速度指令電圧を可変する。こういう例題を望んでいるのです。 そのなので良いのなら、工業高校生が部活でやってますよ。 ルネサス主催のMCR、「マイコン・カー・ラリー」のサイトの 技術情報ダウンロードサイトが参考になるのではありませんか。 ※MCR:何とか・コントロール・◎◎◎ウェアてな感じじゃないです。 彼らは、H8マイコン(H8/3048F-ONE、H8/3687F)やR8Cマイコンで AD/DA、EEPROM、PWM、UART、SPIやエンコーダを使いこなしてますよ。

参考URL:
http://www.mcr.gr.jp/tech/download/main01.html
  • zwi
  • ベストアンサー率56% (730/1282)
回答No.9

あっ書き忘れました。 残念ながらM38000(MELPS740)の日本語の書籍は私は一度も見た事はありませんので、他のもっとアマチュアにも知名度があるマイコンを学習用には選択すべきだと思います。

  • zwi
  • ベストアンサー率56% (730/1282)
回答No.8

完全に無視されている気もしますが私の書いた 「Amazon.co.jp: C言語による H8マイコン プログラミング入門: 横山 直隆: 本」 http://www.amazon.co.jp/dp/4774118036 ではダメなのでしょうか? ダメな理由をお聞かせください。 旧日立系という条件はクリアしていると思いますが、これがダメなら具体的にOKなマイコン名を羅列して頂かないと的確に答えられる人は少ないと思います。

noname#175419
質問者

補足

返事遅くなってすいません。 ネット上では全部の中身は見れないですが、駄目ではないです。 また、ルネサスのセミナーのテキストもあるので、合わせてみてみるのもいいかもしれません。 話が反れるかもしれませんが、もうひとつ相談に乗ってもらえませんか? 私は質問にも書きましたが、アセンブラ(構造化アセンブラ)経験者です。 要するに、凝りに凝ったC言語風の書き方は出来ないです。 アセンブラ風のC言語みたいな感じです。 もちろん関数の引数や返し値は使います。 C言語って個人の性格が反映されがちで個性がでます。 性格が似た人同士ならソフトを見ても理解できますが、 性格が違う人のを見るとうんざりします。 やたらとdefineで文字化してるし、型の取り方が自分と違うし 正直まいってます。 この辺はみなさんどのように感じて仕事されてますか? 宜しくお願いします

  • wormhole
  • ベストアンサー率28% (1626/5665)
回答No.7

>例えば、サーミスタで温度を測定し、ファンモータの速度を可変するとかです。 >もっと具体的言うと、サーミスタからの入力電圧をAD変換して、 >その値を"AD値対温度の表"から温度に変換し、 >DAポートからアナログ出力してファンモータの速度指令電圧を可変する。こういう例題を望んでいるのです。 さすがにピンポイント過ぎますし限定されたハードウェアでの話になりそうなのでC入門書としてはないと思います。出版しても売れないでしょうし・・・ でもそういうのをアセンブラで組める方ならアセンブラでひとまず書いて人力で逆コンパイルしてCソースにするとかできそうな気がしますけど。

関連するQ&A

専門家に質問してみよう