パスワードを忘れた? アカウント作成
31846 journal

Lcsの日記: いまから始める人のためのC言語入門書は何がいい?(組込用) 7

日記 by Lcs

**の手習いという奴で(!?)AtmelのAVRをC言語(WinAVR)でプログラミング勉強中。
なんとこれが生まれて初めてのC体験という奴で、web上をさまよいながらコードをつぎはぎしてはコンパイラに怒られている状態な訳ですね。

で、WinAVR単独の書籍というのはおそらく無いので、どういった入門書を買うべきか諸先輩方にお尋ねしたい訳です。いかがなもんでしょうか?

#K&Rの本を買った記憶があったけど出てこない。買い直しか?

この議論は賞味期限が切れたので、アーカイブ化されています。 新たにコメントを付けることはできません。
  • アセンブラは判っているのか?とか
    他にどのような言語を使ったことがあるか?とか
    組み込み以外の環境ってどういうのを知っている?とか
    (中でも unix [含む Linux] 環境って使ったことは? 今手元には??)

    というのがあると大幅に絞込みができます。

    とりあえずデフォルトでお勧めできるのはこの本。

    CプログラミングFAQ―Cプログラミングのよく尋ねられる質問 (新紀元社情報工学シリーズ) [amazon.co.jp]

    中級の悩みの大半はこれで解消します。
    --
    fjの教祖様
  • 技術評論社から出版されている

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

    というのが、C言語を使った組み込みプログラミングについて広く浅く解説してあると思います。

    ただ、文法についての解説書ではないため、そのあたりは一般的な文法書を参考にしたほうが良いかもしれません。
    • 正直なとこ、組み込み用のC言語(チップメーカーが開発用言語として出しているモノ)って
      パソコンやワークステーションのC言語とちょっと違いますよね。

      変な規制がいろいろあって大変。
      関数がでかくてメモリを喰ってしまうので気軽にprintf()を使えないとか
      (これはシミュレーション用に最適化した高速演算ソフトでもそうだけど)、

      実は初期化されているはずの文法で書いても初期化されている前提が通用しないCモドキ言語だったり
      # 確実に初期化したいなら定義にconstを使えと書いてあった時には目を疑った。

      Cでは扱いにくいけど組み込みでよく使われるビット処理を便利に行えるように
      勝手な拡張が行われていたりとか。いろいろ変な所に手が入ってるので混乱します。
      親コメント
  • 書籍の情報ありがとうございます。とりあえずAmazonのWishList入りです。

    で、もうちょっと情報を書くとすると・・

    >アセンブラは判っているのか?とか

    二十数年前にトラ技の連載/別冊でCP/Mマイコンを作る書籍がありましたが、ボードの自作経験はあり、今回もハードウェアは自作。
    当時はハンドアセンブルでパチパチと2進スイッチで入力して・・ぐらいで以降二十数年放置。

    >他にどのような言語を使ったことがあるか?とか

    パソコン通信時代にPC98のターボパスカルでmidi関係のフリーソフト公開前歴有り。当時割り込みが理解できずに挫折。これも二十数年前だな。
    以降は近年になってperlのスクリプトのありものを改造したりとかその程度。
    C言語は過去に触ったこと無し。

    >組み込み以外の環境ってどういうのを知っている?とか
    (中でも unix [含む Linux] 環境って使ったことは? 今手元には??)

    Linux系は結局インストールして使わなかったですねえ(遠い目) 自宅鯖はWindows環境ですし。今回はWindowsにAVRStudio+WinAVRでチマチマやってます。で、Linux環境云々を用意する予定はないです。Windows上で全て片付けます。

    とりあえず評価ボード作って7セグLED4桁をweb上のソース探してダイナミック点灯させるところまでは自力でできたものの、その先にいろいろ実装するところで煮詰まっている状態、ですかね。プログラミングに関する知識はかなり怪しいです、ええ。
    --
    --- Lcs(http://lcs.myminicity.com/ [myminicity.com])
    • WinAVRってことはベースになっているコンパイラはgccですか?
      ならC言語環境としてはあまり標準から逸脱していないですね。

      アセンブラをいじった事がある、と言うことは「メモリ上のビットイメージ」が「どう実行されるか」の大雑把なイメージがある、と言うことなので…ポインタの概念など、普通の人が引っかかるところは大丈夫なのか。多分、ハッカーのたのしみ [amazon.co.jp]なんかは判っていると思っていいよね(覚えていなくてもまるっきり判らない、と言うことは無かろう、と)。

      むしろ、構造体とか、配列とか、勝手にpaddingするとか、volatile 宣言しないとアクセスコード丸々消してくれるオプティマイザーとか…そっちの方でしょうか、悩みは。特にgccは「インラインで書いたはずのコードごと」消したりしますからね。「それ、いらないじゃん」つーて。この辺は「コンパイラの気持ち」を理解する必要があるので…コンパイラの構成と最適化 [amazon.co.jp]かな?

      unixが判っていると良いのは、C言語とunixは「共進化」の関係にあるからです。ほら、C言語でunix kernelって書かれてるし。unix上の大抵のツールはライブラリも含めてCで書いてあるから。ソースコードを全部持っておくと、サンプルコードが一杯状態なんですよ。良い意味でも、悪い意味でも。

      .

      うーん。普通のプログラマから入ってくる人たちとは「逆向き」にハードウェアから来ている人の場合…あとは何がいいかなぁ。入手可能性を考えずに、C言語という「言語」だけに拘らずにリストアップすると…

      Linkers & Loaders [amazon.co.jp]
      エキスパートCプログラミング −知られざるCの深層 [amazon.co.jp]
      プログラミング作法 [amazon.co.jp]
      BINARY HACKS [amazon.co.jp]
      省メモリプログラミング [amazon.co.jp]

      あたりでしょうか…。一応、私が過去に読んだ事がある本の中で計算機関係は、感想も含めてここ [geocities.jp]とここ [geocities.jp]に開示してあります。参考になるようでしたら幸いです。
      --
      fjの教祖様
      親コメント
      • 各種参考書のご紹介ありがとうございます。参考にさせていただきます。

        AVRに繋がっている入出力を動かすのは先人のコードをつぎはぎしながら修正してどうにかなったのですが、一部のレジスタをEEPROMに放り込んで設定を記憶させるところで躓いていたりします。このあたりの先人のコードをみるといろんな事をやっていて、そのまま持ってきても動かないわけですね。で、先人が書いているコードを理解できなくてそりゃ本も読まずにOJTじゃ限界もあろうと(汗 なぜこの位置に関数とかサブルーチンを置いているのか、どの場所で各種宣言とか型の定義を置くべきなのか定義しないといけないのか、そもそもこの関数の引数の与え方が間違ってるんじゃないかとか、まぁその辺をおさらいしないとまずいなと(汗

        とりあえず昨晩オシロみながら必要最低限の動作やタイミングは確認したのですが、オプションの実装は格闘が続きそうです。動作確認している内にアイデア思いついてCPUのピン数足りなくなりそうだし(汗
        --
        --- Lcs(http://lcs.myminicity.com/ [myminicity.com])
        親コメント
        • …なんか話を聞く限り、それは周辺チップの制御法の詳細情報が必要だ、と言うことであってC言語では無い気が…

          そういうのは…私は『Primitive な所はインラインアセンブラで書いちゃう』派だなぁ。
          特定アドレスに対するメモリIOだけで済むなら話は別だけれど…。
          --
          fjの教祖様
          親コメント
typodupeerror

海軍に入るくらいなら海賊になった方がいい -- Steven Paul Jobs

読み込み中...