diff --git a/README.md b/README.md index c8cb64d..264f38a 100644 --- a/README.md +++ b/README.md @@ -5,12 +5,17 @@ 1. Support of any data types. 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 In an existing project, run the following command to install the component: ```text 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 ``` @@ -37,66 +42,61 @@ int usart(char byte, FILE *stream) while ((UCSR0A & (1 << UDRE0)) == 0) { } - UDR0 = byte; - return 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); + zh_avr_vector_t vector = {0}; + char example[10] = {0}; + 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()); + 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; + 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", 136, NULL, tskIDLE_PRIORITY, NULL); + vTaskStartScheduler(); + return 0; } ``` diff --git a/version.txt b/version.txt index afaf360..359a5b9 100644 --- a/version.txt +++ b/version.txt @@ -1 +1 @@ -1.0.0 \ No newline at end of file +2.0.0 \ No newline at end of file diff --git a/zh_avr_vector.c b/zh_avr_vector.c index 8101e14..e0959c8 100755 --- a/zh_avr_vector.c +++ b/zh_avr_vector.c @@ -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->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]); } vector->status = false; + vPortFree(vector->items); 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->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_FAIL;