2025-08-10 14:24:21 +03:00
2025-08-10 14:24:21 +03:00
2025-08-02 10:03:16 +03:00
2025-08-10 14:24:21 +03:00
2025-08-02 10:03:16 +03:00
2025-08-10 14:24:21 +03:00

AVR library for vector (dynamic array)

Features

  1. Support of any data types.
  2. The maximum size of the veсtor is 255 elements.

Using

In an existing project, run the following command to install the component:

cd ../your_project/lib
git clone http://git.zh.com.ru/avr_libraries/zh_avr_vector

In the application, add the component:

#include "zh_avr_vector.h"

Example

Create, add, read, modify and delete items:

#include "avr/io.h"
#include "stdio.h"
#include "zh_avr_vector.h"

#define BAUD_RATE 9600
#define BAUD_PRESCALE (F_CPU / 16 / BAUD_RATE - 1)

int usart(char byte, FILE *stream)
{
    while ((UCSR0A & (1 << UDRE0)) == 0)
    {
    }
	UDR0 = byte;
	return 0;
}
FILE uart = FDEV_SETUP_STREAM(usart, NULL, _FDEV_SETUP_WRITE);

void vector_example_task(void *pvParameters)
{
	zh_avr_vector_t vector = {0};
	char example[10] = {0};
	for (;;)
	{
		printf("Ponter Size %d.\n", sizeof(void *));
		printf("Free Heap %d.\n", xPortGetFreeHeapSize());
		zh_avr_vector_init(&vector, sizeof(example));
		printf("Initial vector size is: %d\n", zh_avr_vector_get_size(&vector));
		strcpy(example, "Item 1");
		zh_avr_vector_push_back(&vector, &example);
		strcpy(example, "Item 2");
		zh_avr_vector_push_back(&vector, &example);
		strcpy(example, "Item 3");
		zh_avr_vector_push_back(&vector, &example);
		strcpy(example, "Item 4");
		zh_avr_vector_push_back(&vector, &example);
		strcpy(example, "Item 5");
		zh_avr_vector_push_back(&vector, &example);
		printf("Add 5 items. New vector size is: %d\n", zh_avr_vector_get_size(&vector));
		for (uint16_t i = 0; i < zh_avr_vector_get_size(&vector); ++i)
		{
			printf("Item position %d is: %s\n", i, (char *)zh_avr_vector_get_item(&vector, i));
		}
		strcpy(example, "Item 6");
		zh_avr_vector_change_item(&vector, 3, &example);
		printf("Change item on 3 position.\n");
		for (uint16_t i = 0; i < zh_avr_vector_get_size(&vector); ++i)
		{
			printf("Item position %d is: %s\n", i, (char *)zh_avr_vector_get_item(&vector, i));
		}
		zh_avr_vector_delete_item(&vector, 2);
		printf("Delete item on 2 position. New vector size is: %d\n", zh_avr_vector_get_size(&vector));
		for (uint16_t i = 0; i < zh_avr_vector_get_size(&vector); ++i)
		{
			printf("Item position %d is: %s\n", i, (char *)zh_avr_vector_get_item(&vector, i));
		}
		zh_avr_vector_free(&vector);
		printf("Task Remaining Stack Size %d.\n", uxTaskGetStackHighWaterMark(NULL));
		printf("Free Heap %d.\n", xPortGetFreeHeapSize());
		vTaskDelay(5000 / portTICK_PERIOD_MS);
	}
	vTaskDelete(NULL);
}

int main(void)
{
	UBRR0H = (BAUD_PRESCALE >> 8);
	UBRR0L = BAUD_PRESCALE;
	UCSR0B = (1 << RXEN0) | (1 << TXEN0);
	UCSR0C = (1 << UCSZ01) | (1 << UCSZ00);
	stdout = &uart;
	xTaskCreate(vector_example_task, "vector example task", 200, NULL, tskIDLE_PRIORITY, NULL);
	vTaskStartScheduler();
	return 0;
}
Description
FreeRTOS based AVR library for vector (dynamic array).
Readme 47 KiB
Languages
C 100%