でんきかいでんのブログ

電子工作、ミシン、ペンタブレット、で使える、アイデア・材料・道具の紹介。PCデータのわかりやすいバックアップ方法。こだわり系テンキーレス有線キーボードの使用感レビューなど。

正当なCSSです! クリエイティブ・コモンズ・ライセンス表示

2015.03.18 [水]

AVRで使う言語

※まだ超初心者なので、覚え書きメモのようなものです。

プログラミング言語の種類

 機械語に翻訳(コンパイル)する前のプログラムを人間が書かなければならないわけですが、そのための言語が世の中には何種類もあるそうです。
 で、AVRに書き込むための翻訳(コンパイル)前のプログラムを書くのに、初心者が勉強しやすい、ネット上や本屋に実例が多くある言語はどれか。
 初心者が始めるのに一番適した言語はどれなのか。
 自分が始めるのにいいのはどの言語なのか。


アセンブリ言語

 プロセッサが直接実行できる言語は機械語のみであるが、機械語はバイナリ(数値)の羅列なので人間には理解しにくい。そこで、機械語を直接記述するのではなく、ニーモニックと呼ばれる命令語でプログラムを記述することで、人間により分かりやすくしたものがアセンブリ言語である。アセンブリ言語の意味は個々のプロセッサに依存するため、高水準言語のような移植性はない。

抜粋引用: アセンブリ言語 Wikipedia


 AVRや参考としてPICを調べているとアセンブリ言語で書かれたプログラム例を見かけます。
 が、Wikipedia情報が正しいのであればそのまま別のマイコンに試してみるということは不可能なわけです。
 中身が読めなければ応用もできないわけですね。
 初心者にはなかなかつらそうです。

プログラミング言語の種類の一つで、コンピュータが直接解釈・実行できる言語(マシン語)と1対1に対応した言語。最もコンピュータに近い低水準言語(低級言語)である。マイクロプロセッサの種類(命令セットの種類)ごとに異なる。

マシン語の命令などは数値の羅列で表現されるため、そのままでは人間には理解しにくい。アセンブリ言語はマシン語の命令などと1対1に対応する英単語などを使い、プログラムを記述する。できあがったプログラムはアセンブラと呼ばれるソフトウェアによってマシン語に変換され、実行される。

現在では、より人間が扱いやすいよう抽象化されたコンパイラ型言語やインタプリタ型言語(スクリプト言語)などの高水準言語が主流だが、マイクロプロセッサの性能を限界まで引き出すチューニングを行いたい場合や、組み込みソフトウェアの開発などハードウェアに近い分野のプログラミングなどでは、現在でも用いられている。

抜粋引用: IT用語辞典 e-Words アセンブリ言語
【 assembly language 】


BASIC言語

 BASIC「言語」とは書かず、一般的にはBASICと書くみたいです。
 なぜかはよくわかりません。
BASIC(ベーシック)は手続き型プログラミング言語のひとつ。
名前は「beginner's all-purpose symbolic instruction code」(「初心者向け汎用記号命令コード」を意味する)の頭字語である。

FORTRANの文法が基になっており、初心者向けのコンピュータ言語として、1970年代以降のコンピュータ(特にパソコン)で広く使われた。パソコンがCUI環境からGUI環境となった現在でも、Microsoft Windowsアプリケーションの主力開発言語であるVisual Basicの文法に影を残している。

BASICの抜粋引用は全て: BASIC Wikipedia

