This post is older than 2 years and might not be relevant anymore
More Info: Consider searching for newer posts

nrf52832,I add a function for uart output nrf_log_frontend_std8,but nothing output on uart,why?

void nrf_log_frontend_std_8(uint8_t            severity,
                        char const * const p_str,
                        uint32_t           val0,
                        uint32_t           val1,
                        uint32_t           val2,
                        uint32_t           val3,
                        uint32_t           val4,
                        uint32_t           val5,
                        uint32_t           val6,
                        uint32_t           val7
                        ){
#if (NRF_LOG_DEFERRED == 0)
uint32_t args[] = {val0, val1, val2, val3, val4, val5,val6,val7};
nrf_log_direct_feed(severity, p_str, args, ARRAY_SIZE(args));
#else //(NRF_LOG_DEFERRED == 0)
uint32_t nargs  = 8;
uint32_t mask   = m_log_data.mask;
uint32_t wr_idx;
if (buf_prealloc(nargs, &wr_idx))
{
    // Proceed only if buffer was successfully preallocated.
    STD_HEADER_DEF(header, p_str, severity, nargs);
    m_log_data.buffer[wr_idx++ & mask] = header.raw;
    #if NRF_LOG_USES_TIMESTAMP
    m_log_data.buffer[wr_idx++ & mask] = m_log_data.timestamp_func();
    #endif //NRF_LOG_USES_TIMESTAMP
    m_log_data.buffer[wr_idx++ & mask] = val0;
    m_log_data.buffer[wr_idx++ & mask] = val1;
    m_log_data.buffer[wr_idx++ & mask] = val2;
    m_log_data.buffer[wr_idx++ & mask] = val3;
    m_log_data.buffer[wr_idx++ & mask] = val4;
    m_log_data.buffer[wr_idx++ & mask] = val5;
    m_log_data.buffer[wr_idx++ & mask] = val6;
    m_log_data.buffer[wr_idx & mask]   = val7;
}
#endif //(NRF_LOG_DEFERRED == 0)

}

but nothing output in uart.why?

Parents
  • Ok, then you will also need to add this functionality to the nrf log backend. In nrf_log_backend_serial.c, in the function nrf_log_backend_serial_std_handler(...) you need to add a new case for the switch case:

      case 8:
        tmp_str_len =
            snprintf(&str[buffer_len],
                    NRF_LOG_BACKEND_MAX_STRING_LENGTH-buffer_len,
                    p_str,
                    p_args[0],
                    p_args[1],
                    p_args[2],
                    p_args[3],
                    p_args[4],
                    p_args[5],
                    p_args[6],
                    p_args[7]);
        break;
    

    But I would suggest just to call NRF_LOG_INFO() several times, e.g. split it in 2 calls:

    NRF_LOG_INFO("numbers %d %d %d %d" , num1,num2,num3,num4);
    NRF_LOG_INFO("%d %d %d %d", num5,num6,num7,num8);
    
  • I have used snprintf(&str[buffer_len], NRF_LOG_BACKEND_MAX_STRING_LENGTH-buffer_len, p_str, p_args[0], p_args[1], p_args[2], p_args[3], p_args[4], p_args[5], p_args[6], p_args[7]); NRF_LOG_INFO("%s", str);

Reply Children
No Data
Related