プロが教えるわが家の防犯対策術!

私は組み込みソフトを8年やってきました。
規模としては、白物家電をイメージしてもらうと良いです。
但し、電子レンジなど表示機能がない製品が近いかもしれません。
近いものでは、洗濯機や冷蔵庫といった感じでしょうか。
マイコンは、旧三菱の740ファミリのM38000系です。

ただソフト経験(アセンブラ)はあるものの、C言語の経験は皆無なのです。
ただし、if-else, switch-case, for, while, break, continue は充分理解できます。
何故かというと、旧三菱系のマイコンには構造化アセンブラと言って、
C言語もどきの記述ができるのです。上記文のみ特別に設けられていたのです。
それを使ってソフトを作っていたので上記分は理解できるのです。
しかし、ややこしいのがポインタや構造体や共有体や配列です。
同じことをアセンブラでもやっているはずなのです。
ポインタや構造体や共有体をアセンブラで書くとどうなるかが知りたいのです。
ここの部分が書いてある書籍がないのです。
例えば、ポインタや配列は、旧三菱系で言うとXレジスタやYレジスタを
使って行っていた作業と似てるのかなと推測できます。

同じ境遇の方で克服された方がいらっしゃいましたらアドバイスをお願いします。
また、アマゾンで下記の本を見つけました。
参考になるのでしょうか?
よろしくお願いします。

 ""組込み現場の「C」プログラミング基礎からわかる徹底入門""

A 回答 (17件中1~10件)

質問者さんはCに関しては初心者なので、本当は経験に基づいたありがたい知識なのかもしれませんよ。


早急に結論を出さずに、理解に努めてみたらどうでしょうか?

こちらに書いてあるようなことを「確かにね」と思えるようになるまでがんばってみてください。
「プログラミングの禁じ手Web版 C言語編(InternetArchiveよりサルベージ) - Akio’s Log」
http://d.hatena.ne.jp/elwoodblues/20090206/12338 …
「Cプログラミング診断室」
http://www.pro.or.jp/~fuji/mybooks/cdiag/index.h …


ちなみにアセンブラでも個性はありますし、嫌な書き方もさんざん見て来ました。テクニックに走りすぎでレジスタを訳分からん使い方しているのも見ました。
逆に綺麗なコードもあります。そういうのはアリゴリズムの選択やらレジスタの使い方がエレガントなんです。
アセンブラで、ちゃんとモジュールの構造化しているとかでも差がでますからね。
    • good
    • 0

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

この回答への補足

確かに、"好き嫌い"は、個人の性格ですよね。
私が言いたいのがこれなんですよ。

他人の書いたコードを見て、「スマートじゃない」とか
「私だったらこうするとあーするとか」
ゴチャゴチャ言うのです。
正直、付き合いきれないのです。

アセンブラの場合は、書き方に自由度が無いため、
個人の性格は反映されにくいので、職場は円満でした。
今の職場は数名いますが、性格が2つに分かれます。
凝性な人とそうでない人です。
私は後者です。
凝性な人は、職人さん気質なので妥協しないのです。

C言語の話が職場の話になってしまいましたね。すいません。

補足日時:2013/01/20 15:52
    • good
    • 0

>比較演算子で定数を左にもってくるコーディングは、理由があってしています。


(以下略)

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

こんばんは。



>比較演算子で定数を左にもってくるコーディングを推進してるのや
>NULLと0を混同してるようなのはうんざりしますけど読めないわけじゃないですし。

NULLと0の混同は問題外ですが、

比較演算子で定数を左にもってくるコーディングは、理由があってしています。

'80年代前半のCコンパイラはとっても賢くて、
'=='と'='を打ち間違えても、ワーニングとか出してくれませんでした。


if( a == 0 ) {
 なんたら
}


if( a = 0 ) {
 なんたら
}
とかした場合です。

しかし、定数を左辺に持っていくコーディングをすると、
'=='と'='を打ち間違えたら
if( 0 = a ) {
 なんたら
}
いくら超賢い'80年代のCコンパイラでも、さすがに
0にaは代入できないのでコンパイルエラーとなります。

化石プログラマーの転ばぬ先の杖的な発想です。

P.S.
もうひとつ、理由があって、当時のディスプレーは、
80桁×25桁の表示能力しか無くて、比較演算子の定数を右側に書くと、
ソースを縦スクロールして眺めるときに、ソースが横に長すぎると、
演算子の定数を見るのに横スクロールも必要になるので面倒で
見づらいからです。

過去の遺物かな。

失礼しました。
    • good
    • 0

>やたらとdefineで文字化してるし、型の取り方が自分と違うし正直まいってます。



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

この回答への補足

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

補足日時:2013/01/20 15:59
    • good
    • 0

>この辺はみなさんどのように感じて仕事されてますか?



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

>私は質問にも書きましたが、アセンブラ(構造化アセンブラ)経験者です。


>要するに、凝りに凝ったC言語風の書き方は出来ないです。
>アセンブラ風のC言語みたいな感じです。

時代の流れとしてC言語が必要になったのであれば受け入れるしか無いでしょうね。
組み込み現場によってはC++やJavaが使われている所もありますので、いきなりオブジェクト指向言語に成らないだけでも高級アセンブラと呼ばれるC言語でよかったな思うべきでしょう。

書き方に関しては共同作業を前提として統一コーディング・スタイルを決めるている職場は結構あります。作業に支障がありますから。
ただ、個別作業の多い現場では各人が個性的に書いている所もあるってのが現状で、そういう職場なのだと思います。
慣れてくれば大抵は読めるようになりますが、それでも読みたくないコードはあります。今の状態が嫌ならコーディング・スタイルの統一を働きかけてみたら良いでしょう。
    • good
    • 0

こんにちは。



>例えば、サーミスタで温度を測定し、ファンモータの速度を可変するとかです。
>もっと具体的言うと、サーミスタからの入力電圧を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
    • good
    • 0

あっ書き忘れました。


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

完全に無視されている気もしますが私の書いた


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

この回答への補足

返事遅くなってすいません。
ネット上では全部の中身は見れないですが、駄目ではないです。
また、ルネサスのセミナーのテキストもあるので、合わせてみてみるのもいいかもしれません。

話が反れるかもしれませんが、もうひとつ相談に乗ってもらえませんか?
私は質問にも書きましたが、アセンブラ(構造化アセンブラ)経験者です。
要するに、凝りに凝ったC言語風の書き方は出来ないです。
アセンブラ風のC言語みたいな感じです。
もちろん関数の引数や返し値は使います。
C言語って個人の性格が反映されがちで個性がでます。
性格が似た人同士ならソフトを見ても理解できますが、
性格が違う人のを見るとうんざりします。
やたらとdefineで文字化してるし、型の取り方が自分と違うし
正直まいってます。

この辺はみなさんどのように感じて仕事されてますか?
宜しくお願いします

補足日時:2013/01/19 16:51
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!