一般に、コンピューターを教えるとき、
2進数までは教える。
AND、OR,NAND,NOR、XORについては教える。
で、その先・・・
この話はぶっ飛んで、いきなり、プログラムの話とかにいっていないだろうか?
あんなに覚えた、2進数は、どこに使われているの?
みたいな・・・
その間を埋めないと、arduinoとか、組み込みとかをC言語で、何で制御
できるのか、よくわかんないことになるので、ちょっと、この間について
触れてみたい。
■記憶回路と周辺機器
コンピューターは結局、情報処理をするものであるが、これは、
情報:データを
処理:処理加工する
ことである。
そして、データは、記憶装置に置かれる。
入出力したデータも、記憶装置に置かれる。
記憶装置というのは、フリップフロップを使うと作れて、こいつは、1といれたら、
電気が入っている間、書き換えない限り1になる。0も同じ。
で、いろんなロボットも、通信も、ディスクの書き換えも、結局は、電気信号の
0,1→電気的なスイッチON,OFFで行われ、それは、記憶装置のどこかに
つながっていて、そこのON,OFF(1,0)で決まる。
だから、この、いろんな装置に繋がる記憶装置の0、1を、コンピューターで
制御できれば、コンピューターでいろんな装置が制御できることになる。
じゃあ、このコンピューターで、いろんな装置に繋がる記憶装置の0、1をセット
できるのか・・・
■アドレス
これら、いろんな装置に繋がる記憶装置の0、1の場所には、名前がついている。
そう、アドレス。
アドレスを指定して、ON,OFFを設定すればいい。
ここでC言語。
C言語では、ポインタという、アドレスを指定して、その中身を(*変数で)
みたり、セットしたりできたりする。
こんなかんじ。
volatile unsigned int *PINSEL0;
PINSEL0=0xE002C000;
こうすると、*PINSEL0で、アドレスE002C000の中身が見れる。
*PINSEL0=1で、アドレスE002C000の値を1にセットできる。
このアドレスE002C000が、ハードウェアの装置の入出力するところとつながると、
その装置を操作できる。
OS上だと、そういうところはアクセスできないが(OSで禁止されるので)
OSが無ければ、アクセスOKとなる。
■加算機
これで、いろんなロボット、センサー、入出力装置なんかのデータは、
取ったりセットしたりできるようになった。
つぎに、これを処理する。
結局、処理は、積分だろうが微分だろうが、最終的には、四則演算になり、
四則演算は、結局+に帰着する。なので、2進数の足し算ができればよい。
2進数の足し算は、
信号Aと信号Bがあり、これが、Oと1のときがある。
そのとき、桁上がりCと、答えXは、こんなかんじのくみあわせ
AB|CX
----------
00|00
10|01
01|01
11|10
ここで、ABとCだけみると、ABが1のときのみCが1、
つまり、ANDなので、ABとCをAND回路で結べばよい
ACとXをみると、ABがどちらか1のとき1、
つまり、XORなので、ABとXをXOR回路で結べばよい
ANDやXORの回路はICとして売っているので、これを
線でつなぐ。こいつが加算機
現実には、こんなものが、果てしなくいっぱい並んでいる。
そして、計算している。これが、CPU(のアキュムレーター)
こんなかんじで、線から値をとってきて、計算して、その結果をまた線に返して
・・・を繰り返している。
ざっくり説明すると、こんなかんじ。
2進数までは教える。
AND、OR,NAND,NOR、XORについては教える。
で、その先・・・
この話はぶっ飛んで、いきなり、プログラムの話とかにいっていないだろうか?
あんなに覚えた、2進数は、どこに使われているの?
みたいな・・・
その間を埋めないと、arduinoとか、組み込みとかをC言語で、何で制御
できるのか、よくわかんないことになるので、ちょっと、この間について
触れてみたい。
■記憶回路と周辺機器
コンピューターは結局、情報処理をするものであるが、これは、
情報:データを
処理:処理加工する
ことである。
そして、データは、記憶装置に置かれる。
入出力したデータも、記憶装置に置かれる。
記憶装置というのは、フリップフロップを使うと作れて、こいつは、1といれたら、
電気が入っている間、書き換えない限り1になる。0も同じ。
で、いろんなロボットも、通信も、ディスクの書き換えも、結局は、電気信号の
0,1→電気的なスイッチON,OFFで行われ、それは、記憶装置のどこかに
つながっていて、そこのON,OFF(1,0)で決まる。
だから、この、いろんな装置に繋がる記憶装置の0、1を、コンピューターで
制御できれば、コンピューターでいろんな装置が制御できることになる。
じゃあ、このコンピューターで、いろんな装置に繋がる記憶装置の0、1をセット
できるのか・・・
■アドレス
これら、いろんな装置に繋がる記憶装置の0、1の場所には、名前がついている。
そう、アドレス。
アドレスを指定して、ON,OFFを設定すればいい。
ここでC言語。
C言語では、ポインタという、アドレスを指定して、その中身を(*変数で)
みたり、セットしたりできたりする。
こんなかんじ。
volatile unsigned int *PINSEL0;
PINSEL0=0xE002C000;
こうすると、*PINSEL0で、アドレスE002C000の中身が見れる。
*PINSEL0=1で、アドレスE002C000の値を1にセットできる。
このアドレスE002C000が、ハードウェアの装置の入出力するところとつながると、
その装置を操作できる。
OS上だと、そういうところはアクセスできないが(OSで禁止されるので)
OSが無ければ、アクセスOKとなる。
■加算機
これで、いろんなロボット、センサー、入出力装置なんかのデータは、
取ったりセットしたりできるようになった。
つぎに、これを処理する。
結局、処理は、積分だろうが微分だろうが、最終的には、四則演算になり、
四則演算は、結局+に帰着する。なので、2進数の足し算ができればよい。
2進数の足し算は、
信号Aと信号Bがあり、これが、Oと1のときがある。
そのとき、桁上がりCと、答えXは、こんなかんじのくみあわせ
AB|CX
----------
00|00
10|01
01|01
11|10
ここで、ABとCだけみると、ABが1のときのみCが1、
つまり、ANDなので、ABとCをAND回路で結べばよい
ACとXをみると、ABがどちらか1のとき1、
つまり、XORなので、ABとXをXOR回路で結べばよい
ANDやXORの回路はICとして売っているので、これを
線でつなぐ。こいつが加算機
現実には、こんなものが、果てしなくいっぱい並んでいる。
そして、計算している。これが、CPU(のアキュムレーター)
こんなかんじで、線から値をとってきて、計算して、その結果をまた線に返して
・・・を繰り返している。
ざっくり説明すると、こんなかんじ。