ikkei blog

電子工作やパズルのブログです。主にLEDを使った電子工作をやっています。

これが...「組込み現場」のCプログラミングなのか!? 続編

2012年10月31日 00時14分39秒 | 組み込みソフト
前回のブログ記事に、筆者の三浦さんからコメントを頂きましたので、
今日はそれについて書こうと思います。

コメントの内容
----------------------------------------------------------------------------------------
ご指摘をありがとうございます (三浦 元) 2012-10-27 10:43:41
この本の著者の一人、三浦 元です。
辛口のご批評を、ありがとうございました。
お書きの内容は理解いたしました。
まず、ご理解をいただいていると思いますが、本書の主眼はハードウェアの説明ではなく『組込みプログラミングで品質を上げるために知るべきこと,意識すべきこと,実行していただきたいことを解説』することです(本書「はじめに」から抜粋)。その立ち位置から、ハードウェアの知識を持たない方を想定して意図的に象徴的な図示を行なっています。
ただ、回路的に見てそれらが「動作しない」「誤り」であるのはご指摘の通りです。
これらの箇所の改善を検討し、次回改版時の反映を考えます。
ありがとうございました。
----------------------------------------------------------------------------------------

「辛口」ですか?
私としてはかなり「超甘口」に書いたつもりなんですけどねぇ。


本の内容はプログラミングが主体で、その点はかなり良いと思います。
ただ、この本が単に「Cプログラミング」とか「プログラミング入門」
だったら、まだ罪は軽かったでしょう。

しかし、「組込み現場」と書いてあるので、ハードウェアの説明が無いとおかしいし、
「徹底入門」と付いている限り、いい加減な事は許されません。
ましてや、「SESSAME」の「テキスト」ですから、嘘を書いてはダメでしょう。

で、「意図的に象徴的な図示」ですか。

では、もっと現実的な話をしましょう。
これを「激辛」ととらえるかは別として。

もし、派遣や外注の人が「プルアップってこんなんでしょう?」って、
こんな回路図を書いてしまったら、

「は? ん、 まぁ、そんな感じですね.....」って言われて、
もう2度と仕事が来なくなるのは必至です。


実際の組込み現場では、マイコンもシステムの構成要素の一つに過ぎません。
つまり、ハードウェアの部品としてマイコンを捉えています。
だから、ソフトウェアはマイコンにつながっている回路を、
出来るだけ機能的に働かせる必要があるのです。
そのためには、単にハードウェアの知識が有るだけではダメで、
応用する力、リテラシーが必要なのです。

従って、現場の人は、この人がまともなコードが書ける人なのか、
ハードウェアのリテラシーが十分有るのか厳しく見ています。
お金を払って品質を作り込むのがソフトウェアですから当然です。

たとえば、マイコン内蔵のカウンタであるとか、AD変換器、割り込み、
I/Oポートにつながっているデバイスやシステムを十分把握した上で
コードを書く必要があります。
もしハードウェアの理解が無いと、とんでもないソフトウェアに
なってしまうかも知れません。

つまり、組込みプログラミングで品質を上げるために、
最も重要な事は、ハードウェアのリテラシーが十分に有り、
ハードウェアを機能的に動作させるようにコードを書くことです。


確かに、この本は「組込みプログラミングで品質を上げるため」の
コードを書く話は書いてありますが、その大前提としての
ハードウェアリテラシーが致命的に欠如しています。


もし、ハードウェアに対する十分なリテラシーが無いと分かったら
その時点で、仕事としてコードを書いてはいけません。
ハードウェアの勉強をしてから、
ソフトウェアの品質を上げる話をして欲しいと思います。

いや、ハッキリ言いましょう。
ハードウェアのリテラシーの無い人は組込みを辞めて頂きたい。
組込みソフトで一番やっかいなのは、
ハードウェアのリテラシーの欠如から来るバグなのですから。

これが...「組込み現場」のCプログラミングなのか!?

