RoboCup Junior Japan Rescue Kanto OB
2005~2013
2005~2013
今回は前々から告知していた「レジスタ」というものについてお話しします。
レジスタとは、パソコンのプロセッサ、つまり中のCPUだとかDSPだとか、
そういった処理装置が持つ所謂小さなメモリのようなものです。
通常コンピューターは実際に処理を行なっている部分とデータを保存している部分はそれぞれ独立していて、
片方をCPUだとか言って、もう片方をメモリだとか言ったりしますよね。
コンピューターは通常、このようにデータの保存場所とデータで処理を行う場所が分かれているので、
いちいち何かする度にメモリとCPU間でデータの通信を行う必要があります。
でもそれだと、通信の時間分、処理速度が遅くなってしまいますので性能としては残念なコンピューターが出来上がる訳です。
だからといって、CPUとメモリを一緒にしてしまうと、それはそれで勝手が悪くなるし、何より汎用性が低下してしまいます。
だったら、データの中でも常に使われてデータ総量も少ないもの、
例えば一番簡素な「命令」のデータなどはCPUと一緒でいいんじゃないか?ということになりまして、
そこで考えだされたのがレジスタです。
レジスタというのは、CPUに内蔵されている高速メモリだと考えて頂ければわかりやすいと思います。
よく使われる命令などのデータに関してはCPUに直接保存することで、通信の量を抑え、処理を高速化しているのです。
まぁレジスタってのはそんなものです。逆に言うと、レジスタのデータ自体が一つの命令として意味を持っているので
レジスタ自体を直接書き換えてしまえば、一番早く、的確にCPUに命令を送ることが出来るという訳です。
この仕組みはマイコンであるPICも変わりませんから、今まで何度も「レジスタを書き換える」という話が出てきたのです。
レジスタのデータは基本的にbit単位で構成されていて、
8bitCPUなら8bit、16bitCPUなら16bitでひとつのレジスタは構成されています。
このレジスタのbitの中身、つまり0、1を変えてやることでレジスタの中身は書き換えられます。
基本的に一つのレジスタの中にはいくつかの命令が組み込まれていて、
レジスタ内の0,1を変えることでレジスタ内の命令の全てを同時に変更することもできたりします。
また、レジスタは書き込むだけではなくて、読み込むこともでき、
指定しているレジスタのbitが書き込みオンリー(W)なのか、読み込みオンリー(R)なのか
読み書きどっちも行えるのか(R/W)というのも重要な点です。
特に(R/W)のレジスタは、思いもよらない様な使い道を見つける場合も多々ありますので要チェックですね。
と、まぁこれでレジスタの説明は以上です。
と言っても文章だけなのでちょっとわかりにくいですよね。
PIC Cだとレジスタ一つ一つに名前がついていて、変数と同じような感覚で(R/W)が行えます。
先程の記事で記載したプログラムでも大量にレジスタの書き込みは行なっているので
こっちのプログラムからレジスタを探してみると、大体の感じはわかって頂けるのではないでしょうか。
このプログラムだと、直接レジスタを操作する命令はint mainの中にしかありませんが、
その中だと、見た感じ9割近くそれに該当するような・・・。
HITECでプログラムを書くと本当にレジスタだらけになってきてしまいますので、
PIC、特にHITECでプログラムを書く場合はこのレジスタの理解が大事であるということが解って頂ければと思います。
という訳で今回の記事はこのへんで。
(^・ω・)ノ RadiumProduction in RoboCup Junior
レジスタとは、パソコンのプロセッサ、つまり中のCPUだとかDSPだとか、
そういった処理装置が持つ所謂小さなメモリのようなものです。
通常コンピューターは実際に処理を行なっている部分とデータを保存している部分はそれぞれ独立していて、
片方をCPUだとか言って、もう片方をメモリだとか言ったりしますよね。
コンピューターは通常、このようにデータの保存場所とデータで処理を行う場所が分かれているので、
いちいち何かする度にメモリとCPU間でデータの通信を行う必要があります。
でもそれだと、通信の時間分、処理速度が遅くなってしまいますので性能としては残念なコンピューターが出来上がる訳です。
だからといって、CPUとメモリを一緒にしてしまうと、それはそれで勝手が悪くなるし、何より汎用性が低下してしまいます。
だったら、データの中でも常に使われてデータ総量も少ないもの、
例えば一番簡素な「命令」のデータなどはCPUと一緒でいいんじゃないか?ということになりまして、
そこで考えだされたのがレジスタです。
レジスタというのは、CPUに内蔵されている高速メモリだと考えて頂ければわかりやすいと思います。
よく使われる命令などのデータに関してはCPUに直接保存することで、通信の量を抑え、処理を高速化しているのです。
まぁレジスタってのはそんなものです。逆に言うと、レジスタのデータ自体が一つの命令として意味を持っているので
レジスタ自体を直接書き換えてしまえば、一番早く、的確にCPUに命令を送ることが出来るという訳です。
この仕組みはマイコンであるPICも変わりませんから、今まで何度も「レジスタを書き換える」という話が出てきたのです。
レジスタのデータは基本的にbit単位で構成されていて、
8bitCPUなら8bit、16bitCPUなら16bitでひとつのレジスタは構成されています。
このレジスタのbitの中身、つまり0、1を変えてやることでレジスタの中身は書き換えられます。
基本的に一つのレジスタの中にはいくつかの命令が組み込まれていて、
レジスタ内の0,1を変えることでレジスタ内の命令の全てを同時に変更することもできたりします。
また、レジスタは書き込むだけではなくて、読み込むこともでき、
指定しているレジスタのbitが書き込みオンリー(W)なのか、読み込みオンリー(R)なのか
読み書きどっちも行えるのか(R/W)というのも重要な点です。
特に(R/W)のレジスタは、思いもよらない様な使い道を見つける場合も多々ありますので要チェックですね。
と、まぁこれでレジスタの説明は以上です。
と言っても文章だけなのでちょっとわかりにくいですよね。
PIC Cだとレジスタ一つ一つに名前がついていて、変数と同じような感覚で(R/W)が行えます。
先程の記事で記載したプログラムでも大量にレジスタの書き込みは行なっているので
こっちのプログラムからレジスタを探してみると、大体の感じはわかって頂けるのではないでしょうか。
このプログラムだと、直接レジスタを操作する命令はint mainの中にしかありませんが、
その中だと、見た感じ9割近くそれに該当するような・・・。
HITECでプログラムを書くと本当にレジスタだらけになってきてしまいますので、
PIC、特にHITECでプログラムを書く場合はこのレジスタの理解が大事であるということが解って頂ければと思います。
という訳で今回の記事はこのへんで。
(^・ω・)ノ RadiumProduction in RoboCup Junior
カレンダー
最新CM
カテゴリー
らじぷろ目次
らじぷろ検索機
最新記事
(01/01)
(01/03)
(08/27)
(04/29)
(01/01)
(11/20)
(09/06)
(09/04)
(08/09)
(08/06)
(07/27)
(05/29)
(03/15)
(01/01)
(05/07)
プロフィール
HN:
Luz
性別:
男性
アーカイブ