RL78マイコン基板(RL78/G10)|CS+(CubeSuite+)で内蔵周辺機能シミュレーションを試す (3)
CS+(旧CubeSuite+)のドキュメントによると、RL78/G10では内蔵周辺機能シミュレーションが出来ることに
なっています。前の2つのエントリ(554, 555)でポート機能(一応は内蔵周辺機能の1つ)のシミュレーションを
試してみたのですが、今度はいかにも内蔵周辺機能らしいタイマ機能のシミュレーションを試してみました。
ここ最近のエントリで試したプログラムは、もともとルネサスの国内向けのユーザコミュニティサイト(Rulz)で
公開されていたRL78/G10のサンプルプログラムのmain()関数を改造したものですが、このサンプルプログラム
にはタイマ割り込みで実装されたWait_1sec()という関数が含まれていますので、これを試してみました。
最初、以下の(1)のプログラムをシミュレータで実行してタイミングチャート上で波形の時間間隔を計ってみた
ところ、1secを期待していたのに380msecしかありませんでした。シミュレータのリリースノートを読んでも
関係しそうな項目は無く、暫く困惑していたのですが、もしかしてと思い、以下の(2)のプログラムを作成して
実際のマイコンに書き込んで10回点滅する時間を計った(ストップウォッチ片手に点灯回数を1, 2, 3, ・・・, 10
と数えて11回目の点灯直前にストップウォッチを止めた)ところ、7.6秒でした。逆算するとWait_1sec()関数
での実際の待ち時間は380msecだったということになりますので、結局、シミュレータでの実行時間の結果と
実際のマイコンでの実行時間は一致していました。(たぶん、もともとは1secだったのでしょうがプログラムの
機能を拡張していった時に待ち時間を短くする必要があって変更されたのだと思います。)
(1) プログラムその1
for (;;)
{
putchar( '/' );
Wait_1sec();
putchar( '/' );
NOP();
}
(2) プログラムその2
for (;;)
{
putchar( '/' );
G_LED_DATA = 0b010101010101;
Wait_1sec();
G_LED_DATA = 0b101010101010;
Wait_1sec();
putchar( '/' );
NOP();
}
以下はシミュレーション結果の画面コピーです。
(1) プログラムその1



(2) プログラムその2



ちなみに、タイマ割り込み処理(多数発生しているうちの1つ)の先頭と末尾のトレースデータは以下のように
なっていました。


なお、もともとのRL78/G10のサンプルプログラムですが、以下のウェブページからダウンロードしました。
Home >> かふぇルネ >> サンプルプログラム等 >> LEDのマトリクス構成での使い方 - Rulz
http://japan.renesasrulz.com/cafe_rene/m/sample_program/218.aspx?loc=JP
追記 : メモ
シミュレーション速度はトレース機能の有効/無効や内蔵周辺機能シミュレータGUIの内容によって変化する
ようです。例えば、今回の760msec期間のシミュレーション時間は、私のパソコンの年代物のCPUでの結果
ですが、以下のように変化しました。(私のパソコンのCPUは、AMD Athlon 1.2GHzというCPUです。)
なお、シミュレータGUIの内容というのは、それぞれ以下の状態のことです。ちなみに、シミュレータGUIの
表示/非表示の違いに関しては、シミュレーション時間に影響しないようでした。
タイミングチャートのみ

何もしない

なっています。前の2つのエントリ(554, 555)でポート機能(一応は内蔵周辺機能の1つ)のシミュレーションを
試してみたのですが、今度はいかにも内蔵周辺機能らしいタイマ機能のシミュレーションを試してみました。
ここ最近のエントリで試したプログラムは、もともとルネサスの国内向けのユーザコミュニティサイト(Rulz)で
公開されていたRL78/G10のサンプルプログラムのmain()関数を改造したものですが、このサンプルプログラム
にはタイマ割り込みで実装されたWait_1sec()という関数が含まれていますので、これを試してみました。
最初、以下の(1)のプログラムをシミュレータで実行してタイミングチャート上で波形の時間間隔を計ってみた
ところ、1secを期待していたのに380msecしかありませんでした。シミュレータのリリースノートを読んでも
関係しそうな項目は無く、暫く困惑していたのですが、もしかしてと思い、以下の(2)のプログラムを作成して
実際のマイコンに書き込んで10回点滅する時間を計った(ストップウォッチ片手に点灯回数を1, 2, 3, ・・・, 10
と数えて11回目の点灯直前にストップウォッチを止めた)ところ、7.6秒でした。逆算するとWait_1sec()関数
での実際の待ち時間は380msecだったということになりますので、結局、シミュレータでの実行時間の結果と
実際のマイコンでの実行時間は一致していました。(たぶん、もともとは1secだったのでしょうがプログラムの
機能を拡張していった時に待ち時間を短くする必要があって変更されたのだと思います。)
(1) プログラムその1
for (;;)
{
putchar( '/' );
Wait_1sec();
putchar( '/' );
NOP();
}
(2) プログラムその2
for (;;)
{
putchar( '/' );
G_LED_DATA = 0b010101010101;
Wait_1sec();
G_LED_DATA = 0b101010101010;
Wait_1sec();
putchar( '/' );
NOP();
}
以下はシミュレーション結果の画面コピーです。
(1) プログラムその1