2012年10月21日 10時55分26秒 | 組み込みソフト
通勤時間にiPadで本を読めるようになったので、読む量が増えました。
そこで、以前読んだ本を読み直しています。
先日読んだ本が『組込み現場の「C」プログラミング 基礎からわかる徹底入門』です。


この表紙に、SESSAME(組込みソフトウェア管理者・技術者育成研究会)編
とあるように、SESSAMEのテキストをもとに作成されたものです。


ただ、この本、「組込み」と題しているにも関わらず、
ハードの説明がおまけ程度なのです。
どれだけ、おまけかと言うと、Lチカのサンプルのハードの図がこれだけなのです。



マイコンの品種やポート名などはやたら詳しいのに、LEDの
制限抵抗の値が書いてありません。
おそらく、ハード知識のほとんど無いソフト屋さんが書いたんですね。
(それでも10人ほどの名前があがっています)


確かに、簡単なLチカなのに、ソフトディレイではなく、
きっちりタイマを使ってサンプルソフトは書かれています。
そう言う点では、「入門」の割には、すごく良いコードを提供していると思います。


しかし、ハードの説明がホントにおまけなのです。
だいたい、こういう説明を書くとき、一番懲りたことから書くんだと思います。
入出力の説明で、インターフェースに注意とあって、その次が「グランド」なんですから、
グランドの記号の意味が分からなかったんでしょうね。


で、その次が「オープンコレクタ」なんです。
「オープンドレイン」ではなく。マイコンのI/Oの説明ですよ。
著者は相当な歳だと想像できます。
TTL全盛の昔、「オープンコレクタ」のデバイスがありましたが、
マイコンはFETでした。CMOSではなく、nMOSだったので、
オープンドレインの出力も多かったのです
でも、現場ではひっくるめて「オープンコレクタ」と言っていました。
その時代に現役だった人が書いていますね。そのまま時間が止まっています。


少し、引用すると、
---------------------------------------------------------------
 マイコンやデバイスの出力回路では「オープンコレクタ」がよく見られます。
 マイコンをはじめとしたICやLSIはトランジスタを組み合わせて作られます。
これらのトランジスタのうち信号出力回路で用いられるトランジスタは、信号
入力を受ける「ベース」と、「コレクタ」、「エミッタ」と呼ばれる3つの
端子を持ちます。
---------------------------------------------------------------


いやー、さすがにバイポーラのLSIは無いでしょう。
トランジスタと言えば、バイポーラしか頭に無かったんでしょうね。
ま、とにかく「オープンコレクタ」で痛い目にあったんでしょう。


で、その次が「プルアップとプルダウン」です。これが最悪です。
まず、図を見てもらいましょう。
これが、プルアップ、

ひゃー、これじゃ、「アップ」になりまへんがな。
スイッチがオフでも、VCC電位にはほど遠く、Vbe≒0.6Vつまり「L」のまんま。
FETで書いとけば良かったのにね。誰も突っ込まなかったのかねぇ。

もっと酷いのがこの、プルダウン。

をいをい!これじゃ、スイッチをオンしたとたんにトランジスタが死にまっせ。
確かにVCC電位にはなると思いますけどね。(笑


ま、SESSAMEと言えば、ロボコンですが、
ソフトは凄いかも知れませんが、ハードはこの程度だと。
「組込み」でっせ、「組込み」。あーぁ。

iOS6用のクラシックマップを試してみた

2012年10月12日 01時33分20秒 | iPhone
iOS6のマップがダメダメなので、代わるものをと思っていたら、
クラシックマップというのがリリースされました。
アイコンは「復刻版マップ」となっています。


試しに大阪城はこんな感じ。


クラシックと標準を切り換えられるようになっています。


標準にするとこんなになってしまいます。


ただ、このアプリ、あまり良くなかったみたいで、
既にAppストアから削除されています。

ここによると、Maps+というのが、
まだマシだと言うので、こちらを試してみようと思います。

でも、アップルがiOS5用のマップを復活させてくれれば、
一番簡単だと思うんですが、そうはいかないものなんでしょうか。