Jadi, saya mencoba menulis perpustakaan API logger saya sendiri untuk sistem tertanam saya. Sistem tertanam menggunakan pemrograman bare metal tanpa OS apa pun. Oleh karena itu, perpustakaan logger adalah perpustakaan statis. ...

0
Chaz Ben 5 April 2021, 19:46

1 menjawab

Jawaban Terbaik

Saya tidak terbiasa dengan pustaka buffer melingkar ini. Tapi dilihat dari prototipe circular_buf_put(), saya pikir Anda salah menggunakannya.

/// Put version 1 continues to add data if the buffer is full
/// Old data is overwritten
/// Requires: cbuf is valid and created by circular_buf_init
void circular_buf_put(cbuf_handle_t cbuf, uint8_t data);

Tampaknya circular_buf_put() mencatat satu byte pada satu waktu. Baris dari kode Anda ini hanya menempatkan satu byte log_data ke dalam buffer -- kebetulan byte terakhir dari log_data.

circular_buf_put(klog_cbuf, log_data[MAX_LOGDATA_SIZE - 1]);

Mungkin Anda harus memasukkan setiap byte log_data ke dalam buffer, seperti ini.

int log_data_length = vsnprintf(log_data,MAX_LOGDATA_SIZE - 1, format, args);
for (int index = 0, ((index < log_data_length) && (index < MAX_LOGDATA_SIZE )), ++index)
{
    circular_buf_put(klog_cbuf, log_data[index]);
}
1
kkrambo 5 April 2021, 17:33