|
|
|
Начало работы with scmRTOS, Несколько вопросиков |
|
|
|
Feb 28 2014, 11:51
|
Частый гость
Группа: Участник
Сообщений: 120
Регистрация: 2-09-05
Из: Екатеринбург
Пользователь №: 8 165
|
Цитата(Сергей Борщ @ Feb 28 2014, 17:27) Надо также поправить размеры памяти в скрипте линкера (*.ld) Вроде все необходимое сделал автор примеров. Линкеру подсовывается $(CHIP).ld Было: Код MEMORY { RAM (xrw) : ORIGIN = 0x20000000, LENGTH = 20K ... Стало: Код MEMORY { RAM (xrw) : ORIGIN = 0x20000000, LENGTH = 8K ...
|
|
|
|
|
Mar 3 2014, 04:14
|
Частый гость
Группа: Участник
Сообщений: 120
Регистрация: 2-09-05
Из: Екатеринбург
Пользователь №: 8 165
|
Цитата(AHTOXA @ Mar 2 2014, 00:05) Хм. По идее всё должно работать после правки параметра CHIP в makefile. Попробуйте пример 4-Debug, он изначально рассчитан на discovery. Если не заработает, попробуйте другой компилятор. На нём всё проверялось. Попробовал пример 4-Debug - не заработал. Попробовал рекомендованный компилятор - работают оба проекта! Спасибо за подсказку! Глянул в листинг. В компиляторе 4.6... переход на os_start выглядит так Код 80002c0: f7ff ffa6 bl 8000210 <os_start> 80002c4: 200003c4 .word 0x200003c4 В рекомендованном 4.8... - Код 80002c6: f7ff ffa3 bl 8000210 <os_start> 80002ca: bf00 nop
|
|
|
|
|
May 10 2014, 15:48
|
Группа: Новичок
Сообщений: 5
Регистрация: 22-02-09
Пользователь №: 45 198
|
Не знаю, по адресу обращаюсь или нет... Не удается скомпилировать 1-EventFlag с помощью GCC 4.8.
выдает вот это:
z:\GCC_ARM\1-EventFlag>make --- building 1-EventFlag Ошибка в синтаксисе команды. Ошибка в синтаксисе команды. Ошибка в синтаксисе команды. Ошибка в синтаксисе команды. --- compiling ./src/main.cpp... ./src/main.cpp:128:1: fatal error: opening dependency file obj/main.d: No such f ile or directory compilation terminated. make: *** [obj/main.o] Ошибка 1
В чем м.б. дело?
До этого ставил Sourcery G++ Lite 2010.09-51 - то же самое.
на форуме вычитал, что "может отсутствовать sh.exe" что это такое и где взять? почему этого нет в комплекте с make или того же G++ Lite?
установил CoreUtils, ошибка пропала. но возникла другая проблема:
z:\GCC_ARM\1-EventFlag>make --- building 1-EventFlag --- compiling ./src/main.cpp... make: Interrupt/Exception caught (code = 0xc00000fd, addr = 0x4217b3)
вроде тоже пропала проблема: перенес все, что касается GNU (GCC, CoreUtils) в папку без скобок в названии (было в Program Files (x86)) теперь пытаюсь прикрутить к eclipse...
Сообщение отредактировал Argon-11 - May 10 2014, 15:11
|
|
|
|
|
Feb 8 2017, 15:18
|
Профессионал
Группа: Свой
Сообщений: 1 123
Регистрация: 8-03-09
Из: Днепр
Пользователь №: 45 848
|
Цитата(sevstels @ Sep 16 2015, 14:48) Хочу поинтересоваться таким нюансом. Приходится поддерживать много разных проектов под AVR для разных потребителей и высылать им обновления, чтоб они могли собирать свои проекты самостоятельно. Собрал подпрограммы в IAR библиотеку, чтоб было легче сопровождать. Но тут столкнулся с трудностью: не получается вкомпилировать объекты scmRTOS в библиотеку. Например мютексы. RTOS "не собирается" без настроек под конкретный проект. Может кто сталкивался, подскажите решение. Там, насколько помню, используются шаблоны. Это может ограничить возможность сборки универсальной библиотеки. Или вообще такую возможность. Код namespace OS { template<> void TIdleProc::exec() { for(;;) { #if scmRTOS_IDLE_HOOK_ENABLE == 1 idle_process_user_hook(); #endif
#if scmRTOS_TARGET_IDLE_HOOK_ENABLE == 1 idle_process_target_hook(); #endif } } }
|
|
|
|
|
May 26 2018, 10:19
|
Участник
Группа: Свой
Сообщений: 50
Регистрация: 10-05-12
Пользователь №: 71 756
|
Использовал ли кто-нибудь scmRTOS с IAR EWARM со включенной опцией "Enable thread support in library"? Возникли проблемы с динамическим выделением памяти в нескольких процессах одновременно - malloc по умолчанию не реентерабельный и программа падает очень быстро. Вариантов решения два: - Подменить malloc и free на свои через --redirect malloc и --redirect free
- Использовать штатные IARовские библиотечные функции в многопоточном варианте, для этого надо реализовать System locks interface, а конкретно функции
void __iar_system_Mtxinit(__iar_Rmtx *); /* Initialize a system lock */ void __iar_system_Mtxdst(__iar_Rmtx *);/*Destroy a system lock */ void __iar_system_Mtxlock(__iar_Rmtx *); /* Lock a system lock */ void __iar_system_Mtxunlock(__iar_Rmtx *); /* Unlock a system lock */ и еще четыре аналогичных __iar_file_*
Второй вариант выглядит предпочтительным, т.к. если ограничиться заменой malloc конфликт может вылезти в какой-нибудь другой не реентерабельной функции системной библиотеки. Но есть сомнения в возможности увязать System locks interface с ОС на C++: допустим, выполняется оператор new, он вызывает malloc, тот вызывает __iar_system_Mtxlock, тот должен использовать Tmutex, но чтобы существовал объект класса Tmutex, нужно чтобы он был создан с помощью new (явно или не явно). Проблема курицы и яйца какая-то.
|
|
|
|
|
May 27 2018, 07:27
|
Участник
Группа: Свой
Сообщений: 50
Регистрация: 10-05-12
Пользователь №: 71 756
|
По варианту 1 все получилось. Одного статически созданного мьютекса хватило, чтобы потоки не дрались за подмененный malloc. Других конфликтов из-за многопоточности внутри стандартной библиотеки пока не обнаружилось.
|
|
|
|
|
|
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|