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

 
 
> Вышел порт scmRTOS для Cortex-M3., Желающих прошу тестировать.
shreck
сообщение Dec 8 2008, 10:13
Сообщение #1


Местный
***

Группа: Свой
Сообщений: 327
Регистрация: 24-06-06
Из: Томск
Пользователь №: 18 328



Порт доступен на SourceForge scmRTOS в ветке trunk.

Прошу писать о багах/замечаниях/пожеланиях.
Go to the top of the page
 
+Quote Post
3 страниц V   1 2 3 >  
Start new topic
Ответов (1 - 30)
spf
сообщение Dec 9 2008, 16:44
Сообщение #2


Странник
****

Группа: Свой
Сообщений: 766
Регистрация: 29-08-05
Из: Екатеринбург
Пользователь №: 8 051



scmrtos-cortexm3-snapshot.rar

PS: Был неприятно удивлен, что страничка про снапшоты на гугловском ресурсе группы стала пустая, как и все остальные. sad.gif


--------------------
"Как много есть на свете вещей, которые мне не нужны!" Сократ
Go to the top of the page
 
+Quote Post
IgorKossak
сообщение Dec 9 2008, 19:06
Сообщение #3


Шаман
******

Группа: Модераторы
Сообщений: 3 064
Регистрация: 30-06-04
Из: Киев, Украина
Пользователь №: 221



Цитата(spf @ Dec 9 2008, 18:44) *
scmrtos-cortexm3-snapshot.rar

PS: Был неприятно удивлен, что страничка про снапшоты на гугловском ресурсе группы стала пустая, как и все остальные. sad.gif

Зато Jessica Simpson Boots появилась. Некому грохнуть?
Go to the top of the page
 
+Quote Post
Ivan A-R
сообщение Dec 9 2008, 22:45
Сообщение #4


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

Группа: Участник
Сообщений: 92
Регистрация: 21-06-07
Из: Saint-Petersburg
Пользователь №: 28 607



Кстати, а есть ли точно такие но с перламутровыми пуговицами? Другими словами портом Cortex-M3 под GCC кто нибудь озабочен?
Go to the top of the page
 
+Quote Post
shreck
сообщение Dec 10 2008, 04:21
Сообщение #5


Местный
***

Группа: Свой
Сообщений: 327
Регистрация: 24-06-06
Из: Томск
Пользователь №: 18 328



Цитата(Ivan A-R @ Dec 10 2008, 05:45) *
Кстати, а есть ли точно такие но с перламутровыми пуговицами? Другими словами портом Cortex-M3 под GCC кто нибудь озабочен?

Боюсь, что на данный момент нет. Я юзаю только IAR.
Go to the top of the page
 
+Quote Post
Sergey_K
сообщение Dec 10 2008, 06:38
Сообщение #6





Группа: Участник
Сообщений: 6
Регистрация: 11-11-08
Пользователь №: 41 537



А для какой цели приоритет прерываний от системного таймера выставляется минимальным?
Go to the top of the page
 
+Quote Post
Ivan A-R
сообщение Dec 10 2008, 07:21
Сообщение #7


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

Группа: Участник
Сообщений: 92
Регистрация: 21-06-07
Из: Saint-Petersburg
Пользователь №: 28 607



Цитата(shreck @ Dec 10 2008, 07:21) *
Боюсь, что на данный момент нет. Я юзаю только IAR.

Ок. Значит есть смысл протянуть свои шаловливые ручёнки в этом направлении. %)
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение Dec 10 2008, 07:26
Сообщение #8


Гуру
******

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



Цитата(Sergey_K @ Dec 10 2008, 08:38) *
А для какой цели приоритет прерываний от системного таймера выставляется минимальным?
Вот, нашел. На этом форуме уже было обсуждение этого вопроса, но его я что-то не могу так сразу найти.


--------------------
На любой вопрос даю любой ответ
"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
shreck
сообщение Dec 10 2008, 09:17
Сообщение #9