主な特徴
  • 歴史的な経緯から、FORTRANやパソコンではC言語と比較されることが多い。
  • 高水準言語であるとされるが、もともとは構造化などたいして高水準な機能は無い(低水準拡張も多いともされるが、「抜け道」が用意されているのはどんなものでも普通のことである)。
  • ダートマスBASICはコンパイル方式だが、インタプリタとして実装された処理系が多い。
  • 編集環境を兼ねた一種のシェルのようなコマンドラインインタプリタを持つものも多いが、Lispのread-eval-print loop(REPL)のように洗練されたものではない。
  • 古いBASICではすべての行頭に行番号を必要とし、GOTO文などの飛び先は行番号で指定する。行番号は、テレタイプ端末時代に処理系と一体の行指向テキストエディタで扱うのに便利であった。現在でも互換性のために両者を残している処理系もある。
  • 本来は、RUNなどのように、プログラム外から処理系に指示を与えるものはコマンド(命令)、FORなどのようにプログラム中のものはステートメント(文)、と、ダートマスBASICでは明確な区別があったが、次第に混同されていった。
  • プログラム中の予約語(キーワード)には文の他に関数がある。それらと同じ名前を変数に使うことはできない(Tiny BASIC等では変数は一文字といったものも多い)。
  • 文字列変数の内容等を除いて、大文字と小文字を区別しない。入力の時点で全て大文字に変換される処理系もあった。
  • 算術演算子以外の記号は極力使わない。論理演算子はAND、OR、XOR、NOTである。括弧は演算の優先順位も、関数の引数も、配列もすべて「()」のみを用いる。ブロックも「{}」のような括弧ではなく「FOR文からNEXT文までの間」といった構文により指定する。
  • 代入と比較はどちらも「=」である。代入はLET文とするのが本来の形だが(文は全てキーワードから始まる、という規則により)、「A = 1」のような、キーワード「LET」を省略した代入の構文が好まれた。
  • ファーストクラスの型は数値型と文字列型である。数値は浮動小数点数だけのものもあるが、整数型などがあるものもある。文字列型の変数名は末尾に「$」を付ける、といった規則のものもある。
  • LEFT$, MID$, RIGHT$など、文字列操作関数が豊富なことが多い。
  • 明示的な変数宣言を必要とせず、変数を使用し始めたところで宣言したものと解釈される。
  • 変数は自動的に初期化される(実数型は0、文字列型は空文字列)。
  • プログラムは先頭行から実行される。

 BASICそのものは初心者には覚えやすそうな感じです。
 検索してみると、BASICでAVR用のプログラムを書いて、その実例を公開されている親切なサイトもありますね。

他の言語の進化に伴いBASICはあくまで初心者向けの言語でありプロにとっては論外のものということになった。しかし一方でプログラミングの専門家以外の人がプログラミングをするのにBASICが重宝されることも依然多い。例えばUBASICや十進BASICはいずれも数学者が開発したものである。 また、当時のPCの処理速度から、処理の高速化が必要な部分はデータ形式でアセンブリ言語による処理を呼び出すなどの手法もとられた。

各メーカーのパソコンに標準搭載されたBASICは、機種ごとに画面操作やI/O直接操作などの独自拡張が行われた。マイクロソフト製(MS-BASIC、BASICA、G-BASIC、GW-BASICの移植版)のものや、その命令体系を引継ぎ実装したものである、F-BASIC、Hu-BASIC、カタカナで表現するG-BASIC(前述のMicrosoftの物とは異なる)、PETに由来するS-BASIC、SEGAのベーシックカートリッジ、Cを意識したX-BASICなど各社が独自にBASICを開発し、いわゆる「方言」が生まれた。この結果、たとえBASICのメーカーが同じでも「あるパソコンで作ったBASICプログラムは、他のパソコンではそのままでは動かすことができない」ことの方がずっと多かった。

 BASICというのは様々に派生したBASICがあるのですね。
 カタカナで書くBASICまであるとはびっくりです。

近年ではマイクロソフトの独自拡張によるRAD環境Visual Basic (VB) や、MS Officeなどで動作するそのサブセットVisual Basic for Applications (VBA)がWindowsにおける代表的なプログラミング言語のひとつとして広く利用されている。もっともVisual Basicは、GUIに特化したRAD環境として大幅に拡張が施され、元のBASIC言語とは、かけ離れてしまっている。
BASICは依然として初心者向けの言語ではあるが、パソコンに添付されることはなくなった。プログラムの入門でもBASICを使わず、最初からC言語などで教える教育機関も多い。無料で使えるJavaなどの、洗練された後発言語の普及により、開発環境としては選択肢の一つでしかなくなった。

