amusin 0 28 февраля, 2014 Опубликовано 28 февраля, 2014 · Жалоба Пробую запустить проект-пример 1-EventFlag на STM32VL-Discovery в средах Eclipse и Atollic. Проект собрал вне среды запуском утилиты make, натравив на компилятор - gnuarm/4_6_2012q2. Все под Win7x64. В районе перехода на os_start() ядро уходит в Hard Fault. Atollic выдает чуть больше инфы: говорит о попытке обращения по адресу 0x20002004 (ОЗУ до 0x20001FFF). В чем может быть дело? Начал осваивать Eclipse и еще не разобрался, как сделать отображение листинга ассемблера (не компилятора) в окне Disassembly. Потому пока точно не знаю, на какой строке вылетает. PS. В makefile помимо пути до компилятора поправил CHIP = STM32F10X_MD_VL (на дискавери value-line). Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Сергей Борщ 119 28 февраля, 2014 Опубликовано 28 февраля, 2014 · Жалоба PS. В makefile помимо пути до компилятора поправил CHIP = STM32F10X_MD_VL (на дискавери value-line).Надо также поправить размеры памяти в скрипте линкера (*.ld) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
amusin 0 28 февраля, 2014 Опубликовано 28 февраля, 2014 · Жалоба Надо также поправить размеры памяти в скрипте линкера (*.ld) Вроде все необходимое сделал автор примеров. Линкеру подсовывается $(CHIP).ld Было: MEMORY { RAM (xrw) : ORIGIN = 0x20000000, LENGTH = 20K ... Стало: MEMORY { RAM (xrw) : ORIGIN = 0x20000000, LENGTH = 8K ... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
AHTOXA 14 1 марта, 2014 Опубликовано 1 марта, 2014 · Жалоба Хм. По идее всё должно работать после правки параметра CHIP в makefile. Попробуйте пример 4-Debug, он изначально рассчитан на discovery. Если не заработает, попробуйте другой компилятор. На нём всё проверялось. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
amusin 0 3 марта, 2014 Опубликовано 3 марта, 2014 · Жалоба Хм. По идее всё должно работать после правки параметра 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 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
AHTOXA 14 3 марта, 2014 Опубликовано 3 марта, 2014 · Жалоба Не вижу ничего криминального в этом фрагменте листинга. Скорее всего косяк где-то дальше. Но раз проблема решена, то и фиг с ним:) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Argon-11 0 10 мая, 2014 Опубликовано 10 мая, 2014 (изменено) · Жалоба Не знаю, по адресу обращаюсь или нет... Не удается скомпилировать 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... Изменено 10 мая, 2014 пользователем Argon-11 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
mdmitry 0 5 марта, 2015 Опубликовано 5 марта, 2015 · Жалоба Для начинающих может быть полезно: scmrtos-installation-on-arduino Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Gradient 1 16 сентября, 2015 Опубликовано 16 сентября, 2015 · Жалоба Хочу поинтересоваться таким нюансом. Приходится поддерживать много разных проектов под AVR для разных потребителей и высылать им обновления, чтоб они могли собирать свои проекты самостоятельно. Собрал подпрограммы в IAR библиотеку, чтоб было легче сопровождать. Но тут столкнулся с трудностью: не получается вкомпилировать объекты scmRTOS в библиотеку. Например мютексы. RTOS "не собирается" без настроек под конкретный проект. Может кто сталкивался, подскажите решение. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
k155la3 26 8 февраля, 2017 Опубликовано 8 февраля, 2017 · Жалоба Хочу поинтересоваться таким нюансом. Приходится поддерживать много разных проектов под 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 } } } Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
AlexG 1 26 мая, 2018 Опубликовано 26 мая, 2018 · Жалоба Использовал ли кто-нибудь 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 (явно или не явно). Проблема курицы и яйца какая-то. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
AHTOXA 14 26 мая, 2018 Опубликовано 26 мая, 2018 · Жалоба должен использовать Tmutex, но чтобы существовал объект класса Tmutex, нужно чтобы он был создан с помощью new (явно или не явно). Проблема курицы и яйца какая-то. Можно создать объект класса TMutex статически. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
AlexG 1 27 мая, 2018 Опубликовано 27 мая, 2018 · Жалоба По варианту 1 все получилось. Одного статически созданного мьютекса хватило, чтобы потоки не дрались за подмененный malloc. Других конфликтов из-за многопоточности внутри стандартной библиотеки пока не обнаружилось. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
AlexG 1 23 октября, 2018 Опубликовано 23 октября, 2018 · Жалоба Хочется реализовать работу с устройствами, подключенными у микроконтроллеру через последовательный интерфейс примерно следующим образом: Есть процесс (A), отвечающий за организацию обмена и реализацию протокола Есть несколько процессов (B), работающих каждый со своим подключенным устройством Когда одному из процессов B необходимо записать данные в устройство, он вызывает функцию write и усыпляется до получения от устройства подтверждения записи данных или до истечения таймаута, затем проиходит пробуждение процесса и возврат ему результата операции из функции write Когда одному из процессов B необходимо прочитать данные из устройства, он вызывает функцию read и усыпляется до получения от устройства данных или до истечения таймаута, затем проиходит пробуждение процесса и возврат ему результата операции из функции read Процесс A в свободное от выполнения заявок процессов B время подтягивает из устройств неприоритетные данные, т.е. не находится просто в спячке в ожидании OS::message Что-то сразу не соображу, какие средства ScmRTOS для этого лучше подходят. Не вижу ничего с логикой работы "инициировать операцию и уснуть до ее завершения". Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
dxp 34 24 октября, 2018 Опубликовано 24 октября, 2018 · Жалоба Вариантов масса. От простейшего - метнули данные и встали на ожидание через OS::TEventFlag::wait(timeout) - проснулись, когда флаг просигналит процесс А (насколько я понял логику работы), и до организации очередей на OS::channel. OS::message - как вариант, аналогичный флагу событий с той разницей, что помимо собственно события можно ещё доставлять попутно какую-то полезную информацию, если это требуется. В общем, не увидел затруднений. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться