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

 
 
2 страниц V   1 2 >  
Reply to this topicStart new topic
> scmRTOS (версия 310) IAR AVR 5511 (mega128a)
Acvarif
сообщение Jun 30 2011, 08:29
Сообщение #1


Знающий
****

Группа: Участник
Сообщений: 998
Регистрация: 27-08-08
Пользователь №: 39 850



Попытался скомпилировать scmRTOS (версия 310) IAR AVR 5511 (mega128a) - (Error[Pe020]: identifier "SPMCR" is undefined ...\scmRTOS_TARGET_CFG.h 119). Похоже на несовместимость версий ОС и IAR? Может кто сталкивался. Как можно подправить?

С какой версией IAR AVR scmRTOS (версия 310) работает без исправлений?
Go to the top of the page
 
+Quote Post
Acvarif
сообщение Jun 30 2011, 11:42
Сообщение #2


Знающий
****

Группа: Участник
Сообщений: 998
Регистрация: 27-08-08
Пользователь №: 39 850



Цитата(Acvarif @ Jun 30 2011, 11:29) *
Попытался скомпилировать scmRTOS (версия 310) IAR AVR 5511 (mega128a) - (Error[Pe020]: identifier "SPMCR" is undefined ...\scmRTOS_TARGET_CFG.h 119). Похоже на несовместимость версий ОС и IAR? Может кто сталкивался. Как можно подправить?

С какой версией IAR AVR scmRTOS (версия 310) работает без исправлений?


Вроде понял.
Если компилировать тестовый проект (во вложении) под Atmega32 все работает. Под 128a появляется вышеописанная ошибка потому, как в 128а име6ется регистр SPMCSR (Store Program Memory Control and Status Register), а в scmRTOS забит только SPMCR регистр (подходит для меги32).

Вот только где он забит и как это дело подправить пока не найду.

Помогите please, кому не лень

Цитата(Acvarif @ Jun 30 2011, 14:22) *
Вроде понял.
Если компилировать тестовый проект (во вложении) под Atmega32 все работает. Под 128a появляется вышеописанная ошибка потому, как в 128а име6ется регистр SPMCSR (Store Program Memory Control and Status Register), а в scmRTOS забит только SPMCR регистр (подходит для меги32).

Вот только где он забит и как это дело подправить пока не найду.

Помогите please, кому не лень


Нашел. Достаточно в файле scmRTOS_TARGET_CFG.h в строке #define SPM_CONTROL_REG SPMCR - SPMCR заменить на SPMCSR

Вообще у IAR какой-то кавардак с этими регистрами, в частности с их названиями. Неужели нельзя одни и те же по функциональности регистры называть одинаково? Хотя с другой стороны они поддерживаются того, что прописано в даташитах на девайсы.

Сообщение отредактировал Acvarif - Jun 30 2011, 11:23
Прикрепленные файлы
Прикрепленный файл  scmrtos_avr_iar_snapshot.rar ( 92.8 килобайт ) Кол-во скачиваний: 12
 
Go to the top of the page
 
+Quote Post
ReAl
сообщение Jun 30 2011, 12:47
Сообщение #3


Нечётный пользователь.
******

Группа: Свой
Сообщений: 2 033
Регистрация: 26-05-05
Из: Бровари, Україна
Пользователь №: 5 417



Цитата(Acvarif @ Jun 30 2011, 14:42) *
Нашел. Достаточно в файле scmRTOS_TARGET_CFG.h в строке #define SPM_CONTROL_REG SPMCR - SPMCR заменить на SPMCSR

Вообще у IAR какой-то кавардак с этими регистрами, в частности с их названиями. Неужели нельзя одни и те же по функциональности регистры называть одинаково? Хотя с другой стороны они поддерживаются того, что прописано в даташитах на девайсы.
Вот именно. Кавардак у Атмела.

