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

 
 
3 страниц V  < 1 2 3 >  
Reply to this topicStart new topic
> Вышел порт scmRTOS для Cortex-M3., Желающих прошу тестировать.
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

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

 


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


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