Местный
***

Группа: Свой
Сообщений: 327
Регистрация: 24-06-06
Из: Томск
Пользователь №: 18 328



Цитата(Sergey_K @ Dec 10 2008, 13:38) *
А для какой цели приоритет прерываний от системного таймера выставляется минимальным?

По-моему мнению, приоритет системного таймера должен быть самым низким, но выше чем у программнго прерывания. Это логично, но...
Ядро дает возможность назначать уровнеь приоритета прерываниям от 0 до 255 (т.е. используется 8 бит). При этом производитель конкретного кристалла может уменьшить количество бит приоритета, например, STM32 использует 4 бита. Фишка в том, что, цитирую:
Цитата
The priority registers are stored with the implemented values first. This means that if
there are four bits of priority, the priority value is stored in bits [7:4] of the byte.
However, if there are three bits of priority, the priority value is stored in bits [7:5] of the
byte.
Таким образом, чтобы назначить приоритет системному таймеру чуть выше чем у программного прерывания, необходимо привязаться к конкретному процу, а не к ядру, что, мне лично, очень не хочется (сейчас порт не привязан ни к какому конкретному процу, можно юзать его с любым).


Цитата(Ivan A-R @ Dec 10 2008, 14:21) *
Ок. Значит есть смысл протянуть свои шаловливые ручёнки в этом направлении. %)

Думаю перейти на GCC будет достаточно легко. Порт содержит только один, специфический для компилятора момент - используется директива принудительного встраивания функции (_Pragma("inline=forced")). Думаю у GCC есть что-то подобное. Да в ассеблерном файле пара директив (выравнивание, да thumb режим). И все.
Go to the top of the page
 
+Quote Post
Ivan A-R
сообщение Dec 10 2008, 10:31
Сообщение #10


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

Группа: Участник
Сообщений: 92
Регистрация: 21-06-07
Из: Saint-Petersburg
Пользователь №: 28 607



Цитата(shreck @ Dec 10 2008, 12:17) *
Думаю перейти на GCC будет достаточно легко. Порт содержит только один, специфический для компилятора момент - используется директива принудительного встраивания функции (_Pragma("inline=forced")). Думаю у GCC есть что-то подобное. Да в ассеблерном файле пара директив (выравнивание, да thumb режим). И все.


Мерси, буду знать =)
Go to the top of the page
 
+Quote Post
MrYuran
сообщение Dec 10 2008, 10:50
Сообщение #11


Беспросветный оптимист
******

Группа: Свой
Сообщений: 4 640
Регистрация: 26-12-07
Из: Н.Новгород
Пользователь №: 33 646



Цитата(shreck @ Dec 10 2008, 12:17) *
Порт содержит только один, специфический для компилятора момент - используется директива принудительного встраивания функции (_Pragma("inline=forced")). Думаю у GCC есть что-то подобное. Да в ассеблерном файле пара директив (выравнивание, да thumb режим). И все.

Плюс как минимум описания прерываний


--------------------
Программирование делится на системное и бессистемное. ©Моё :)
— а для кого-то БГ — это Bill Gilbert =)
Go to the top of the page
 
+Quote Post
shreck
сообщение Dec 10 2008, 11:59
Сообщение #12


Местный
***

Группа: Свой
Сообщений: 327
Регистрация: 24-06-06
Из: Томск
Пользователь №: 18 328



Цитата(MrYuran @ Dec 10 2008, 17:50) *
Плюс как минимум описания прерываний

Для кортекса обработчик прерывания - это самая обычная функция без каких-либо #pragma vector=... , __interrupt и тому подобного.
Go to the top of the page
 
+Quote Post
Ivan A-R
сообщение Dec 10 2008, 12:36
Сообщение #13


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

Группа: Участник
Сообщений: 92
Регистрация: 21-06-07
Из: Saint-Petersburg
Пользователь №: 28 607



