H8,SH,マイコン,ぼやき川柳,ダウンロード

キャッシュ有効(Debug版)

キャッシュを有効にしてもソースはほとんど変わりません。(有効の仕方はInterFace誌2010年8月号、P121)ただ、ロードは大変なことになってしまいました。というのは、CCRレジスタを操作するプログラムはキャッシュ無効領域に配置する必要があります。具体的には0x3C000000〜です。シリアルダウンローダーを使用しているので、HEWのリンカの出力形式はバイナリを指定しています。すると、ロードモジュールのサイズが520MBを超えてしまいました。これでは何時まで待っても「ファイル送信」が終わりません。

ここからは私の勝手な解釈です(真似はしないでください)。キャッシュを無効にするとき、キャッシュとメモリが不一致なら誤動作を起こすのは理解できます。有効にするときは、キャッシュには何も載ってないので問題はないのでは?
と、勝手に考え、下記のモジュールを他と同じ0x1C000000〜に配置しました。

/**********************************************************************************/
/*   Sample for cache.c (SH7262)                                                  */
/**********************************************************************************/
#include "iodefine.h"                                   /* Peripheral Header File */
//#pragma section Cache                                   /* Section Name is PCache */

void Cache_Init(void)                                   /* Cache Initialize       */
{
  CCNT.CCR1.LONG = 0x00000909;                          /* ICI=ICE=OCI=OCE=1      */
  if( CCNT.CCR1.LONG )  ;                               /* Dummy Read             */
}                                                       /* WT=0 (write back)      */

キャッシュが効いているか否かを判断するのは相当難しいような気がします。表面的には分かるは時間だけです





結果を見る限りキャッシュは有効になっているようです
ただ、悲しい事実も判明しました。キャッシュを有効にするとグラフの立上りは遅れるのですが、それでも桁数を2倍にすると時間は約4倍。桁数を10倍にすると時間は約100倍になります。
今後、Release+最適化、や計算アルゴリズムを変更してチューニングをしてみたかったのですが、それでもやはり、立上りがおそくなるだけで限界は見えています。結局はπを求める計算式を改良するしかないようです
 

メモ
上記のCCRレジスタ操作をキャッシュ無効領域から行う方法としてプログラムを高速RAMへ配置する方法が考えられる。その方法として、
(1)シリアルFlash ROMへパイ計算プログラムへ入れる
  スピード優先でコンパイルしてもサイズは28KB程度なので収まる
(2)シリアルダウンローダを改修する
 ダウンローダ先に高速RAM領域を指定できるように改造。これは自分自身の領域を上書きすることになる。Resetすれば、再度、ダウンローダを読み込むので出来るはず



 
 

コメントをかく


「http://」を含む投稿は禁止されています。

利用規約をご確認のうえご記入下さい

Menu

管理人/副管理人のみ編集できます