2016-10-26 4 views
0

ノルディックSDK(Red Bear Lab BLE nano)で動作するArduinoデバイスがあります。自分のコードで何が起こっているのかをデバッグできるように、GTKTermにシリアルプリントをしたいと思っています。これを行うには、私は次のコードを持っています:Nordic SDKシリアルへの印刷

/* 
* Copyright (c) 2014 Nordic Semiconductor. All Rights Reserved. 
* 
* The information contained herein is confidential property of Nordic Semiconductor. The use, 
* copying, transfer or disclosure of such information is prohibited except by express written 
* agreement with Nordic Semiconductor. 
* 
*/ 

/** 
* @brief BLE Heart Rate Collector application main file. 
* 
* This file contains the source code for a sample heart rate collector. 
*/ 

#include <stdint.h> 
#include <stdio.h> 
#include <string.h> 
#include "nordic_common.h" 
#include "nrf_sdm.h" 
#include "ble.h" 
#include "ble_hci.h" 
#include "ble_db_discovery.h" 
#include "softdevice_handler.h" 
#include "app_util.h" 
#include "app_error.h" 
#include "boards.h" 
#include "nrf_gpio.h" 
#include "pstorage.h" 
#include "device_manager.h" 
#include "app_trace.h" 
#include "ble_hrs_c.h" 
#include "ble_bas_c.h" 
#include "app_util.h" 
#include "app_timer.h" 
#include "bsp.h" 
#include "bsp_btn_ble.h" 

#define UART_TX_BUF_SIZE   256        /**< UART TX buffer size. */ 
#define UART_RX_BUF_SIZE   1         /**< UART RX buffer size. */ 

#define STRING_BUFFER_LEN   50 
#define BOND_DELETE_ALL_BUTTON_ID 0         /**< Button used for deleting all bonded centrals during startup. */ 

#define APP_TIMER_PRESCALER  0         /**< Value of the RTC1 PRESCALER register. */ 
#define APP_TIMER_MAX_TIMERS  (2+BSP_APP_TIMERS_NUMBER)   /**< Maximum number of simultaneously created timers. */ 
#define APP_TIMER_OP_QUEUE_SIZE 2         /**< Size of timer operation queues. */ 

#define APPL_LOG     app_trace_log      /**< Debug logger macro that will be used in this file to do logging of debug information over UART. */ 

#define SEC_PARAM_BOND    1         /**< Perform bonding. */ 
#define SEC_PARAM_MITM    1         /**< Man In The Middle protection not required. */ 
#define SEC_PARAM_IO_CAPABILITIES BLE_GAP_IO_CAPS_NONE    /**< No I/O capabilities. */ 
#define SEC_PARAM_OOB    0         /**< Out Of Band data not available. */ 
#define SEC_PARAM_MIN_KEY_SIZE  7         /**< Minimum encryption key size. */ 
#define SEC_PARAM_MAX_KEY_SIZE  16         /**< Maximum encryption key size. */ 

#define SCAN_INTERVAL    0x00A0        /**< Determines scan interval in units of 0.625 millisecond. */ 
#define SCAN_WINDOW    0x0050        /**< Determines scan window in units of 0.625 millisecond. */ 

#define MIN_CONNECTION_INTERVAL MSEC_TO_UNITS(7.5, UNIT_1_25_MS) /**< Determines minimum connection interval in millisecond. */ 
#define MAX_CONNECTION_INTERVAL MSEC_TO_UNITS(30, UNIT_1_25_MS) /**< Determines maximum connection interval in millisecond. */ 
#define SLAVE_LATENCY    0         /**< Determines slave latency in counts of connection events. */ 
#define SUPERVISION_TIMEOUT  MSEC_TO_UNITS(4000, UNIT_10_MS) /**< Determines supervision time-out in units of 10 millisecond. */ 

#define TARGET_UUID    0x180D        /**< Target device name that application is looking for. */ 
#define MAX_PEER_COUNT    DEVICE_MANAGER_MAX_CONNECTIONS  /**< Maximum number of peer's application intends to manage. */ 
#define UUID16_SIZE    2         /**< Size of 16 bit UUID */ 

/**@breif Macro to unpack 16bit unsigned UUID from octet stream. */ 
#define UUID16_EXTRACT(DST, SRC) \ 
    do       \ 
    {       \ 
     (*(DST)) = (SRC)[1]; \ 
     (*(DST)) <<= 8;   \ 
     (*(DST)) |= (SRC)[0]; \ 
    } while (0) 

/**@brief Variable length data encapsulation in terms of length and pointer to data */ 
typedef struct 
{ 
    uint8_t  * p_data;            /**< Pointer to data. */ 
    uint16_t  data_len;           /**< Length of data. */ 
}data_t; 