Цитата(shreck @ Dec 10 2008, 14:59) *
Для кортекса обработчик прерывания - это самая обычная функция без каких-либо #pragma vector=... , __interrupt и тому подобного.

Угу.. Я эту фичу тоже заценил =) Правда ещё не разобрался, как оно именно работает. Касательно приоритетов.
Go to the top of the page
 
+Quote Post
spf
сообщение Dec 10 2008, 16:56
Сообщение #14


Странник
****

Группа: Свой
Сообщений: 766
Регистрация: 29-08-05
Из: Екатеринбург
Пользователь №: 8 051



Цитата(IgorKossak @ Dec 10 2008, 00:06) *
Зато Jessica Simpson Boots появилась. Некому грохнуть?


Вроде все подчистил и вернул странички на место.


--------------------
"Как много есть на свете вещей, которые мне не нужны!" Сократ
Go to the top of the page
 
+Quote Post
Ivan A-R
сообщение Dec 10 2008, 21:56
Сообщение #15


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

Группа: Участник
Сообщений: 92
Регистрация: 21-06-07
Из: Saint-Petersburg
Пользователь №: 28 607



Кстати, а какой ассемблер в IAR генерят __set_interrupt_state(), __get_interrupt_state() ? А то я вроде как замену написал, но не уверен что правильно.
Go to the top of the page
 
+Quote Post
Ivan A-R
сообщение Dec 10 2008, 23:04
Сообщение #16


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

Группа: Участник
Сообщений: 92
Регистрация: 21-06-07
Из: Saint-Petersburg
Пользователь №: 28 607



В общем и целом 1-EventFlag уже через GCC компилится. Но блох пока не ловил.

http://mercurial.intuxication.org/hg/scmrtos-cm3-gcc
Go to the top of the page
 
+Quote Post
shreck
сообщение Dec 11 2008, 03:38
Сообщение #17


Местный
***

Группа: Свой
Сообщений: 327
Регистрация: 24-06-06
Из: Томск
Пользователь №: 18 328



Цитата(Ivan A-R @ Dec 11 2008, 04:56) *
Кстати, а какой ассемблер в IAR генерят __set_interrupt_state(), __get_interrupt_state() ? А то я вроде как замену написал, но не уверен что правильно.
Вот такой.
Код
dword s = __get_interrupt_state();    MRS R0, PRIMASK
__set_interrupt_state(s);    MSR PRIMASK, R0
__enable_interrupt();    CPSIE    I
__disable_interrupt();    CPSID   I
Go to the top of the page
 
+Quote Post
Ivan A-R
сообщение Dec 11 2008, 06:56
Сообщение #18


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

Группа: Участник
Сообщений: 92
Регистрация: 21-06-07
Из: Saint-Petersburg
Пользователь №: 28 607



Цитата(shreck @ Dec 11 2008, 06:38) *
Вот такой.
Код
dword s = __get_interrupt_state();    MRS R0, PRIMASK
__set_interrupt_state(s);    MSR PRIMASK, R0
__enable_interrupt();    CPSIE    I
__disable_interrupt();    CPSID   I

Мерси, так и сделал. Только enable/disable тоже через PRIMASK.
Go to the top of the page
 
+Quote Post
Ivan A-R
сообщение Dec 22 2008, 00:51
Сообщение #19


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

Группа: Участник
Сообщений: 92
Регистрация: 21-06-07
Из: Saint-Petersburg
Пользователь №: 28 607



Наконец добился нормальной сборки через GCC 4.3.2 и работоспособности на реальном железе (STM32F10x). Это пример 4-BlinkLeds построенный на базе 1-EvenFlag.

