This commit is contained in:
2025-08-10 19:31:49 +03:00
parent fe7491e38c
commit b08c58fdc3
3 changed files with 56 additions and 55 deletions

104
README.md
View File

@@ -5,12 +5,17 @@
1. Support of any data types. 1. Support of any data types.
2. The maximum size of the veсtor is 255 elements. 2. The maximum size of the veсtor is 255 elements.
## Dependencies
1. [zh_avr_free_rtos](http://git.zh.com.ru/avr_libraries/zh_avr_free_rtos)
## Using ## Using
In an existing project, run the following command to install the component: In an existing project, run the following command to install the component:
```text ```text
cd ../your_project/lib cd ../your_project/lib
git clone http://git.zh.com.ru/avr_libraries/zh_avr_free_rtos
git clone http://git.zh.com.ru/avr_libraries/zh_avr_vector git clone http://git.zh.com.ru/avr_libraries/zh_avr_vector
``` ```
@@ -37,66 +42,61 @@ int usart(char byte, FILE *stream)
while ((UCSR0A & (1 << UDRE0)) == 0) while ((UCSR0A & (1 << UDRE0)) == 0)
{ {
} }
UDR0 = byte; UDR0 = byte;
return 0; return 0;
} }
FILE uart = FDEV_SETUP_STREAM(usart, NULL, _FDEV_SETUP_WRITE); FILE uart = FDEV_SETUP_STREAM(usart, NULL, _FDEV_SETUP_WRITE);
void vector_example_task(void *pvParameters) void vector_example_task(void *pvParameters)
{ {
zh_avr_vector_t vector = {0}; zh_avr_vector_t vector = {0};
char example[10] = {0}; char example[10] = {0};
for (;;) printf("Free Heap %d.\n", xPortGetFreeHeapSize());
{ zh_avr_vector_init(&vector, sizeof(example));
printf("Ponter Size %d.\n", sizeof(void *)); printf("Initial vector size is: %d\n", zh_avr_vector_get_size(&vector));
printf("Free Heap %d.\n", xPortGetFreeHeapSize()); strcpy(example, "Item 1");
zh_avr_vector_init(&vector, sizeof(example)); zh_avr_vector_push_back(&vector, &example);
printf("Initial vector size is: %d\n", zh_avr_vector_get_size(&vector)); strcpy(example, "Item 2");
strcpy(example, "Item 1"); zh_avr_vector_push_back(&vector, &example);
zh_avr_vector_push_back(&vector, &example); strcpy(example, "Item 3");
strcpy(example, "Item 2"); zh_avr_vector_push_back(&vector, &example);
zh_avr_vector_push_back(&vector, &example); strcpy(example, "Item 4");
strcpy(example, "Item 3"); zh_avr_vector_push_back(&vector, &example);
zh_avr_vector_push_back(&vector, &example); strcpy(example, "Item 5");
strcpy(example, "Item 4"); zh_avr_vector_push_back(&vector, &example);
zh_avr_vector_push_back(&vector, &example); printf("Add 5 items. New vector size is: %d\n", zh_avr_vector_get_size(&vector));
strcpy(example, "Item 5"); for (uint16_t i = 0; i < zh_avr_vector_get_size(&vector); ++i)
zh_avr_vector_push_back(&vector, &example); {
printf("Add 5 items. New vector size is: %d\n", zh_avr_vector_get_size(&vector)); printf("Item position %d is: %s\n", i, (char *)zh_avr_vector_get_item(&vector, i));
for (uint16_t i = 0; i < zh_avr_vector_get_size(&vector); ++i) }
{ strcpy(example, "Item 6");
printf("Item position %d is: %s\n", i, (char *)zh_avr_vector_get_item(&vector, i)); zh_avr_vector_change_item(&vector, 3, &example);
} printf("Change item on 3 position.\n");
strcpy(example, "Item 6"); for (uint16_t i = 0; i < zh_avr_vector_get_size(&vector); ++i)
zh_avr_vector_change_item(&vector, 3, &example); {
printf("Change item on 3 position.\n"); printf("Item position %d is: %s\n", i, (char *)zh_avr_vector_get_item(&vector, i));
for (uint16_t i = 0; i < zh_avr_vector_get_size(&vector); ++i) }
{ zh_avr_vector_delete_item(&vector, 2);
printf("Item position %d is: %s\n", i, (char *)zh_avr_vector_get_item(&vector, i)); 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)
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)); printf("Item position %d is: %s\n", i, (char *)zh_avr_vector_get_item(&vector, i));
for (uint16_t i = 0; i < zh_avr_vector_get_size(&vector); ++i) }
{ zh_avr_vector_free(&vector);
printf("Item position %d is: %s\n", i, (char *)zh_avr_vector_get_item(&vector, i)); printf("Task Remaining Stack Size %d.\n", uxTaskGetStackHighWaterMark(NULL));
} printf("Free Heap %d.\n", xPortGetFreeHeapSize());
zh_avr_vector_free(&vector); vTaskDelete(NULL);
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) int main(void)
{ {
UBRR0H = (BAUD_PRESCALE >> 8); UBRR0H = (BAUD_PRESCALE >> 8);
UBRR0L = BAUD_PRESCALE; UBRR0L = BAUD_PRESCALE;
UCSR0B = (1 << RXEN0) | (1 << TXEN0); UCSR0B = (1 << RXEN0) | (1 << TXEN0);
UCSR0C = (1 << UCSZ01) | (1 << UCSZ00); UCSR0C = (1 << UCSZ01) | (1 << UCSZ00);
stdout = &uart; stdout = &uart;
xTaskCreate(vector_example_task, "vector example task", 200, NULL, tskIDLE_PRIORITY, NULL); xTaskCreate(vector_example_task, "vector example task", 136, NULL, tskIDLE_PRIORITY, NULL);
vTaskStartScheduler(); vTaskStartScheduler();
return 0; return 0;
} }
``` ```

View File

@@ -1 +1 @@
1.0.0 2.0.0

View File

@@ -23,11 +23,12 @@ avr_err_t zh_avr_vector_free(zh_avr_vector_t *vector)
{ {
ZH_ERROR_CHECK(vector != NULL, AVR_ERR_INVALID_ARG); ZH_ERROR_CHECK(vector != NULL, AVR_ERR_INVALID_ARG);
ZH_ERROR_CHECK(vector->status != false, AVR_ERR_INVALID_STATE); ZH_ERROR_CHECK(vector->status != false, AVR_ERR_INVALID_STATE);
for (uint16_t i = 0; i < vector->size; ++i) for (uint8_t i = 0; i < vector->size; ++i)
{ {
vPortFree(vector->items[i]); vPortFree(vector->items[i]);
} }
vector->status = false; vector->status = false;
vPortFree(vector->items);
return AVR_OK; return AVR_OK;
} }
@@ -90,7 +91,7 @@ avr_err_t zh_avr_vector_delete_item(zh_avr_vector_t *vector, uint8_t index)
vector->items[i + 1] = NULL; vector->items[i + 1] = NULL;
} }
--vector->size; --vector->size;
_resize(vector, vector->capacity - 1); ZH_ERROR_CHECK((_resize(vector, vector->capacity - 1) != AVR_ERR_NO_MEM), AVR_ERR_NO_MEM);
return AVR_OK; return AVR_OK;
} }
return AVR_FAIL; return AVR_FAIL;