2022.5.24
前へ
次へ
ホームページトップへ戻る


PIC−USBIO using BASIC

〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜
USBインターフェースを内蔵したPICを使ってWindowsパソコンで外部回路を制御するための各種I/O基板の製作記事です。
〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜

[第2回]



●C++は上級者向き言語

前回は「C++は問題あり」と書きました。
ことはC++でもCでも同じことです。
C++のほうがより高機能であるだけにより難解です。
おそらくC、C++あるいはC#を学ぼうとして途中で挫折してしまわれた方も多いのではないかと思います。
挫折まではいかなくても思ったようなプログラムが組めなくて悩んでいる方もいらっしゃるのでは。
そう。
C、C++は上級者向き言語なのですよね。
習得するにはかなりの困難を覚悟する必要があります。
かく言う私めも日々悩んでおります。
ということなので。
せっかくPICを使ってUSB経由で「簡単に」82C55を制御できる回路を作っても、それを制御する言語がCだとしたら、ちっとも簡単ではありません。
因みに。
プログラムの初めの一歩として定番の、”Hello World”を画面に表示するプログラムをCで書くとこうなります。

#include <stdio.h>
main()
{
printf("hello world");
}

なんたって画面にHello Worldと表示させるだけなのですから大したプログラムにはなりません。
でもたったこれだけでも初めてCに出会う方にとってはなかなかに悩ましいところがあるかと思います。
最初の#include<stdio.h>からして、これは一体何だろう?
というところから初心者はつまづいてしまいます。
その次にはmain()とあります。
ここでまた立ち止まってしまいます。
サンプルプログラムによってはここがただのmain()ではなくて
int main(void)
なんて書いてあるものもあります。
うーん。
悩ましい。
さらには{}でくくらなければならないとか、命令文の終わりには;が必須であるとかなどのルールがあります。
そんなことは覚えてしまえば簡単なルールのようでいて、これがまたそれほど簡単ではありません。
ちょいと長いプログラムで一箇所でも{}などをうっかり忘れたりすると大変なことになります。
コンパイラ様はとんでもない「あさって」のエラーメッセージを出してくれたりして、思い当たるふしがなくて思いっきり悩むことになります。
そしてそして。
そもそも。
printf()とは何なのか?
どうしてprintではいけないのか?
などなど。
まじめに学ぼうとすればするほど穴にはまってしまいます。
それだけではありません。
これはまだ人間がわかる形でプログラムをただ書いただけです。
これを機械にわかる形に翻訳しなければなりません。
コンパイラとリンカです。
もうたまらんなあと思ってしまいます。
こんな感じです。



さきほどのプログラム(ソースプログラム)を翻訳するためにまずはhello.cppというファイル名でsaveしておきます。
次にそのhello.cppをコンパイラとリンカにかけます。
私が普段使っているC++コンパイラはBorland C++ Compiler 5.5です。
bcc32 ファイル名[Enter]でコンパイラが起動します。
エラーなくコンパイルが完了すると自動的にリンカが起動して最終的に実行形式プログラム(hello.exe)が翻訳作成されます。
hello.exeはコマンドプロンプト上で動く一般のWindowsアプリケーションと同じようにhello[Enter]で実行されます。
上の画面ではhello[Enter]を実行した結果hello worldと表示されています。

まま。
この程度のことはちょっと慣れてしまえばそれほどのことはないのですが、初心者などはこれだけでも引いてしまいそうです。
事実。
経験された方はおわかりかと思いますが、C、C++を覚えたての頃などは自信満々でコンパイルしたところ、わーというくらいにエラーメッセージが山ほど表示されて面食らってしまったりするのはよくあることです。
問題はそれだけではありません。
実はもっともっと大変なのは、すでに書いておりますようにC++がコンパイラ言語であるというところにあります。
確かにコンパイラ言語で作成したプログラムは最終的には完全に機械語に翻訳されますから高速で実行されるプログラムとなります。
それはしかしあくまで「最終的には」という但し書きつきでのお話です。
そこに至るまでの間は何回も何十回もデバッグとコンパイルを繰り返さなければなりません。
一般にコンパイラ言語はデバッグが容易ではありません。
最終的にバグのないプログラムに仕上げるのには多大な時間と労力を消費することになります。
私が前回「C++には問題がある」と書きましたのはそういうことなのです。

それでは一体どうすればよいのか。
ここはやっぱりBASICだと私は思います。
PC98の全盛期まではBASICが一世を風靡した時代でありました。
しかしWindowsが勢力を増すとともにBASICは過去のものにされていったように思います。
ひとつにはgoto文の多用が「スパゲッティプログラム」であるなどと批判されたりしたことも底流にあるのでは。
確かに先生方のおっしゃることももっともです。
しかしgoto文は便利なのです。
いきなり構造化プログラムなんて言われても初心者は悩むだけです。

主な批判は、gotoを多用すると他人が見たらぐちゃぐちゃで訳がわからんプログラムになってしまうというところにあるようです。
だからスパゲッティだというのでありましょう。
しかし、他人に見せるのではなくて自分だけで書くプログラムならば、楽に書けるプログラムのほうがよろしいのではありますまいか。
そう。
他人が見てわからなくても自分だけがわかっていれば。
簡単なフローチャートなどをメモにしてノートに残しておけばよろしいのです。
他人にとって理解しにくいつうのは今時セキュリティ対策になってよろしいのでは。
おそらく大多数の方はソフトウェアのプロを目指すとかソフトウェア産業の担い手になろうなどとお考えではありませんでしょう。
なまじルールに合った書き方で効率の良いプログラムを書こうとか、処理の速いプログラムとかを書こうなどと余りこだわらなくてもよろしいのでは。
とにかく期待した通りに動くプログラムが書ければそれでよろしいのではありますまいか。
昨今のWindowsパソコンのCPUは超高速ですし、メモリもたっぷりあります。
気楽にプログラムが書ける時代になりました。

勿論。
もしもより高度なプログラムが書けるソフトウェア技術者になりたいとか、個人的にでもよりスキルアップしたいという向上心に燃えておりましたならば、やっぱりC++に習熟することは必須でありましょう。
しかし。
個人が趣味として、あるいは個人事業を営んでいらっしゃる方ができるだけ簡単に楽をして、らしいプログラムをそこそこ書けるようになりたいと願っておりますならば、今時は流行りませんけれどBASICがお勧めだと思います。
C++などはBASICに慣れてきてから少しずつ学んでいっても遅くはないと思います。

そういう次第でありますから。
皆様。
どうかまずは気楽にBASICに親しんでくださいませ。

本日は時間がなくなってしまいました。
次回に続きます。

PIC−USBIO using BASIC[第2回]
2022.5.24upload

前へ
次へ
ホームページトップへ戻る