У avr-gcc имена регистров -- простые #define на адреса, поэотму нет проблем с
Код
#ifdef SPMCR
#define SPM_CONTROL_REG SPMCR
#elif defined(SPMCSR)
#define SPM_CONTROL_REG SPMCSR
#else
#error SPM_CONTROL_REG is not defined
#endif
У IAR так сделать не выйдет, нужно поимённо проверять модели контроллеров. На всех не напасёшся, так что примеры сделаны под какие-то конкретные модели, при смене нужно менять.
В AVR-ских примерах под 4.0 я постарался напихать комментариев вида "пример рассчитан на XXX, для других может понадобиться изменение имён регистров", в документации коротко упомняуто где и что сидит по файлам примеров.


--------------------
Ну, я пошёл… Если что – звоните…
Go to the top of the page
 
+Quote Post
Acvarif
сообщение Jun 30 2011, 12:54
Сообщение #4


Знающий
****

Группа: Участник
Сообщений: 998
Регистрация: 27-08-08
Пользователь №: 39 850



Цитата(ReAl @ Jun 30 2011, 15:47) *
В AVR-ских примерах под 4.0 я постарался напихать комментариев вида "пример рассчитан на XXX, для других может понадобиться изменение имён регистров", в документации коротко упомняуто где и что сидит по файлам примеров.


Да, верно. У Atmel.
А примеры под 4.0 где можно взять?
Go to the top of the page
 
+Quote Post
Acvarif
сообщение Jun 30 2011, 16:32
Сообщение #5


Знающий
****

Группа: Участник
Сообщений: 998
Регистрация: 27-08-08
Пользователь №: 39 850



И все же скажите пожалуйста под какую версию IAR AVR выполнены примеры scmRTOS v3.10? В Iar avr 5511 (mega32) (1_EventFlag) все компилится нормально, но в симуляторе работает с предупреждениями и неверно - зацикливается в ядре здесь

Код
        RaiseContextSwitch();
        do
        {
            EnableContextSwitch();
            DUMMY_INSTR();
            DisableContextSwitch();
        }
        while(!IsContextSwitchDone());


и в OS_Target.h здесь

Код
INLINE inline void EnableInterrupts() { __enable_interrupt();  }
INLINE inline void DisableInterrupts() { __disable_interrupt(); }

#pragma segment="CSTACK"
#pragma segment="RSTACK"

#define  ABS_WORD(x)  (*((volatile word*)x))

INLINE inline TStackItem* GetDataSP()   { return reinterpret_cast<TStackItem*>(ABS_WORD(28)); }
INLINE inline TStackItem* GetReturnSP() { return reinterpret_cast<TStackItem*>(SP); }

INLINE inline void SetISRStackPointers()
{
    ABS_WORD(28) = reinterpret_cast<word>(__segment_end("CSTACK"));
    SP = reinterpret_cast<word>(__segment_end("RSTACK")) - 1;
}

INLINE inline void SetDataSP(TStackItem* sp)   { ABS_WORD(28) = reinterpret_cast<word>(sp); }
INLINE inline void SetReturnSP(TStackItem* sp) { SP = reinterpret_cast<word>(sp); }

namespace OS
{
    INLINE inline void EnableContextSwitch()  { EnableInterrupts();  }
    INLINE inline void DisableContextSwitch() { DisableInterrupts(); }
}


(Thu Jun 30 19:04:28 2011: The stack pointer for stack 'RStack' (currently DATA:0x0001A5) is outside the stack range (DATA:0x000080 to
DATA:0x0000A0)
)