typedef enum 
{ 
    BLE_NO_SCAN,              /**< No advertising running. */ 
    BLE_WHITELIST_SCAN,            /**< Advertising with whitelist. */ 
    BLE_FAST_SCAN,             /**< Fast advertising running. */ 
} ble_scan_mode_t; 

static ble_db_discovery_t   m_ble_db_discovery;     /**< Structure used to identify the DB Discovery module. */ 
static ble_hrs_c_t     m_ble_hrs_c;       /**< Structure used to identify the heart rate client module. */ 
static ble_bas_c_t     m_ble_bas_c;       /**< Structure used to identify the Battery Service client module. */ 
static ble_gap_scan_params_t  m_scan_param;      /**< Scan parameters requested for scanning and connection. */ 
static dm_application_instance_t m_dm_app_id;       /**< Application identifier. */ 
static dm_handle_t     m_dm_device_handle;     /**< Device Identifier identifier. */ 
static uint8_t      m_peer_count = 0;     /**< Number of peer's connected. */ 
static ble_scan_mode_t    m_scan_mode = BLE_FAST_SCAN;   /**< Scan mode used by application. */ 
static uint16_t      m_conn_handle;      /**< Current connection handle. */ 
static volatile bool    m_whitelist_temporarily_disabled = false; /**< True if whitelist has been temporarily disabled. */ 

static bool       m_memory_access_in_progress = false; /**< Flag to keep track of ongoing operations on persistent memory. */ 

/** 
* @brief Connection parameters requested for connection. 
*/ 
static const ble_gap_conn_params_t m_connection_param = 
{ 
    (uint16_t)MIN_CONNECTION_INTERVAL, // Minimum connection 
    (uint16_t)MAX_CONNECTION_INTERVAL, // Maximum connection 
    0,         // Slave latency 
    (uint16_t)SUPERVISION_TIMEOUT  // Supervision time-out 
}; 

static void scan_start(void); 

#define APPL_LOG      app_trace_log    /**< Debug logger macro that will be used in this file to do logging of debug information over UART. */ 


/**@brief Function for initializing the UART. 
*/ 
static void uart_init(void) 
{ 
    uint32_t err_code; 

    const app_uart_comm_params_t comm_params = 
     { 
      RX_PIN_NUMBER, 
      TX_PIN_NUMBER, 
      RTS_PIN_NUMBER, 
      CTS_PIN_NUMBER, 
      APP_UART_FLOW_CONTROL_ENABLED, 
      false, 
      UART_BAUDRATE_BAUDRATE_Baud38400 
     }; 

    APP_UART_FIFO_INIT(&comm_params, 
          UART_RX_BUF_SIZE, 
          UART_TX_BUF_SIZE, 
          uart_error_handle, 
          APP_IRQ_PRIORITY_LOW, 
          err_code); 

    APP_ERROR_CHECK(err_code); 

    app_trace_init(); 
} 

/** @brief Function for the Power manager. 
*/ 
static void power_manage(void) 
{ 
    uint32_t err_code = sd_app_evt_wait(); 

    APP_ERROR_CHECK(err_code); 
} 


int main(void) 
{ 
    bool erase_bonds; 

    // Initialize. 
    uart_init(); 
    printf("Heart rate collector example (this is a custom log)\r\n"); 

    for (;;) 
    { 
     power_manage(); 
    } 
} 

私はGTKtermで出力が表示されることがあります。私はそれが動作しているときと動作していないときのパターンを見つけることができません。これをデバッグするにはどうすればいいですか?

+0

ノルディックセミコンダクターとの間で合意書を締結している場合を除き、これらの情報のコピー、転送、開示は禁止されています。 - **ここにファイルを投稿する手数料がありますか?** – Olaf

答えて

1

これをデバッグするにはどうすればよいですか?初心者のための

ヒント:

お使いの端末のソフトウェアがDTR信号をアサートされていることを確認してください。その解決策は、hereでした。

power_manage()への呼び出しを一時的に削除して、問題の一部でないことを確認します。

APP_UART_FLOW_CONTROL_DISABLEDAPP_UART_FLOW_CONTROL_ENABLEDを変更してフロー制御の問題であるかどうかを判断してください。いずれにせよ、PCに出力するためのフロー制御は必要ありません。デバイスに入力する場合(特にバッファ長が1の場合)、またはバッファリングが制限された低速デバイスにデータを送信する場合は、必要な場合があります。

APP_UART_FIFO_INITを呼び出してERR_CODEを呼び出して、その段階で問題が発生していないことを確認してください。考えられるエラーコードはhereと定義されています。