GR-SAKURA
GR-KURUMI
GR-COTTON
GR-CITRUS
GR-PEACH
GR-KAEDE
GR-ADZUKI
GR-LYCHEE
GR-ROSE
GR-MANGO(*)
SNShield
Web Compiler
IDE for GR
TOPPERS関連
女子美コラボ
その他
※プロデューサミーティング中
作り方使い方資料
イベント関連
作品記事
体験記事
ライブラリ
ツール
その他・過去ファイル
http://gadget.renesas.com/software/e2studio/lychee_sketch_V104.zipのe2 studioのプロジェクトをベースにデジタル出力をしてみたのですが、出力に0.5usほどかかっているようです。P4_0を無限ループ中でトグルしているのみのコードです。0.5usというのは妥当なんでしょうか?これを、早くする方法はありますか?レジスタ直接アクセスすれば早くなるんでしょうけど、DigitalOutのライブラリを読んでみると、ライブラリが原因でここまで遅くなるようには思えなかったです。64×64のLEDマトリクスをダイナミック点灯しようとしていてデジタル出力の遅さが、もろにチラつきとして現れるので、何か、良い方法があればアドバイスいただきたいです。下記、コードです。
#include "mbed.h" DigitalOut test(P4_0); Thread T1(osPriorityNormal, 500 * 1024); void draw_main(); int main() { T1.start(&draw_main); while (true) { } return 0; } void draw_main() { while (true) { test = !test; } }
波形測定結果です。
DigitalOut を使用しても、
レジスタ直接アクセスでも結果は変わりませんでした。
ロジアナのサンプリングが荒くて見えてないだけ?
と思って、for分で1000000回ポートパタパタしたあとでD0をトグルし、
D0の波形を測定することを時間を計測すると、
D0は0.5sおきにパタパタしてました。
やはり、デジタル出力に0.5usかかっているようです。
何がボトルネックになってるんでしょうか。。。
チャンネル1(上から2段目)がD0の波形です。
以下、コードです。
#include "mbed.h"
#include "iodefine.h"
#define DIGITAL_OUT
#ifdef DIGITAL_OUT
DigitalOut test(P4_0);
DigitalOut result(D0);
#endif
void draw_main();
int main() {
draw_main();
return 0;
}
void draw_main() {
#ifndef DIGITAL_OUT
GPIO.PM5 &= ~(1<<14);
GPIO.PM4 &= ~(1<<0);
GPIO.PMC5 &= ~(1<<14);
GPIO.PMC4 &= ~(1<<0);
while (true) {
for(long i=0; i<1000000; i++){
test = !test;
#else
GPIO.P4 ^= (1<<0);
result = !result;
GPIO.P5 ^= (1<<14);