Test program GR-PEACH

Dependencies:   mbed-src

このプログラムには、二つの気になる点があります。

1)LEDのON/OFFがほかのmbedと論理が反対です。
ほかのmbedボードは正論理(1=ON)ですが、このボードは負論理(0=ON)です。
良いとか悪いとかコメントする気はありませんが、ほかのボードから移植するときに、暗黙にONを1とするmbed文化と衝突することは間違いないでしょう。
ポートの出力電流も調べてみましたが、+/-2mAと規定(P1_0から7は10mA)されています。
現在、どのくらいの電流が流れているかは調査していませんが、今の使い方であれば、アノードコモンからカソードコモンのLEDに変えれば同じように実力での駆動は問題ないでしょう?

2)もう一点はprintf()の出力タイミングです。
LEDの個別のON/OFFとprintf()で仮想COMを経由してホストPCに吐き出される文字列が同期していません。
どうもwait()関数の呼び出しまでFIFO(詳しくまだ調べていないので憶測)に蓄えて一気に吐き出しているように見えます。
printf()機能はmbedでは大切なDebugツールです。内容を精査いただけると幸いです。

変更した点
2) printf(debug用)とSerialを宣言してのちのprintfを使い分けて、動作が違うことが判明。
宣言したprintfでは問題なし。この差の原因が何かは現時点では不明。

使用方法

//#define DISP_COM  //コメントアウトしてコンパイルで問題発生(旧バージョンと同等)
#define DISP_COM    //問題が消える
Revision:
0:a17b3cf2f466
Child:
1:a399a743d109
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/main.cpp	Sat Nov 29 12:29:49 2014 +0000
@@ -0,0 +1,129 @@
+#include "mbed.h"
+
+//#define PIN_NUM
+#define LED_NAME
+//#define LED_COLOR
+
+#if defined(PIN_NUM)
+DigitalOut myledR(P4_4);
+DigitalOut myledG(P3_2);
+DigitalOut myledB(P4_6);
+DigitalOut myledU(P4_7);
+#elif defined(LED_NAME)
+DigitalOut myledR(LED1);
+DigitalOut myledG(LED2);
+DigitalOut myledB(LED3);
+DigitalOut myledU(LED4);
+#elif defined(LED_COLOR)
+DigitalOut myledR(LED_RED);
+DigitalOut myledG(LED_GREEN);
+DigitalOut myledB(LED_BLUE);
+DigitalOut myledU(LED_USER);
+#endif
+
+#define ON  0
+#define OFF 1
+
+int main() {
+    uint32_t n = 0;
+    
+    printf("Start mbed program\r\n");
+    myledR = OFF;
+    printf("RF,");
+    myledG = OFF;
+    printf("GF,");
+    myledB = OFF;
+    printf("BF,");
+    myledU = ON;
+    printf("UN");
+    while(1) {
+        wait(5.0);
+        printf(" passed %4d Sec\r\n", n +=5);
+        printf("R=ON ,G=OFF,B=OFF ");
+        myledR = ON;
+        printf("RN,");
+        myledG = OFF;
+        printf("GF,");
+        myledB = OFF;
+        printf("BF,");
+        myledU = OFF;
+        printf("UF");
+        wait(5.0);
+        printf(" passed %4d Sec\r\n", n +=5);
+        printf("R=OFF,G=OFF,B=OFF ");
+        myledR = OFF;
+        printf("RF,");
+        myledG = OFF;
+        printf("GF,");
+        myledB = OFF;
+        printf("BF,");
+        myledU = ON;
+        printf("UN");
+        wait(5.0);
+        printf(" passed %4d Sec\r\n", n +=5);
+        printf("R=OFF,G=ON ,B=OFF ");
+        myledR = OFF;
+        printf("RF,");
+        myledG = ON;
+        printf("GN,");
+        myledB = OFF;
+        printf("BF,");
+        myledU = OFF;
+        printf("UF");
+        wait(5.0);
+        printf(" passed %4d Sec\r\n", n +=5);
+        printf("R=OFF,G=OFF,B=OFF ");
+        myledR = OFF;
+        printf("RF,");
+        myledG = OFF;
+        printf("GF,");
+        myledB = OFF;
+        printf("BF,");
+        myledU = ON;
+        printf("UN");
+        wait(5.0);
+        printf(" passed %4d Sec\r\n", n +=5);
+        printf("R=OFF,G=OFF,B=ON  ");
+        myledR = OFF;
+        printf("RF,");
+        myledG = OFF;
+        printf("GF,");
+        myledB = ON;
+        printf("BN,");
+        myledU = OFF;
+        printf("UF");
+        wait(5.0);
+        printf(" passed %4d Sec\r\n", n +=5);
+        printf("R=OFF,G=OFF,B=OFF ");
+        myledR = OFF;
+        printf("RF,");
+        myledG = OFF;
+        printf("GF,");
+        myledB = OFF;
+        printf("BF,");
+        myledU = ON;
+        printf("UN");
+        wait(5.0);
+        printf(" passed %4d Sec\r\n", n +=5);
+        printf("R=ON ,G=ON ,B=ON  ");
+        myledR = ON;
+        printf("RN,");
+        myledG = ON;
+        printf("GN,");
+        myledB = ON;
+        printf("BN,");
+        myledU = OFF;
+        printf("UF");
+        wait(5.0);
+        printf(" passed %4d Sec\r\n", n +=5);
+        printf("R=OFF,G=OFF,B=OFF ");
+        myledR = OFF;
+        printf("RF,");
+        myledG = OFF;
+        printf("GF,");
+        myledB = OFF;
+        printf("BF,");
+        myledU = ON;
+        printf("UN");
+    }
+}