1 В избранное 0 Ответвления 0

OSCHINA-MIRROR/netube-RingBuffer

Присоединиться к Gitlife
Откройте для себя и примите участие в публичных проектах с открытым исходным кодом с участием более 10 миллионов разработчиков. Приватные репозитории также полностью бесплатны :)
Присоединиться бесплатно
Клонировать/Скачать
Внести вклад в разработку кода
Синхронизировать код
Отмена
Подсказка: Поскольку Git не поддерживает пустые директории, создание директории приведёт к созданию пустого файла .keep.
Loading...
Readme.md

RingBuffer: лёгкий кольцевой буфер

Введение

RingBuffer — это лёгкий кольцевой буфер, разработанный на языке C. Он подходит для различных встраиваемых платформ и сценариев использования, таких как последовательная передача данных. Кроме базовой функциональности, RingBuffer также предоставляет фреймворк для сегментации данных, что делает управление данными более удобным. Код был скомпилирован и запущен на платформе AT32F403A. После простого тестирования последовательной передачи данных явных ошибок не обнаружено, но стабильность не гарантируется. Если вы используете этот код в разработке продукта, рекомендуется провести тщательное тестирование. При обнаружении ошибок, пожалуйста, сообщите об этом своевременно. Благодарим за внимание!

Начало работы

Использование базовой функциональности RingBuffer Base

// Включаем необходимые заголовки
#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;
}

Использование фреймворка сегментации RingBuffer Chapter

// Включаем необходимые заголовки
#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 )

Вы можете оставить комментарий после Вход в систему

Введение

Описание недоступно Развернуть Свернуть
C
Apache-2.0
Отмена

Обновления

Пока нет обновлений

Участники

все

Недавние действия

Загрузить больше
Больше нет результатов для загрузки
1
https://api.gitlife.ru/oschina-mirror/netube-RingBuffer.git
git@api.gitlife.ru:oschina-mirror/netube-RingBuffer.git
oschina-mirror
netube-RingBuffer
netube-RingBuffer
main