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

 
 
> 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
 
Start new topic
Ответов
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
Сергей Борщ
сообщение Jul 1 2011, 06:12
Сообщение #6


Гуру
******

Группа: Модераторы
Сообщений: 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

Сообщений в этой теме
- Acvarif   scmRTOS (версия 310) IAR AVR 5511 (mega128a)   Jun 30 2011, 08:29
||- - Acvarif   Цитата(Сергей Борщ @ Jul 1 2011, 09:12) С...   Jul 1 2011, 06:56
||- - Сергей Борщ   QUOTE (Acvarif @ Jul 1 2011, 09:56) Интер...   Jul 1 2011, 07:40
||- - Acvarif   Цитата(Acvarif @ Jul 1 2011, 09:56) Понял...   Jul 1 2011, 08:38
||- - Acvarif   Пока ничего не получается. Перешел опять на версию...   Jul 1 2011, 11:48
|- - AHTOXA   Цитата(Acvarif @ Jun 30 2011, 18:54) А пр...   Jun 30 2011, 17:04
|- - Acvarif   Цитата(AHTOXA @ Jun 30 2011, 20:04) Приме...   Jun 30 2011, 17:48
|- - Acvarif   Цитата(Acvarif @ Jun 30 2011, 20:48) Спас...   Jun 30 2011, 19:24
|- - AHTOXA   Цитата(Acvarif @ Jun 30 2011, 23:48) Може...   Jun 30 2011, 19:39
- - ReAl   Поставьте себе SVN Сделайте Кодsvn co http://s...   Jun 30 2011, 19:29
|- - Acvarif   Цитата(ReAl @ Jun 30 2011, 22:29) Поставь...   Jun 30 2011, 19:49
|- - AHTOXA   Цитата(Acvarif @ Jul 1 2011, 01:49) Прошу...   Jun 30 2011, 19:56
|- - Acvarif   Цитата(AHTOXA @ Jun 30 2011, 22:56) Хм. П...   Jun 30 2011, 20:36
|- - shreck   Цитата(Acvarif @ Jul 1 2011, 03:36) Thu J...   Jul 1 2011, 01:38
- - ReAl   Только сегодня добрался до этого вопроса. По дорог...   Jul 18 2011, 11:35


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

 


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


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