Собирал с помощью codesourcery-вского тулчейна arm-none-eabi (http://www.codesourcery.com/gnu_toolchains/arm/portal/release642).

Следует иметь в виду следующий момент (который мне много крови попортил). Если у вас тулчейн собранный для arm-elf то инициализация глобальных объектов происходит через таблицу в секции .ctors. А вот arm-none-eabi использует для этого секцию .init_array (См. файл 4-BlinkLeds/Lib/STM32_SEC_FLASH.ld)

Да, и кортексы умеет только 4.3.x... GCC 4.2.x про существование кортексов и Thumb-2 ничего не знает.

Все мои терзания здесь: http://mercurial.intuxication.org/hg/scmrtos-cm3-gcc

P.S. по оригинальному коду для IAR никаких замечаний нет =)))
Go to the top of the page
 
+Quote Post
IgorKossak
сообщение Dec 22 2008, 20:08
Сообщение #20


Шаман
******

Группа: Модераторы
Сообщений: 3 064
Регистрация: 30-06-04
Из: Киев, Украина
Пользователь №: 221



Цитата(Ivan A-R @ Dec 22 2008, 02:51) *
Собирал с помощью codesourcery-вского тулчейна arm-none-eabi (http://www.codesourcery.com/gnu_toolchains/arm/portal/release642).

По ссылке на datasheet с указанной Вами страницы выходим на таблицу Run-Time Libraries, где говорится, что для версии Lite библиотеки для ARMv7 Thumb-2, т. е. для cortex, не предусмотрены. Что у Вас за версия?
Go to the top of the page
 
+Quote Post
Ivan A-R
сообщение Dec 22 2008, 21:11
Сообщение #21


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

Группа: Участник
Сообщений: 92
Регистрация: 21-06-07
Из: Saint-Petersburg
Пользователь №: 28 607



IgorKossak, так Run-Time Libraries не используются. Мы же компилим ось без сторонних библиотек.

А так я не вдавался, что у них входит в понятие Run-Time Libraries.

А версия ровно эта.
Go to the top of the page
 
+Quote Post
IgorKossak
сообщение Dec 23 2008, 08:32
Сообщение #22


Шаман
******

Группа: Модераторы
Сообщений: 3 064
Регистрация: 30-06-04
Из: Киев, Украина
Пользователь №: 221



Цитата(Ivan A-R @ Dec 22 2008, 23:11) *
IgorKossak, так Run-Time Libraries не используются. Мы же компилим ось без сторонних библиотек.

В этом то и проблема. ОС ведь не самоцель. Помимо неё есть ещё и приложение, которое использует библиотеки. Думал, что на codesourcery будет нормальный тулчейн для cortex, а он оказался кастрированный.
Go to the top of the page
 
+Quote Post
Ivan A-R
сообщение Dec 23 2008, 09:42
Сообщение #23


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

Группа: Участник
Сообщений: 92
Регистрация: 21-06-07
Из: Saint-Petersburg
Пользователь №: 28 607



Ну тут ещё вопрос, что они подразумевают под Run-Time Libraries... Я вот сейчас смотрю - newlib имеется.
Go to the top of the page
 
+Quote Post
AHTOXA
сообщение Dec 27 2008, 22:01
Сообщение #24


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

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



Если что, сборка от Клёна вроде бы умеет компилить под Кортексы. По крайней мере светодиодом я замигалsmile.gif
А при помощи arm-none-eabi от codesourcery собрался развесистый пример от FreeRtos.


--------------------
Если бы я знал, что такое электричество...
Go to the top of the page
 
+Quote Post
AHTOXA
сообщение May 24 2009, 15:38
Сообщение #25


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

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



Цитата(Ivan A-R @ Dec 22 2008, 06:51) *
Все мои терзания здесь: http://mercurial.intuxication.org/hg/scmrtos-cm3-gcc

Пробую пример 4-BlinkLeds.
Компилится (выдаёт изрядно ворнингов). Но полноценно работает только с оптимизацией -O0.


С оптимизацией -O1, -O2 и -Os - работает (дрыгает ногами) только до вызова OS::Run(). Потом, похоже, висит. Где висит, сказать не могу, отладчик пока не запустилsmile.gif

Компилю Codesourcery 2009q1-161. Пробовал 2008q3-66, то же самое.


Просто тут наклёвывается интересный проект, хотел наконец-таки начать использовать scmRTOS. Но пока страшновато:-)


