This is a monitor program for BLE NRF51822 chip. You can check memory, register and system information.

Dependencies:   BLE_API mbed nRF51822 nRF51_Vdd

Please refer follows.
/users/kenjiArai/code/debug_tools/
/users/kenjiArai/notebook/ble--tytaiyo-yuden-module-for-mbed/

Revision:
0:08c935d6c28f
Child:
2:6a659d71d71f
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/main.cpp	Tue Feb 09 11:43:18 2016 +0000
@@ -0,0 +1,128 @@
+/* mbed Microcontroller Library
+ * Copyright (c) 2006-2014 ARM Limited
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/*
+ *  Modified by Kenji Arai
+ *      http://www.page.sannet.ne.jp/kenjia/index.html
+ *      http://mbed.org/users/kenjiArai/
+ *
+ *      Started:  January   3rd, 2016
+ *      Revised:  Feburary  5th, 2016
+ */
+
+//  Include ---------------------------------------------------------------------------------------
+#include "mbed.h"
+#include "BLE.h"
+#include "BatteryService.h"
+#include "nRF51_Vdd.h"
+
+//  Definition ------------------------------------------------------------------------------------
+#define NEED_CONSOLE_OUTPUT 1 /* Set this if you need debug messages on the console;
+                               * it will have an impact on code-size and power consumption. */
+
+#if NEED_CONSOLE_OUTPUT
+#define DEBUG(...) { printf(__VA_ARGS__); }
+#else
+#define DEBUG(...) /* nothing */
+#endif /* #if NEED_CONSOLE_OUTPUT */
+
+//  Object ----------------------------------------------------------------------------------------
+BLE         ble;
+DigitalOut  led1(LED1, 1);
+Serial      pc(USBTX, USBRX);
+I2C         i2c(P0_29,P0_28);
+SPI         spi(P0_20,P0_22,P0_25);
+nRF51_Vdd   vdd(3.6f, 2.6f);
+Ticker      t;
+
+//  ROM / Constant data ---------------------------------------------------------------------------
+const char *deviceName = "mbedMon";
+
+//  RAM -------------------------------------------------------------------------------------------
+BatteryService *batteryService = NULL;
+uint8_t batteryLevel = 50;
+
+//  Function prototypes ---------------------------------------------------------------------------
+extern void debug_interface(uint8_t mode);
+
+//-------------------------------------------------------------------------------------------------
+//  Control Program
+//-------------------------------------------------------------------------------------------------
+void disconnectionCallback(const Gap::DisconnectionCallbackParams_t *disconnectionParams)
+{
+    DEBUG("Disconnected handle %u!\n\r", disconnectionParams->handle);
+    DEBUG("Restarting the advertising process\n\r");
+    BLE::Instance(BLE::DEFAULT_INSTANCE).gap().startAdvertising(); // restart advertising
+}
+
+void blink(void)
+{
+    led1 = !led1;
+}
+
+int main(void)
+{
+    t.attach(blink, 1.0f);
+
+    DEBUG("Initialising the nRF51822\r\n");
+    ble.init();
+    ble.setDeviceName((const uint8_t *)deviceName);
+    ble.onDisconnection(disconnectionCallback);
+
+    batteryService = new BatteryService(ble, batteryLevel);
+
+    /* setup advertising */
+    ble.accumulateAdvertisingPayload
+     (GapAdvertisingData::BREDR_NOT_SUPPORTED | GapAdvertisingData::LE_GENERAL_DISCOVERABLE);
+    ble.setAdvertisingType(GapAdvertisingParams::ADV_CONNECTABLE_UNDIRECTED);
+    ble.accumulateAdvertisingPayload(GapAdvertisingData::SHORTENED_LOCAL_NAME,
+                                    (const uint8_t *)deviceName,
+                                     strlen(deviceName));
+    ble.setAdvertisingInterval(1000); /* 1000ms; in multiples of 0.625ms. */
+    ble.startAdvertising();
+
+    // ******************************************************
+    // Here is a example to impliment the monitor
+    // para: 1 -> goto montor and never comeback
+    // ******************************************************
+//    debug_interface(1);
+
+    while (true) {
+        // this will return upon any system event (such as an interrupt or a ticker wakeup)
+        ble.waitForEvent();
+
+        // the magic battery processing
+        batteryLevel++;
+#if 1
+        if (batteryLevel > 100) {
+            batteryLevel = 20;
+        }
+        DEBUG("Vdd: %4.3f\r\n", vdd.read_real_value());
+#else
+        DEBUG("Vdd: %f\r\n", vdd.read_real_value());
+        batteryLevel = vdd.read();
+#endif
+
+        batteryService->updateBatteryLevel(batteryLevel);
+        DEBUG("battery=%d\r\n", batteryLevel);
+
+        // ******************************************************
+        // Here is a example to impliment the monitor
+        // para: 0 -> if Uart RX Data is ready then goto montor
+        // ******************************************************
+        debug_interface(0);
+    }
+}