При переходе на mega128a в симуляторе виснуть начинает гораздо раньше (все время сидит на OS::Run();
И все же попробовал запустил в железе, надеясь увидеть дергание PINB4 по прериванию таймера 1 . В железе (под mega128a) не работает совсем. Очевидно так же как и в симуляторе висит.

Подскажите пожалуйста как все же запустить OS в симуляторе (в железе тоже должна заработать).
Очень уж хочется опробовать ее возможности и сравнить с обычной программой на C.
Привлекают (по документации) ее шустрость и небольшие требования к ресурсам железа.
Какраз для этого и железо имеется под рукой и реальная задача (асинхронный обмен и обработка данных по двум USART)
Go to the top of the page
 
+Quote Post
AHTOXA
сообщение Jun 30 2011, 17:04
Сообщение #6


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

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



Цитата(Acvarif @ Jun 30 2011, 18:54) *
А примеры под 4.0 где можно взять?

Примерно здесь.


--------------------
Если бы я знал, что такое электричество...
Go to the top of the page
 
+Quote Post
Acvarif
сообщение Jun 30 2011, 17:48
Сообщение #7


Знающий
****

Группа: Участник
Сообщений: 998
Регистрация: 27-08-08
Пользователь №: 39 850



Цитата(AHTOXA @ Jun 30 2011, 20:04) *
Примерно здесь.


Спасибо. Попробую разобраться...

Совсем запутался в файлах, где что куда.
Может есть где одним архивом Samples для AVR IAR?
Go to the top of the page
 
+Quote Post
Acvarif
сообщение Jun 30 2011, 19:24
Сообщение #8


Знающий
****

Группа: Участник
Сообщений: 998
Регистрация: 27-08-08
Пользователь №: 39 850



Цитата(Acvarif @ Jun 30 2011, 20:48) *
Спасибо. Попробую разобраться...

Совсем запутался в файлах, где что куда.
Может есть где одним архивом Samples для AVR IAR?


Ничего не получается. Полная путаница.
Если у кого есть Samples для AVR IAR в сборе выложите пожалуйста.
Скажите пожалуйста под какую версию IAR AVR выполнены примеры в scmRTOS v 3.10?

Спасибо.

Сообщение отредактировал Acvarif - Jun 30 2011, 19:31
Go to the top of the page
 
+Quote Post
ReAl
сообщение Jun 30 2011, 19:29
Сообщение #9


Нечётный пользователь.
******

Группа: Свой
Сообщений: 2 033
Регистрация: 26-05-05
Из: Бровари, Україна
Пользователь №: 5 417



Поставьте себе SVN
Сделайте
Код
svn co http://scmrtos.svn.sourceforge.net/svnroot/scmrtos/branches/pre-v400/Samples/AVR/IAR scmRTOS-samples
для получения кода примеров AVR/IAR.
Потом перейдите в образовавшийся каталог scmRTOS-samples (ну или дайте в строке выше другое понравившееся имя) и запустите батник switch.bat для подкачки кода ОС.

Потом достаточно будет запускать
Код
svn up
для получения апдейтов.


--------------------
Ну, я пошёл… Если что – звоните…
Go to the top of the page
 
+Quote Post
AHTOXA
сообщение Jun 30 2011, 19:39
Сообщение #10


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

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



Цитата(Acvarif @ Jun 30 2011, 23:48) *
Может есть где одним архивом Samples для AVR IAR?

Там же внизу есть ссылка "Download GNU tarball". Это как раз и есть одним архивом sm.gif
А вообще конечно лучше поставить клиент svn, всяко пригодится.


--------------------
Если бы я знал, что такое электричество...
Go to the top of the page
 
+Quote Post
Acvarif
сообщение Jun 30 2011, 19:49
Сообщение #11


Знающий
****

Группа: Участник
Сообщений: 998
Регистрация: 27-08-08
Пользователь №: 39 850



Цитата(ReAl @ Jun 30 2011, 22:29) *
Поставьте себе SVN
Сделайте
Код
svn co http://scmrtos.svn.sourceforge.net/svnroot/scmrtos/branches/pre-v400/Samples/AVR/IAR scmRTOS-samples
для получения кода примеров AVR/IAR.
Потом перейдите в образовавшийся каталог scmRTOS-samples (ну или дайте в строке выше другое понравившееся имя) и запустите батник switch.bat для подкачки кода ОС.

Потом достаточно будет запускать
Код
svn up
для получения апдейтов.



Виноват, но, что такое SVN я понятия не имею. Разбираться с этим... разберусь конечно. Наверняка еще понадобится.
Если у кого есть возможность буду признателен за архив Samples/AVR/IAR
И всетаки под какой версией AVR/IAR корректно работают Samples/AVR/IAR scmRTOS версии 3.10?


Цитата(AHTOXA @ Jun 30 2011, 22:39) *
Там же внизу есть ссылка "Download GNU tarball". Это как раз и есть одним архивом sm.gif
А вообще конечно лучше поставить клиент svn, всяко пригодится.


Прошу прощения. Не врубился. GNU tarball я скачал. Там все пустое. Как этим всем пользоваться?
Go to the top of the page
 
+Quote Post
AHTOXA
сообщение Jun 30 2011, 19:56
Сообщение #12


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

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



Цитата(Acvarif @ Jul 1 2011, 01:49) *
Прошу прощения. Не врубился. GNU tarball я скачал. Там все пустое. Как этим всем пользоваться?

Хм. Проверил вот эту ссылку - всё скачалось, все примеры и сама ось.


--------------------
Если бы я знал, что такое электричество...
Go to the top of the page
 
+Quote Post
Acvarif
сообщение Jun 30 2011, 20:36
Сообщение #13


Знающий
****

Группа: Участник
Сообщений: 998
Регистрация: 27-08-08
Пользователь №: 39 850



Цитата(AHTOXA @ Jun 30 2011, 22:56) *
Хм. Проверил вот эту ссылку - всё скачалось, все примеры и сама ось.


Спасибо. Все скачалось нормально (не по той ссылке ходил). Попробую разобраться...

Цитата(Acvarif @ Jun 30 2011, 23:05) *
Спасибо. Все скачалось нормально (не по той ссылке ходил). Попробую разобраться...


Запустил в IAR AVR 5511 все прошло нормально. При переходе на симулятор та же картина:

Предупреждения типа

Thu Jun 30 23:19:57 2011: The stack pointer for stack 'CStack' (currently DATA:0x00022A) is outside the stack range (DATA:0x000100 to
DATA:0x000120)

при заходе в main на Timer1_Ovf.wait();
и повисание на тех же местах (код выше). Думаю в железе будет все то же. Или я не прав? Может я чего не понимаю.

Неужели в симуляторе так и не плучится увидеть работу хотя бы двух процессов?

Цель простая - увидеть в дебагере простое дергание ногами (типа PORTB ^= (1<<4)) хотя бы в одном процессе (например по прерываниям таймера 1)

Наверняка то же самое можно будет увидеть и в железе. Дальше все должно плучаться...

Что я делаю не так?
Go to the top of the page
 
+Quote Post
shreck
сообщение Jul 1 2011, 01:38
Сообщение #14


Местный
***

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



Цитата(Acvarif @ Jul 1 2011, 03:36) *
Thu Jun 30 23:19:57 2011: The stack pointer for stack 'CStack' (currently DATA:0x00022A) is outside the stack range (DATA:0x000100 to
DATA:0x000120)

Это нормально, ведь ОСь использует свои стеки для задач. Не обращайте внимание.

Цитата(Acvarif @ Jul 1 2011, 03:36) *
Неужели в симуляторе так и не плучится увидеть работу хотя бы двух процессов?

В симуляторе IAR надо ручками запустить необходимые прерывания. И это очень неудобно. А без прерываний Ось как будет работать.
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение Jul 1 2011, 06:12
Сообщение #15


Гуру
******

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



QUOTE (Acvarif @ Jun 30 2011, 19:32) *
но в симуляторе работает с предупреждениями и неверно - зацикливается в ядре здесь
Симулятор ИАРа от рождения никогда не симулировал периферию. Никогда. И не собирается. А в переключателе контекста используется свойство периферии вызывать прерывание. Хотите в симуляторе - используйте scmRTOS_CONTEXT_SWITCH_SCHEME 0, но это будет уже другая программа, с другими требованиями к стекам и т.д. Не мучайте себя - отлаживайте сразу в железе.


--------------------
На любой вопрос даю любой ответ
"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

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

 


RSS Текстовая версия Сейчас: 18th July 2025 - 03:45
Рейтинг@Mail.ru


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