--------------------
Если бы я знал, что такое электричество...
Go to the top of the page
 
+Quote Post
AHTOXA
сообщение Jul 20 2009, 19:58
Сообщение #26


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

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



Уф, вроде заработалоsmile.gif
заменил в OS_Target.h
#define __enable_interrupt() __asm__ __volatile__ ("MOVS r0, #0\nMSR PRIMASK, r0")
//#define __disable_interrupt() __asm__ __volatile__ ("MOVS r0, #1\nMSR PRIMASK, r0")


на


#define __enable_interrupt() __asm__ __volatile__ ("cpsie i")
#define __disable_interrupt() __asm__ __volatile__ ("cpsid i")

Пример в аттаче.Прикрепленный файл  sample_scmrtos_stm32_gcc.rar ( 84.52 килобайт ) Кол-во скачиваний: 178


--------------------
Если бы я знал, что такое электричество...
Go to the top of the page
 
+Quote Post
AHTOXA
сообщение Sep 13 2009, 08:32
Сообщение #27


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

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



Выловил ещё один коварный багsmile.gif
При определённых условиях портился R0, и всё падало. Я уже начал думать, что это баг gcc, и даже собирался сделать баг-репорт, но потом заметил, что места порчи R0 подозрительно совпадают с вызовом деструктора TCritSect...
Короче, виноват оказался
Код
INLINE inline void __set_interrupt_state(TStatusReg status)
{
    __asm__ __volatile__ (
        "MOVS r0, %0\n"
        "MSR PRIMASK, r0\n"
        : : "r"(status)
    );
}

из OS_Target.h, забывший указать R0 в списке clobbered регистров.
Исправил на
Код
INLINE inline void __set_interrupt_state(TStatusReg status)
{
    __asm__ __volatile__ (
        "MSR PRIMASK, %0\n"
        : : "r"(status)
    );
}

, и мои волосы стали мягкими и шелковистымиsmile.gif
Кстати, предыдущий глюк, по всей видимости, был из той же оперы.

ЗЫ. А так - всё вроде вполне работает, делаю два больших проекта. Может, залить уже порт в репозиторий?


--------------------
Если бы я знал, что такое электричество...
Go to the top of the page
 
+Quote Post
Ivan A-R
сообщение Sep 13 2009, 09:26
Сообщение #28


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

Группа: Участник
Сообщений: 92
Регистрация: 21-06-07
Из: Saint-Petersburg
Пользователь №: 28 607



AHTOXA, Круто =) Надо тоже пофиксить-пощупать пока в отпуске время есть %)
Go to the top of the page
 
+Quote Post
AHTOXA
сообщение Sep 14 2009, 16:28
Сообщение #29


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

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



Залил таки порт под gcc в репозиторий. Все примеры работают.


--------------------
Если бы я знал, что такое электричество...
Go to the top of the page
 
+Quote Post
IgorKossak
сообщение Sep 14 2009, 18:46
Сообщение #30


Шаман
******

Группа: Модераторы
Сообщений: 3 064
Регистрация: 30-06-04
Из: Киев, Украина
Пользователь №: 221



Цитата(AHTOXA @ Sep 14 2009, 19:28) *
Залил таки порт под gcc в репозиторий. Все примеры работают.

В примерах не следовало саму ОС с портом дублировать.
Go to the top of the page
 
+Quote Post
AHTOXA
сообщение Sep 14 2009, 18:53
Сообщение #31


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

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



Упс laughing.gif
Спасибо, исправил.


--------------------
Если бы я знал, что такое электричество...
Go to the top of the page
 
+Quote Post

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

 


RSS Текстовая версия Сейчас: 21st August 2025 - 15:51
Рейтинг@Mail.ru


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