(2) プログラムその2



ちなみに、タイマ割り込み処理(多数発生しているうちの1つ)の先頭と末尾のトレースデータは以下のように
なっていました。


なお、もともとのRL78/G10のサンプルプログラムですが、以下のウェブページからダウンロードしました。
Home >> かふぇルネ >> サンプルプログラム等 >> LEDのマトリクス構成での使い方 - Rulz
http://japan.renesasrulz.com/cafe_rene/m/sample_program/218.aspx?loc=JP
追記 : メモ
シミュレーション速度はトレース機能の有効/無効や内蔵周辺機能シミュレータGUIの内容によって変化する
ようです。例えば、今回の760msec期間のシミュレーション時間は、私のパソコンの年代物のCPUでの結果
ですが、以下のように変化しました。(私のパソコンのCPUは、AMD Athlon 1.2GHzというCPUです。)
トレース機能を使用する | シミュレータGUIの内容 | シミュレーション時間 |
はい | タイミングチャートのみ | 90秒程(ばらつきが大きかった) |
はい | 何もしない | 62秒程 |
いいえ | タイミングチャートのみ | 42秒程 |
いいえ | 何もしない | 19秒程 |
なお、シミュレータGUIの内容というのは、それぞれ以下の状態のことです。ちなみに、シミュレータGUIの
表示/非表示の違いに関しては、シミュレーション時間に影響しないようでした。
タイミングチャートのみ

何もしない

- 関連記事
-
- RL78マイコン|プログラムが変なところでブレークする様子をシミュレータで見てみた
- RL78マイコン|volatile変数アクセスの衝突防止(結局はDI/EIですが) (2)
- RL78マイコン|KURUMIスケッチ環境でのvolatile変数アクセスの衝突防止の実装 → 無かった
- RL78マイコン|本家Arduinoライブラリでのvolatile変数アクセスの衝突防止の実装
- RL78マイコン|volatile変数アクセスの衝突防止(結局はDI/EIですが) (1)
- RL78マイコン|32bit変数へのアクセスはアトミックじゃない
- RL78マイコン(G12,G13,G14)|CS+(CubeSuite+)でインターバルタイマシミュレーションを試す
- RL78マイコン基板(RL78/G10)|CS+(CubeSuite+)で内蔵周辺機能シミュレーションを試す (3)
- RL78マイコン基板(RL78/G10)|CS+(CubeSuite+)で内蔵周辺機能シミュレーションを試す (2)
- RL78マイコン基板(RL78/G10)|CS+(CubeSuite+)で内蔵周辺機能シミュレーションを試す (1)
- RL78マイコン基板(RL78/G10)|e2studio同梱のPython 2.7.2+pySerial 2.7でシリアルポート操作
- RL78マイコン基板(RL78/G10)|CS+(CubeSuite+)のPythonコンソール上でシリアルポート操作 (3)
- RL78マイコン基板(RL78/G10)|CS+(CubeSuite+)のPythonコンソール上でシリアルポート操作 (2)
- RL78マイコン基板(RL78/G10)|CS+(CubeSuite+)のPythonコンソール上でシリアルポート操作 (1)
- RL78マイコン基板(RL78/G10)|TOOL0端子へのシリアル出力を使ったgetch()関数もどきのコード
2015/01/23 blog-entry-556 category: RL78 /* 16bit,8bit CISC */
| h o m e |