Перейти к содержанию
    

EmDMAl

Участник
  • Постов

    7
  • Зарегистрирован

  • Посещение

Репутация

0 Обычный
  1. Разобрался с меню. Но при размещении большого количества структур забилась вся оперативная память. И встал вопрос о размещении структур в флешь памяти. ... //Структура описывает пункт меню typedef struct _selection { unsigned char *mas; // Указатель на название пункта void (*function)(void); //Указатель на функцию выполняющуюся по нажатии на enter/escape unsigned ent_f: 4; //Флаг входа 4 бита - обычно ID меню в которое надо войти unsigned esc_f: 4; //Флаг выхода 4 бита - обычно ID меню в которое надо вернуться }SELECTION; //Структура описывает меню/подменю typedef struct _menu { unsigned char id; //Номер меню/подменю unsigned char num_selections; //Количество пунктов данного меню/подменю SELECTION *m; //Указатель намассив пунктов данного меню/подменю }MENU; ... //Массив хранищий пункты главного меню (структура SELECTION) static SELECTION menu_[]={ {X1, goto_menu, DELAY_MENU, MAIN_MENU}, //Punkt 1 {X12, goto_menu, FOCUS_MENU, MAIN_MENU}, //Punkt 2 {X16, goto_menu, QUANTITY_MENU, MAIN_MENU}, //Punkt 3 {X24, goto_menu, TIME_MENU, MAIN_MENU}, //Punkt 4 {X32, func7, 0, 0} //Punkt 4 }; //Массив хранищий пункты меню настроек (структура SELECTION) static SELECTION menu_m0[]={ {X2, func6, 0, 0}, //Punkt 1 {X3, func6, 0, 0}, //Punkt 2 {X4, func6, 0, 0}, //Punkt 3 {X5, func6, 0, 0}, //Punkt 2 {X6, func6, 0, 0}, //Punkt 2 {X7, func6, 0, 0}, //Punkt 2 {X8, func6, 0, 0}, //Punkt 2 {X9, func6, 0, 0}, //Punkt 2 {X10, func6, 0, 0}, //Punkt 2 {X11, func6, 0, 0} //Punkt 2 }; ... Так вот, кто-нибудь размещал эти структуры во флешь памяти?
  2. Обучение FreeRTOS

    При повторной установки новой версии ошибки с поиском библиотек исчезли. Теперь при компиляции выдает ошибку: Error! E2028: vTaskStartTrace_ is an undefined reference Error! E2028: ulTaskEndTrace_ is an undefined reference . vTaskStartTrace - ф-ия трассировки данных и записи их в лог, при ее отключении exe компилируется, но ничего не отображается(dos-ий экран черный). Эта ф-ия используется в main.c и инициализируется в task.h, оба файла присоеденены к проекту. В FreeRTOSConfig.h configUSE_TRACE_FACILITY=1, правда #define configQUEUE_REGISTRY_SIZE=0, но менял значение для тестирования. TaskEndTrace - останавливает трассировку. Error! E2028: означает неопределенное значение, такое ощущение что компилятор не видит объявление этой ф-ии. Куда двигаться я не знаю, в инете подобной проблемы ни у кого нету.
  3. Обучение FreeRTOS

    1. Кто-нибудь, устанавливал компилятор Open Watcom используемый у Курницы? Все установлено по инструкции: Open Watcom в корень диска С, папка FreeRtos тоже в корень С. При компиляции целая куча ошибок разного рода. В принципе можно проекты под AVR Studio переделывать. 2. При попытки переделки под AVR Studio, возникает ошибки: D:\library\Pinboard\temp_Ci\FreeRTOSV7.1.1\Project\AVR_ATMega32_KURN_2\./FreeRTOSConfig.h:88:9: error: macro names must be identifiers D:\library\Pinboard\temp_Ci\FreeRTOSV7.1.1\Project\AVR_ATMega32_KURN_2\..\..\Source\include/FreeRTOS.h:137:3: error: #error Missing definition: INCLUDE_vTaskDelay should be defined in FreeRTOSConfig.h as either 1 or 0. See the Configuration section of the ../AVR_ATMega32_KURN_2.c:22:10: error: 'string' undeclared (first use in this function) ../AVR_ATMega32_KURN_2.c:24:25: error: 'gt' undeclared (first use in this function) Не подскажите кто разбирал его примеры, как вы справлялись с переделками или подскажите хороший источник для обучения FreeRtos.
  4. Обучение FreeRTOS

    Пришел ответ от автора, может кому-нибудь пригодится на заметку, на будующее: В этой программе происходит доступ к разделяемому ресурсу PORTC без использования механизма взаимного исключения. Скорее всего ваша программа не работает именно из-за этого. Попробуйте один из следующих вариантов: 1. Увеличить задержку в циклах на несколько порядков: for( ul = 0; ul < 80000L; ul++ ) for( uq = 0; uq < 40000L; uq++ ) 2. Использовать критическую секцию для организации взаимного исключения: taskENTER_CRITICAL(); PORTC ^= (1 << PC0); taskEXIT_CRITICAL(); ... taskENTER_CRITICAL(); PORTC ^= (1 << PC1); taskEXIT_CRITICAL();
  5. Обучение FreeRTOS

    1. Оказывется в Proteus 7.7. sp3 этот код работает некорректно, на железе все работает на ура. Значит очередной баг в Proteus. Просто тестирую я программы в нем. Написал 2 письма автору, но ответа нету, да теперь и не нужно, оказывается код работает правильно. 2. Как я понял при компиляции в AVR Studio выдает Program: X bytes (Y% Full). Х это и есть размер чистого бинарного файла, который преобразуется в hex. Только вот вопрос: в конроллере hex займет flash память или бинарный? В makefile лесть не стал для запроса bin файла. 3. uOS - довольно толковая документация, все разжевано. Но работаю я на компе ,6Гц, а там мин 2Гц, неизвестно будет нормально работать. И еще не подскажите как ее прикрутить к AVR Studio? В инете данный вопрос я не нашел.
  6. Обучение FreeRTOS

    Здравствуйте. Выбрал FreeRTOS для программирования МК AVR(в основном Atmega8,16,32..). В качестве рабочей среды использую AVR Studio 4.19 + AVR-TOOLCHAIN-3.3.0.710, а для обучения взял "FreeRTOS — операционная система для микроконтроллеров" Андрея Курница. И у меня естнственно возникают вопросы. 1. В первом примере (мигание 2мя светодиодами) используется задержка в задачах следующего типа: for( ul = 0; ul < 4000L; ul++ ) {} . Но с этой формой задержки у меня работает только одна задача, та которая первая вызывается в главном теле ( short main( void ) {....} ). Если использую одну из ф-ий задержек/сна vTaskDelay("Тик"), то работают обе ф-ии на ура. Так вот вообще такая запись как у Курница допускается или автор ее привел просто для понятия, но она никогда не будет работать? Ниже привожу код main.c и FreeRTOSConfig.h. 2. При компиляции этого кода у меня получился hex размером 11кб, на мой взгляд много. Делал все строго по инструкции автора, удалил все ненужное. Автор пишет, что размер ядра составляет 4-9кб, но это пик при использовании всех ф-ии. Так вот, почему же у меня при использовании 2х простых задач получилось уже 11кб? Можно ли как-нибудь программно отключить ненужные файлы. 3. Рассматривать FreeRTOS стал из-за ее популяризации(довольно много находил статей по ней). Может более опытные подскажут какая ОС более оптимальна в соотношении размера hex файла, возможностей и доступности документации? Пишу сюда, потому, что в инете это единственное место на мой взгляд где можно получить ответы по FreeRTOS. Помгоите разобраться. С уважением Дмитрий. main.c #include "FreeRTOS.h" #include "task.h" void vTask1( void *pvParameters ) { volatile unsigned long ul; for(;; ) { PORTC ^= (1 << PC0); for( ul = 0; ul < 4000L; ul++ ) { } } vTaskDelete( NULL ); } void vTask2( void *pvParameters ) { volatile unsigned long ul; for(;; ) { PORTC ^= (1 << PC1); for( ul = 0; ul < 8000L; ul++ ) { } } vTaskDelete( NULL ); } /*-----------------------------------------------------------*/ int main( void ) { DDRC |= (1 << DDC0) | (1 << DDC1); xTaskCreate( vTask1, (signed char *) "Task1", configMINIMAL_STACK_SIZE, NULL, 1, NULL ); xTaskCreate( vTask2, (signed char *) "Task2", configMINIMAL_STACK_SIZE, NULL, 1, NULL ); vTaskStartScheduler(); return 0; } FreeRTOSConfig.h #ifndef FREERTOS_CONFIG_H #define FREERTOS_CONFIG_H #include <avr/io.h> #define configUSE_PREEMPTION 1 #define configUSE_IDLE_HOOK 0//Отключаю vApplicationIdleHook() #define configUSE_TICK_HOOK 0 #define configCPU_CLOCK_HZ ( ( unsigned long ) 8000000 ) #define configTICK_RATE_HZ ( ( portTickType ) 1000 ) #define configMAX_PRIORITIES ( ( unsigned portBASE_TYPE ) 4 ) #define configMINIMAL_STACK_SIZE ( ( unsigned short ) 85 ) #define configTOTAL_HEAP_SIZE ( (size_t ) ( 1500 ) ) #define configMAX_TASK_NAME_LEN ( 8 ) #define configUSE_TRACE_FACILITY 0 #define configUSE_16_BIT_TICKS 1 #define configIDLE_SHOULD_YIELD 1 #define configQUEUE_REGISTRY_SIZE 0 /* Co-routine definitions. */ #define configUSE_CO_ROUTINES 1 #define configMAX_CO_ROUTINE_PRIORITIES ( 2 ) /* Set the following definitions to 1 to include the API function, or zero to exclude the API function. */ #define INCLUDE_vTaskPrioritySet 0 #define INCLUDE_uxTaskPriorityGet 0 #define INCLUDE_vTaskDelete 1 #define INCLUDE_vTaskCleanUpResources 0 #define INCLUDE_vTaskSuspend 0 #define INCLUDE_vTaskDelayUntil 1 #define INCLUDE_vTaskDelay 1 #endif /* FREERTOS_CONFIG_H */
×
×
  • Создать...