реклама на сайте
подробности

 
 
18 страниц V  « < 16 17 18  
Reply to this topicStart new topic
> Начало работы with scmRTOS, Несколько вопросиков
amusin
сообщение Feb 28 2014, 10:36
Сообщение #256


Частый гость
**

Группа: Участник
Сообщений: 120
Регистрация: 2-09-05
Из: Екатеринбург
Пользователь №: 8 165



Пробую запустить проект-пример 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).
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение Feb 28 2014, 11:27
Сообщение #257


Гуру
******

Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095



Цитата(amusin @ Feb 28 2014, 12:36) *
PS. В makefile помимо пути до компилятора поправил CHIP = STM32F10X_MD_VL (на дискавери value-line).
Надо также поправить размеры памяти в скрипте линкера (*.ld)


--------------------
На любой вопрос даю любой ответ
"Write code that is guaranteed to work, not code that doesn’t seem to break" (C++ FAQ)
Go to the top of the page
 
+Quote Post
amusin
сообщение Feb 28 2014, 11:51
Сообщение #258


Частый гость
**

Группа: Участник
Сообщений: 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
...
Go to the top of the page
 
+Quote Post
AHTOXA
сообщение Mar 1 2014, 18:05
Сообщение #259


фанат дивана
******

Группа: Свой
Сообщений: 3 387
Регистрация: 9-08-07
Из: Уфа
Пользователь №: 29 684



Хм. По идее всё должно работать после правки параметра CHIP в makefile.
Попробуйте пример 4-Debug, он изначально рассчитан на discovery.
Если не заработает, попробуйте другой компилятор. На нём всё проверялось.


--------------------
Если бы я знал, что такое электричество...
Go to the top of the page
 
+Quote Post
amusin
сообщение Mar 3 2014, 04:14
Сообщение #260


Частый гость
**

Группа: Участник
Сообщений: 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

Go to the top of the page
 
+Quote Post
AHTOXA
сообщение Mar 3 2014, 08:41
Сообщение #261


фанат дивана
******

Группа: Свой
Сообщений: 3 387
Регистрация: 9-08-07
Из: Уфа
Пользователь №: 29 684



Не вижу ничего криминального в этом фрагменте листинга. Скорее всего косяк где-то дальше.
Но раз проблема решена, то и фиг с нимsm.gif


--------------------
Если бы я знал, что такое электричество...
Go to the top of the page
 
+Quote Post
Argon-11
сообщение May 10 2014, 15:48
Сообщение #262





Группа: Новичок
Сообщений: 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
Go to the top of the page
 
+Quote Post
mdmitry
сообщение Mar 5 2015, 15:50
Сообщение #263


Начинающий профессионал
*****

Группа: Свой
Сообщений: 1 215
Регистрация: 25-10-06
Из: СПб
Пользователь №: 21 648



Для начинающих может быть полезно:
scmrtos-installation-on-arduino


--------------------
Наука изощряет ум; ученье вострит память. Козьма Прутков
Go to the top of the page
 
+Quote Post
sevstels
сообщение Sep 16 2015, 11:48
Сообщение #264


Знающий
****

Группа: Участник
Сообщений: 626
Регистрация: 3-12-07
Пользователь №: 32 910



Хочу поинтересоваться таким нюансом.
Приходится поддерживать много разных проектов под AVR для разных потребителей и высылать им обновления, чтоб они могли собирать свои проекты самостоятельно. Собрал подпрограммы в IAR библиотеку, чтоб было легче сопровождать. Но тут столкнулся с трудностью: не получается вкомпилировать объекты scmRTOS в библиотеку. Например мютексы. RTOS "не собирается" без настроек под конкретный проект. Может кто сталкивался, подскажите решение.


--------------------
Herz - дятел.
Go to the top of the page
 
+Quote Post
k155la3
сообщение Feb 8 2017, 15:18
Сообщение #265


Профессионал
*****

Группа: Свой
Сообщений: 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
        }
    }
}



Go to the top of the page
 
+Quote Post
AlexG
сообщение May 26 2018, 10:19
Сообщение #266


Участник
*

Группа: Свой
Сообщений: 50
Регистрация: 10-05-12
Пользователь №: 71 756



Использовал ли кто-нибудь scmRTOS с IAR EWARM со включенной опцией "Enable thread support in library"?
Возникли проблемы с динамическим выделением памяти в нескольких процессах одновременно - malloc по умолчанию не реентерабельный и программа падает очень быстро. Вариантов решения два:
  1. Подменить malloc и free на свои через --redirect malloc и --redirect free
  2. Использовать штатные 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 (явно или не явно). Проблема курицы и яйца какая-то.
Go to the top of the page
 
+Quote Post
AHTOXA
сообщение May 26 2018, 12:07
Сообщение #267


фанат дивана
******

Группа: Свой
Сообщений: 3 387
Регистрация: 9-08-07
Из: Уфа
Пользователь №: 29 684



Цитата(AlexG @ May 26 2018, 15:19) *
должен использовать Tmutex, но чтобы существовал объект класса Tmutex, нужно чтобы он был создан с помощью new (явно или не явно). Проблема курицы и яйца какая-то.

Можно создать объект класса TMutex статически.


--------------------
Если бы я знал, что такое электричество...
Go to the top of the page
 
+Quote Post
AlexG
сообщение May 27 2018, 07:27
Сообщение #268


Участник
*

Группа: Свой
Сообщений: 50
Регистрация: 10-05-12
Пользователь №: 71 756



По варианту 1 все получилось. Одного статически созданного мьютекса хватило, чтобы потоки не дрались за подмененный malloc. Других конфликтов из-за многопоточности внутри стандартной библиотеки пока не обнаружилось.
Go to the top of the page
 
+Quote Post

18 страниц V  « < 16 17 18
Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 18th April 2024 - 23:27
Рейтинг@Mail.ru


Страница сгенерированна за 0.01484 секунд с 7
ELECTRONIX ©2004-2016