Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: uCOS-II LPC 2124 port
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > ARM
emerg_reanimator
Я пытаюсь портировать микроКОС (AN-1229, Keil MCB2100 ) на 2124 (Olimex е2124), но у меня пока как неполучается.

Пробывал под ИАР 4.11, после инициализации платы зависает на IdleTask (нет переключения задач). Под 3.21 пока не удалось скомпилировать.

Разумная идея или/и ценный опыт приветсвувуются smile.gif
IgorKossak
Цитата(emerg_reanimator @ Dec 29 2004, 14:12)
Пробывал под ИАР 4.11, после инициализации платы зависает на IdleTask (нет переключения задач). Под 3.21 пока не удалось скомпилировать.
*

Обратите внимание на конфигурирование и инициализацию системного таймера, особенно прерывания от его.
lamerok
Цитата(emerg_reanimator @ Dec 29 2004, 14:12)
Я пытаюсь портировать микроКОС (AN-1229, Keil MCB2100 ) на 2124 (Olimex е2124), но у меня пока как неполучается.

Пробывал под ИАР 4.11, после инициализации платы зависает на IdleTask (нет переключения задач). Под 3.21 пока не удалось скомпилировать.

Разумная идея или/и ценный опыт приветсвувуются smile.gif
*



в ИАР 4.11 Если вы делаете пошаговую отладку, то так и будет, так как таймер то тикает, а вы стоите.. и системный тик пропускается, поэтому нужно поставить брейкпоинт сразу на какой-нибудь задаче, только после этого брейкпоинта опять будет сбой тиков.. и опять только идле будет работать, кроме того, необходимо перевести в режим SYS, например не мудрствуя лукаво в файле KikstartCard_cstartup.s79.
mrs r0,cpsr ; Original PSR value
bic r0,r0,#MODE_BITS ; Clear the mode bits
orr r0,r0,#IRQ_MODE ; Set IRQ mode bits
msr cpsr_c,r0 ; Change the mode
ldr sp,=SFE(IRQ_STACK) & 0xFFFFFFF8 ; End of IRQ_STACK

bic r0,r0,#MODE_BITS ; Clear the mode bits
orr r0,r0,#SVC_MODE ; Set System mode bits
msr cpsr_c,r0 ; Change the mode
ldr sp,=SFE(CSTACK) & 0xFFFFFFF8 ; End of CSTACK

поэтому смотреть работу задачи лучше на портах, например сделать задачку которая преключает портик и смотреть он переключается или нет...
Вот ссылочка на тему.. там пример есть
http://forum.electronix.ru/index.php?showtopic=1179&hl=
emerg_reanimator
Спасибо за полезные ответы!

На счёт пропуска тика очень похоже, но непонятно. Почему он пропускается?

Таймер и прерывания настройны правильно. На сколько я знаю микроКОС переходит в System режим при инициализации. В моём случае так есть, проверял все пять битиков установлены. Но можно ещё раз проверить. smile.gif

Было бы интересно если можно было бы при симуляции отлавливать изменения ножек порта. На подобии uVision Debug functions в Keil'e.
emerg_reanimator
Вопрос относится больше к самой процедуре компиляции, чем к ОС.

При компиляции проекта с использованием cstartup.s79 (для IAR). В функции ?cstartup вызвается функция __segment_init() в которой копируются сегменты кода (initTable).

Непонятно в каком случае нужно копировать и собственно говоря зачем?

Объясните пожалуйста! smile.gif
IgorKossak
Цитата(emerg_reanimator @ Jan 9 2005, 15:19)
Непонятно в каком случае нужно копировать и собственно говоря зачем?
*

Если Вы в своей программе обявляли переменные и присваивали им начальные значения, то эти начальные значения (инициализаторы) хранятся в ПЗУ и при старте программы копируются в инициализируемые переменные.
Т. е., в Вашем случае происходит копирование сегмента DATA_ID (ПЗУ) в сегмент DATA_I (ОЗУ).
emerg_reanimator
Ясно,
спасибо!

Я понял почему у меня ОС не заработала (надо было вначале доки читать :P ). В ИАРе нет поддержки симуляции перефирии (а вот в Кейле есть). Таймер не тикает. Для этих целей прелагается использовать генератор прерываний. Но это далеко не всегда удобно.

К сожалению у меня пока нет адаптера Wiggler поэтому приходится пользовать симулятор.
one_man_show
Цитата(emerg_reanimator @ Jan 10 2005, 15:37)
К сожалению у меня пока нет адаптера Wiggler поэтому приходится пользовать симулятор.
*

Повторю слова коллег, почитайте форум, найдете советы, как быстро и легко сделать Wiggler-совместимый адаптер.
IgorKossak
Цитата(one_man_show @ Jan 11 2005, 01:15)
Цитата(emerg_reanimator @ Jan 10 2005, 15:37)
К сожалению у меня пока нет адаптера Wiggler поэтому приходится пользовать симулятор.
*

