2016-10-26 7 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

"여기에 포함 된 정보는 Nordic Semiconductor의 기밀 자산으로, * Nordic Semiconductor와의 명시적인 계약을 제외하고는 * 복사, 양도 또는 공개 할 수 없습니다." - ** 여기에 파일을 게시 할 수있는 서면 수당이 있습니까? ** – Olaf

답변

1

어떻게 디버깅하나요? 스타터

제안 :

은 터미널 소프트웨어가 DTR 신호를 주장되어 있는지 확인합니다. 해결책은 here입니다.

일시적으로 power_manage()으로 전화를 제거하여 문제의 일부가 아닌지 확인하십시오.

APP_UART_FLOW_CONTROL_DISABLED에 대해 APP_UART_FLOW_CONTROL_ENABLED을 변경하여 흐름 제어 문제인지 확인하십시오. 어떠한 경우에도 PC로 출력하기 위해 흐름 제어가 필요하지 않습니다. 장치에 입력 할 때 (특히 버퍼 길이가 1 인 경우) 또는 제한된 버퍼링으로 느린 장치로 데이터를 보내려는 경우 필요할 수 있습니다.

APP_UART_FIFO_INIT으로 전화 한 후 ERR_CODE으로 전화하여 확인하십시오. 가능한 오류 코드는 here으로 정의됩니다.