Перейти к содержанию
    

Я пытаюсь портировать микроКОС (AN-1229, Keil MCB2100 ) на 2124 (Olimex е2124), но у меня пока как неполучается.

 

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

 

Разумная идея или/и ценный опыт приветсвувуются :)

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

Обратите внимание на конфигурирование и инициализацию системного таймера, особенно прерывания от его.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Я пытаюсь портировать микроКОС (AN-1229, Keil MCB2100 ) на 2124 (Olimex е2124), но у меня пока как неполучается.

 

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

 

Разумная идея или/и ценный опыт приветсвувуются :)

 

 

в ИАР 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=

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Спасибо за полезные ответы!

 

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

 

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

 

Было бы интересно если можно было бы при симуляции отлавливать изменения ножек порта. На подобии uVision Debug functions в Keil'e.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Вопрос относится больше к самой процедуре компиляции, чем к ОС.

 

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

 

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

 

Объясните пожалуйста! :)

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

Если Вы в своей программе обявляли переменные и присваивали им начальные значения, то эти начальные значения (инициализаторы) хранятся в ПЗУ и при старте программы копируются в инициализируемые переменные.

Т. е., в Вашем случае происходит копирование сегмента DATA_ID (ПЗУ) в сегмент DATA_I (ОЗУ).

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Ясно,

спасибо!

 

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

 

К сожалению у меня пока нет адаптера Wiggler поэтому приходится пользовать симулятор.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

К сожалению у меня пока нет адаптера Wiggler поэтому приходится пользовать симулятор.

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

К сожалению у меня пока нет адаптера Wiggler поэтому приходится пользовать симулятор.

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

А ещё за схемой Wiggler можно сходить на Сахару

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

А мне не удалось нормально использовать сочетание Олимекс+Вигглер+ИАР. Поэтому, не меняя железо, пришлось перейти на КроссВоркс, работает без проблем. Вообще замечено, что Олимекс лучше живет с КроссВорксом. Если не ошибаюсь, то эта среда единственная, которая содержит примеры и "знает" что-то про Олимекс.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

На всякий случай прикрепляю файл с ИАР ROM Monitor для ARM. Он пропатчен и работает на скорости 115200 вместо оригинальных 9600. Для начала работы с LPC210x вполне сгодится, и Виглер не нужен.

Примеры использования есть в IAR 4. Разумеется, надо правильно сконфигурировать проект, иначе работать не будет :smile3046:

115200_LPC210xRomMon.zip

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Спасибо за оперативные ответы!

 

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

 

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

 

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

 

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

 

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

 

См. приложение

src.iar321a.zip

src.keil.zip

Изменено пользователем emerg_reanimator

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

На всякий случай прикрепляю файл с ИАР ROM Monitor для ARM. Он пропатчен и работает на скорости 115200 вместо оригинальных 9600. Для начала работы с LPC210x вполне сгодится, и Виглер не нужен.

Примеры использования есть  в IAR 4. Разумеется, надо правильно сконфигурировать проект, иначе работать не будет  :smile3046:

 

Спасибо, как будет свободное время обязатльено посмотрю. :)

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

emerg_reanimator

Вместо вставки такого длинного кода лучше, пожалуйста, прикрепляйте файл к сообщению.

Спасибо.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

В иаре в симуляторе для таймера можно использвать макрос, который будет генерить прерывания.

 

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

 

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

irq.zip

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...