補足情報
本文の一部追加・変更について(P.229~235)
(2013年11月6日更新)
組込みソフトウェア開発でマイコンまわり、あるいはマイコン周辺のプログラムを作成する際に知っておくべきハードウェアの知識というのは、開発対象の製品によって実に多岐に渡ります。本書では説明のためにバイポーラトランジスタの回路を図示しましたが、全体で見るとバイポーラトランジスタよりも電界効果トランジスタ(FET)を用いた回路の方が、はるかに多くなってきています。そこで、出力の説明にはバイポーラトランジスタを残しますが、入力の説明については回路素子を書かないように図と本文の一部を修正しました。
電界効果トランジスタの種類や動作原理、使用の際(デバッグなどで回路基板を扱う際)の注意点などについても書くのがベストですが、そちらに深入りするのは本書の範囲ではありませんので踏み込んでいません。これについては書籍やインターネットにさまざまな情報がありますから、ぜひご覧になり、知識として押さえておくことをお勧めします。(著者)
本文中に記載のメーカーの名称について
(2013年12月25日更新)
下記のメーカーについては社名の変更がありました。
読み替えてくださいますよう、お願いいたします。
旧
ルネサステクノロジ
新
ルネサスエレクトロニクス
お詫びと訂正(正誤表)
『組込み現場の「C」プログラミング基礎からわかる徹底入門』平成19年4月25日発行第1刷におきまして(P.221の図3.29については平成19年6月25日発行第2刷においても)、一部記述内容に誤りがありましたので、以下のように訂正させていただきます。編集作業上のミスにより読者の皆さまにご迷惑をお掛けいたしましたことを心よりお詫び申し上げます。また、今後二度と同じような間違いを犯さないために細心の注意を払って制作に当たるよう心掛けて参る所存でございますので、読者の皆さまにはご寛恕を賜りますよう、どうぞよろしくお願い申し上げます。
(2012年5月23日更新)
第1章 P.16 下から4行目
誤 また、C++やJavaでは
正 また、特にJava では
第2章 P.82 上から5~7行目
誤 符号付き整数では、右シフトで空いた符号ビットにつねに1が補充されます.
このため、右シフト=「2での除算」は負の整数でも成立します.次の例を見てください.
正 これは算術右シフトの例ですが、符号付き整数の算術右シフトでは空いた符号ビットがつねに補充されます.
このため、右シフト=「2での除算」は負の整数でも成立します.次の例を見てください.
第2章 P.82 下から8~10行目
誤 この特性を理解していないで、ビット演算を符号付き変数で実行してしまい、右シフトしたときに上位ビットが0になることを期待してしまうと、おかしなことになってしまいます.
正 また、右シフトには上記の算術シフトのほかに論理シフトがあり、こちらは0が補完されます.右シフトが算術シフトであるか論理シフトであるかは処理系に依存しますから、よく確認して使用するようにしましょう.
第3章 P.175 共用体(union)の定義例
誤
struct s_sample2 {
short int posi_x;
short int posi_y;
union {
long color;
struct {
unsigned char red;
unsigned char green;
unsigned char blue;
}
} u_;
} pixel2;
正
struct s_sample2 {
short int posi_x;
short int posi_y;
union {
long color;
struct {
unsigned char red;
unsigned char green;
unsigned char blue;
} st; ←この宣言が漏れている!
} u_;
} pixel2;
第3章 P.177 【配置へのアクセスの等価プログラム―1】末尾
誤
val = (short int)*(pbase + m * sizeof(short int));
正
val = * (short int *) (pbase + m * sizeof(short int));
第3章 P.221 図3.29
現状、データバスに接続されているアドレスデコーダの上流配線は、アドレスバスに接続されるのが正しい。
正
第5章 P.270 13行目/P.284 下から8行目
誤
/* timer B0 register */
#define TB0 (*(volatile char *) 0x0390)
正
/* timer B0 register */
#define TB0 (*(volatile unsigned short *) 0x0390)