Повторю слова коллег, почитайте форум, найдете советы, как быстро и легко сделать Wiggler-совместимый адаптер.
*


А ещё за схемой Wiggler можно сходить на Сахару
one_man_show
А мне не удалось нормально использовать сочетание Олимекс+Вигглер+ИАР. Поэтому, не меняя железо, пришлось перейти на КроссВоркс, работает без проблем. Вообще замечено, что Олимекс лучше живет с КроссВорксом. Если не ошибаюсь, то эта среда единственная, которая содержит примеры и "знает" что-то про Олимекс.
jojo
На всякий случай прикрепляю файл с ИАР ROM Monitor для ARM. Он пропатчен и работает на скорости 115200 вместо оригинальных 9600. Для начала работы с LPC210x вполне сгодится, и Виглер не нужен.
Примеры использования есть в IAR 4. Разумеется, надо правильно сконфигурировать проект, иначе работать не будет smile3046.gif
emerg_reanimator
Спасибо за оперативные ответы!

Схему адаптера я уже скачал и сделал ПП для него. Просто сейчас плата изготавливается и пока приходится пользоваться подручными средствами.

Я использую ИАР 3.21а (кстати установленный 4.11а распознаётся утилиткой в систрэйе как 4.10b) и надеюсь, что проблем особых с адаптером не будет.

Я сейчас пользуюсь Кейл-овским микровижэн+ГНУ. Пример для настройки таймера работает без проблем. А вот с родным бета-компилятором не хочет: после выхода из процедуры прерывания не сбрасываеться I-флаг.

Пока мне не удалось запустить ОС на 2124. Проблема остаётся в таймере. Я даже без ОС не могу его оживить. Это касается ИАР. Ещё раз повторюсь под Кейл таймер заработал. Различия между примерами для ИАР и для Кейл заключаютя в начальной инициализации процессора, но какие настройки влияют на работу таймера пока сообразить не могу.

Если кому-нибудь нечего будет делать на досуге, взгляните плз smile.gif

См. приложение
emerg_reanimator
Цитата(jojo @ Jan 14 2005, 10:17)
На всякий случай прикрепляю файл с ИАР ROM Monitor для ARM. Он пропатчен и работает на скорости 115200 вместо оригинальных 9600. Для начала работы с LPC210x вполне сгодится, и Виглер не нужен.
Примеры использования есть  в IAR 4. Разумеется, надо правильно сконфигурировать проект, иначе работать не будет  smile3046.gif
*


Спасибо, как будет свободное время обязатльено посмотрю. smile.gif
IgorKossak
emerg_reanimator
Вместо вставки такого длинного кода лучше, пожалуйста, прикрепляйте файл к сообщению.
Спасибо.
lamerok
В иаре в симуляторе для таймера можно использвать макрос, который будет генерить прерывания.

Только переименуйте его в irq.mac (он у меня так не прикрепился, я ему расщирение на zip Поменял)

В меню debugger->Setup macros галку на use macro, и вставьте файл irq.mac
emerg_reanimator
Спасибо за полезнность!

а можно прокоментированть содержимое:

__orderInterrupt("0x18",10000,1000,2,50,100);
0х18 - адрес прерывания
10000 - время активации (РС=10000=> прерывание срабатывает)
1000 - период повторения прерывания в машинных циклах
2 - как по-русски? Дисперсия что-ли? и что это такое?
50 - задержка. Зачем и почему?
100 - вероятность появления
emerg_reanimator
Проблема была в настройках компилятора.
Моя конфигурация: аарм 3.21.1.4, иццарм 3.21.1.1 (оценочная версия).

Пока не воспользовался расширением ИАР для объявления прерываний, процессор висел.

Подробности:
Код
__irq void Tmr_TickISR_Handler (void)
//void Tmr_TickISR_Handler (void)
{
 T0IR = 1;
 
 i32uWaitCounter++;
 
 VICVectAddr = 0;
}


При наличии спецификатора __irq компилируется следующий код выхода из функции прерывания:
Код
...
LDMIA    SP!,{R0,R1}       ;; Pop
SUBS     PC,LR,#+0x4       ;; return
...


Соответственно при если спецификатора нет, то и программы тоже нет:
Код
...
BX       LR                ;; return
...


Есть ли способ в АНСИ С указать, что эта функция обработчик прерывания?
emerg_reanimator
УРА!!!
Победа smile.gif

Заморгал лампочками Олимекс.

Ошибка как часто бывает в самом простом: не правильно зажигал диоды. biggrin.gif
alogvinov
На сайте http://geocities.com/michaelanburaj есть готовый порт для семейства
LPC2ххх. У меня на плате Olimex с процессором LPC2124 завёлся практически
сразу, отредактировал только частоту кварца и объём RAM в файле линкера.
IgorKossak
alogvinov
Да, действительно, у Анбураджа и раньше были более рабочие порты, чем даже те, которые публиковались на Микриуме.
Но это до недавнего времени, пока не появились AN-1014 и порт для Атмеловских SAMов. Я попробовал тот и другой - пошло сразу.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.