RingBuffer — это лёгкий кольцевой буфер, разработанный на языке C. Он подходит для различных встраиваемых платформ и сценариев использования, таких как последовательная передача данных. Кроме базовой функциональности, RingBuffer также предоставляет фреймворк для сегментации данных, что делает управление данными более удобным. Код был скомпилирован и запущен на платформе AT32F403A. После простого тестирования последовательной передачи данных явных ошибок не обнаружено, но стабильность не гарантируется. Если вы используете этот код в разработке продукта, рекомендуется провести тщательное тестирование. При обнаружении ошибок, пожалуйста, сообщите об этом своевременно. Благодарим за внимание!
// Включаем необходимые заголовки
#include <stdint.h>
#include <stdio.h>
#include "ring_buffer.h"
// Создаём массив для хранения данных
#define BUFFER_SIZE 128
static uint8_t buffer[BUFFER_SIZE];
// Создаём дескриптор кольцевого буфера
static ring_buffer rb;
int main(void) {
// Инициализируем параметры кольцевого буфера
RB_Init(&rb, buffer, BUFFER_SIZE);
// Записываем данные в кольцевой буфер
RB_Write_String(&rb, "hello world", 11);
RB_Write_Byte(&rb, '!');
RB_Write_Byte(&rb, 0x00);
// Удаляем часть данных из кольцевого буфера
RB_Delete(&rb, 2);
// Получаем длину сохранённых данных
uint32_t num = RB_Get_Length(&rb);
// Читаем данные из кольцевого буфера и выводим их
uint8_t get[16];
RB_Read_String(&rb, get, num);
printf("%s", get);
// Вывод на консоль: llo world!
return 0;
}
// Включаем необходимые заголовки
#include <stdint.h>
#include <stdio.h>
#include "ring_buffer_chapter.h"
// Создаём два массива: один для хранения данных, другой для информации о сегментах
#define BASE_SIZE 128
static uint8_t buffer_base[BASE_SIZE];
#define CHAPTER_SIZE 16
static uint32_t buffer_chapter[CHAPTER_SIZE];
// Создаём дескриптор сегментированного кольцевого буфера
static ring_buffer_chapter rbc;
int main(void) {
// Инициализируем параметры сегментированного кольцевого буфера
RBC_Init(&rbc, buffer_base, BASE_SIZE, buffer_chapter, CHAPTER_SIZE);
// Записываем данные в первый сегмент и отмечаем конец сегмента
RBC_Write_String(&rbc, "string1", 7);
RBC_Write_Byte(&rbc, '!');
RBC_Write_Byte(&rbc, 0x00);
RBC_Ending_Chapter(&rbc);
// Записываем данные во второй сегмент и отмечаем конец сегмента
RBC_Write_String(&rbc, "string2", 7);
RBC_Write_Byte(&rbc, '!');
RBC_Write_Byte(&rbc, 0x00);
RBC_Ending_Chapter(&rbc);
// Получаем количество сохранённых сегментов
uint32_t num = RBC_Get_Chapter_Number(&rbc);
// Считываем данные из сегментов и выводим их на консоль
uint8_t get[16];
for (uint32_t i = 0; i < num; i++) {
RBC_Read_Chapter(&rbc, get, NULL);
printf("%s\r\n", get);
}
// Вывод на консоль: string1!
// string2!
return 0;
}
Вы можете оставить комментарий после Вход в систему
Неприемлемый контент может быть отображен здесь и не будет показан на странице. Вы можете проверить и изменить его с помощью соответствующей функции редактирования.
Если вы подтверждаете, что содержание не содержит непристойной лексики/перенаправления на рекламу/насилия/вульгарной порнографии/нарушений/пиратства/ложного/незначительного или незаконного контента, связанного с национальными законами и предписаниями, вы можете нажать «Отправить» для подачи апелляции, и мы обработаем ее как можно скорее.
Комментарии ( 0 )