BASICの抜粋引用は全て: BASIC Wikipedia


 ”Visual Basicは、GUIに特化したRAD環境として大幅に拡張が施され、元のBASIC言語とは、かけ離れてしまっている。”

 そうなんだ、ふむ。

C言語

C 言語は手続き型言語であり、コンパイラ言語として設計している。C コンパイラは、自由度、実行速度、コンパイル速度などを追求したが、代わりにコンパイル後のコードの安全性を犠牲にしている。アセンブラのコードと同じことを実現できるようなコンピュータ寄りの言語仕様になっている。

抜粋引用: Wikipedia C言語


”コンパイル後のコードの安全性を犠牲にしている。”

 ん?安全性を犠牲にしている?
 すごく気になる一文なんですが、初心者の自分にはこの辺りはまったくわかりません。
 初心者にもわかるように説明できる方がおられたら是非とも教えて頂きたいところです。
 やはり気になりますからね。

  • アマチュアからプロのエンジニアまで、非常にプログラマ人口が多い。C 言語は正負の両面含めてコンピュータの世界に大きな影響を及ぼしているが、最大の原因はCPUを出荷するときにC言語を同梱していることと、その結果としてのプログラマの多さがある。
  • パソコンはもちろんのこと、組込み用マイコンから大型コンピュータまで、C 言語を使用できるハードウェアは多様である。また、仕様規格・派生言語も多い。
  • 採用ソフトウェア分野が広い。言語が拡張可能であるため、あらゆる分野に対してある程度対応可能であり、現実的な選択肢として用いる。発祥元である UNIX の場合、大抵のことがスクリプト言語・マクロプロセッサやフィルタやそれらの組み合わせで処理できるため、うまく分野の棲み分けができていた面があった。幅広い領域への移植の結果、適切でない分野に C 言語が使われている場合もある。
  • 低水準な記述が出来る高級言語とも、高級言語の顔をした低級言語とも言われる。また、コーディング上の自由度が非常に高い。そのため良くも悪くも何でも出来てしまう強力さは多くのプログラマの支持を集める一方で、セキュリティー脆弱性や潜んだバグによる想定外の動作、コンパイラによる最適化の難しさがあり、それゆえにコンパイル速度が遅いなどの欠点の原因ともなっている。自動車分野ではMISRA-CというC言語部分集合(subset)を定義して、C言語の弱点を補っている。
  • 商用・非商用を問わずコンパイラや C 言語向けのエディタが豊富で開発環境が整備しやすい。

抜粋引用: Wikipedia C言語


 現行のプログラミング言語から初心者がAVRのためにプログラムを覚えるなら、やはりC言語かな、と。
 ただ、こういったプログラミングが超苦手だ、今まで本当にこういうのやったこと無いし拒否反応がすごい、という場合は、BASICにしておいた方がいいのかな、とも思います。

 まーゆっくりあせらず、1日1歩という感じで、騙し騙しでも続けていけば何とかできるようになるもんです。
 他人と比べたりしないことですね。

正直に言うとすでに心が折れかけてる

 【自分が】過去の自分と比べてほんの少しでも前進できればいいんです。
 他人と比べることには何の意味もありません。
 そんなことをして落ち込んでもまったく無駄です。
 その他人はあなたの代わりに人生を豊かにしてくれるわけではありませんからね。
 自分が、自分のために、自分で、自分自身を前進させるしか無いわけです。
 それが生きてるってことですから。

 まー、とりあえずちょっとずつやっていこうと思います。



関連記事

« NEW  | HOME |  OLD »

コメント

コメントの投稿


「コメント非表示」管理人しか閲覧できないコメントにする。

 | HOME | 

TOPへ