nRF52832は、Cortex-M4が載っている。
nRF51822はCortex-M0だった。
私のイメージとしては、Cortex-M3から命令数などを削ったものだ。
BLEが使えればいいや、と思って、あまり調べてないのだな。
そのせいか、あまり思い入れがないのだよなぁ。
それではもったいないので、nRF52832はまだあまり使っていないから、まずはCortex-M4ってものを調べて、もう少し身近に感じられるようにしておこう。
まずは、本家ARMのページを見よう。
http://www.arm.com/ja/products/processors/cortex-m/cortex-m4-processor.php
デジタル信号制御向けらしい。
幅が広いな、デジタル信号って。
無線で飛び交ってる信号も、ある程度はデジタル信号だし、音声だってデジタル化すればデジタル信号だ。
画像だって、2次元のデジタル信号と見なせる。
ああ、なんでもかんでもデジタル信号なのだよ。
Cortex-M4のブロック図が載っていた。
これを見ると、デジタル信号処理用の機能があるというよりも、命令としてデジタル信号処理で使うものが増えている、ということなのだろう。
Intelのチップも、そういう時代があったよなぁ。
1回の命令で行列計算をするのが得意なSIMD命令とか。
こちらは、NXPのページ。
http://www.nxp-lpc.com/lpc_micon/
一番下にCortex-M4が載っている。
Cortex-M4Fのことも書いてあり、M4Fは浮動小数演算ユニットが載ったものとのこと。
整数演算だけで除ければF無し、浮動小数ありならF有り、というところか。
ARM Partner Successというサイトがあった。
インスケイプ株式会社、という会社なのかな?
http://www.aps-web.jp/academy/cortex-m/01/g.html
表になっていてわかりやすい。
M3やM4は除算器を持ってるんだねぇ。
そんなわけで、nRF52にも信号処理をさせてあげたいところだ。
とはいえ、「信号処理ユニット」みたいなものがあるわけじゃないので、コードの書き方かコンパイラの機能で対応しないと意味がないと思う。
そういえば、Interface誌にCortex-M4で信号処理する連載が載っていたよな、と思って読み返してみた。
近くにあった2015年4月号では、FFTをやっている。
一部のソースファイルが載っているが、特殊な命令を使っている感じはしない。
ただ、C++でcomplexクラスを使っていたり、その要素がfloatなので、M4Fの浮動小数演算ユニットは使っているだろうし、もしかするとcomplexクラスの中ではすごいことをやってるのかもしれない。
こういう「コンパイラが賢い」というものは、なんとなくGCCなんかは不利で、メーカーが出してるコンパイラが有利な気がしてしまう。
http://stackoverflow.com/questions/16768235/cortex-m4-gcc-float-behavior
FPUの有無でコンパイルオプションが変わってくるけど、対応はしているようですな。
0 件のコメント:
コメントを投稿
コメントありがとうございます。
スパムかもしれない、と私が思ったら、
申し訳ないですが勝手に削除することもあります。
注: コメントを投稿できるのは、このブログのメンバーだけです。