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:
2:3747397a1618
Parent:
1:a399a743d109
Child:
3:989d13762f43
--- a/main.cpp	Sat Nov 29 12:35:30 2014 +0000
+++ b/main.cpp	Thu Dec 04 12:03:04 2014 +0000
@@ -21,6 +21,22 @@
 #define LED_NAME
 //#define LED_COLOR
 
+//#define DISP_COM
+
+// Com
+#ifdef DISP_COM
+#define BAUD(x)           pcm.baud(x)
+#define PRINTF(...)       pcm.printf(__VA_ARGS__)
+#else
+#define BAUD(x)           baud(x)
+#define PRINTF(...)       printf(__VA_ARGS__)
+#endif
+
+#ifdef DISP_COM
+// com
+Serial pcm(USBTX, USBRX);
+#endif
+
 #if defined(PIN_NUM)
 DigitalOut myledR(P4_4);
 DigitalOut myledG(P3_2);
@@ -44,103 +60,103 @@
 int main() {
     uint32_t n = 0;
     
-    printf("Start mbed program\r\n");
+    PRINTF("Start mbed program\r\n");
     myledR = OFF;
-    printf("RF,");
+    PRINTF("RF,");
     myledG = OFF;
-    printf("GF,");
+    PRINTF("GF,");
     myledB = OFF;
-    printf("BF,");
+    PRINTF("BF,");
     myledU = ON;
-    printf("UN");
+    PRINTF("UN");
     while(1) {
         wait(5.0);
-        printf(" passed %4d Sec\r\n", n +=5);
-        printf("R=ON ,G=OFF,B=OFF ");
+        PRINTF(" passed %4d Sec\r\n", n +=5);
+        PRINTF("R=ON ,G=OFF,B=OFF ");
         myledR = ON;
-        printf("RN,");
+        PRINTF("RN,");
         myledG = OFF;
-        printf("GF,");
+        PRINTF("GF,");
         myledB = OFF;
-        printf("BF,");
+        PRINTF("BF,");
         myledU = OFF;
-        printf("UF");
+        PRINTF("UF");
         wait(5.0);
-        printf(" passed %4d Sec\r\n", n +=5);
-        printf("R=OFF,G=OFF,B=OFF ");
+        PRINTF(" passed %4d Sec\r\n", n +=5);
+        PRINTF("R=OFF,G=OFF,B=OFF ");
         myledR = OFF;
-        printf("RF,");
+        PRINTF("RF,");
         myledG = OFF;
-        printf("GF,");
+        PRINTF("GF,");
         myledB = OFF;
-        printf("BF,");
+        PRINTF("BF,");
         myledU = ON;
-        printf("UN");
+        PRINTF("UN");
         wait(5.0);
-        printf(" passed %4d Sec\r\n", n +=5);
-        printf("R=OFF,G=ON ,B=OFF ");
+        PRINTF(" passed %4d Sec\r\n", n +=5);
+        PRINTF("R=OFF,G=ON ,B=OFF ");
         myledR = OFF;
-        printf("RF,");
+        PRINTF("RF,");
         myledG = ON;
-        printf("GN,");
+        PRINTF("GN,");
         myledB = OFF;
-        printf("BF,");
+        PRINTF("BF,");
         myledU = OFF;
-        printf("UF");
+        PRINTF("UF");
         wait(5.0);
-        printf(" passed %4d Sec\r\n", n +=5);
-        printf("R=OFF,G=OFF,B=OFF ");
+        PRINTF(" passed %4d Sec\r\n", n +=5);
+        PRINTF("R=OFF,G=OFF,B=OFF ");
         myledR = OFF;
-        printf("RF,");
+        PRINTF("RF,");
         myledG = OFF;
-        printf("GF,");
+        PRINTF("GF,");
         myledB = OFF;
-        printf("BF,");
+        PRINTF("BF,");
         myledU = ON;
-        printf("UN");
+        PRINTF("UN");
         wait(5.0);
-        printf(" passed %4d Sec\r\n", n +=5);
-        printf("R=OFF,G=OFF,B=ON  ");
+        PRINTF(" passed %4d Sec\r\n", n +=5);
+        PRINTF("R=OFF,G=OFF,B=ON  ");
         myledR = OFF;
-        printf("RF,");
+        PRINTF("RF,");
         myledG = OFF;
-        printf("GF,");
+        PRINTF("GF,");
         myledB = ON;
-        printf("BN,");
+        PRINTF("BN,");
         myledU = OFF;
-        printf("UF");
+        PRINTF("UF");
         wait(5.0);
-        printf(" passed %4d Sec\r\n", n +=5);
-        printf("R=OFF,G=OFF,B=OFF ");
+        PRINTF(" passed %4d Sec\r\n", n +=5);
+        PRINTF("R=OFF,G=OFF,B=OFF ");
         myledR = OFF;
-        printf("RF,");
+        PRINTF("RF,");
         myledG = OFF;
-        printf("GF,");
+        PRINTF("GF,");
         myledB = OFF;
-        printf("BF,");
+        PRINTF("BF,");
         myledU = ON;
-        printf("UN");
+        PRINTF("UN");
         wait(5.0);
-        printf(" passed %4d Sec\r\n", n +=5);
-        printf("R=ON ,G=ON ,B=ON  ");
+        PRINTF(" passed %4d Sec\r\n", n +=5);
+        PRINTF("R=ON ,G=ON ,B=ON  ");
         myledR = ON;
-        printf("RN,");
+        PRINTF("RN,");
         myledG = ON;
-        printf("GN,");
+        PRINTF("GN,");
         myledB = ON;
-        printf("BN,");
+        PRINTF("BN,");
         myledU = OFF;
-        printf("UF");
+        PRINTF("UF");
         wait(5.0);
-        printf(" passed %4d Sec\r\n", n +=5);
-        printf("R=OFF,G=OFF,B=OFF ");
+        PRINTF(" passed %4d Sec\r\n", n +=5);
+        PRINTF("R=OFF,G=OFF,B=OFF ");
         myledR = OFF;
-        printf("RF,");
+        PRINTF("RF,");
         myledG = OFF;
-        printf("GF,");
+        PRINTF("GF,");
         myledB = OFF;
-        printf("BF,");
+        PRINTF("BF,");
         myledU = ON;
-        printf("UN");
+        PRINTF("UN");
     }
 }