Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Портирование uCOS под CrossWorks
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > ARM
Lemist
Кто-нибудь портировал uCOS под CrossWorks? Если да, подскажите, как в этой среде сделать, чтобы CrossWorks понимала PRIMASK, PSP и другие специальные регистры. И вообще, откуда взялись ошибки типа
STM R0, {R4-R11} Io register required
LDM R0, {R4-R11} Io register required
POP {R14} unvalid register list to push/pop instruction (при этом команда PUSH {R14} прошла без вопросов)
ORR LR, LR, #0x04 unshifted register required
Ассемблерные команды вроде бы правильные, соответствуют архитектуре Cortex, но...
Отзовитесь, плиз.
Пожалуйста, не удаляйте эту тему.
AlexandrY
Поищите в этом проекте. Во всяком случае компилироваться должно без ошибок.
http://www.alylab.eu/OpenProjects/ARMDomin...RMDominator.htm
Lemist
Цитата(AlexandrY @ Apr 29 2010, 19:37) *
Поищите в этом проекте. Во всяком случае компилироваться должно без ошибок.
http://www.alylab.eu/OpenProjects/ARMDomin...RMDominator.htm


Спасибо за ссылку, но проект сделан не под процессор типа Cortex. Да, тот демо-проект скомпилировался без ошибок, но применить его не удалось - там все ассемблерные команды ARM, но не Thumb-only processor, каковым - уточняю - является LPC1758 с ядром Cortex. Так что портирование не удалось.
igorsk
Цитата(Lemist @ Apr 30 2010, 08:06) *
Спасибо за ссылку, но проект сделан не под процессор типа Cortex. Да, тот демо-проект скомпилировался без ошибок, но применить его не удалось - там все ассемблерные команды ARM, но не Thumb-only processor, каковым - уточняю - является LPC1758 с ядром Cortex. Так что портирование не удалось.

Тут смотрел? Упоминается конкретно M3.
Lemist
Цитата(igorsk @ May 1 2010, 00:37) *
Тут смотрел? Упоминается конкретно M3.


Это сайт Micrium, там по указанной ссылке так просто не попасть - предлагают зарегистрироваться. Все бы ничего, но в процедуре регистрации имеется комбо со списком Target Processor. Так вот, в этом списке НЕТ Cortex, а где же он тогда по этой ссылке упоминается конкретно? Я просто наверняка не пройду регистрацию, потому что не нашел там Cortex. Может, плохо смотрел (хотя два раза и внимательно)?
Lemist
И главная проблема в компиляции проектов под CrossWorks, так и осталась за кадром.
Дело вот в чем: если при настройке под синтаксис CrossWorks указать директиву
.code 32
то CrossWorks просто весь последующий код понимает как набор ARM-инструкций и на каждую строку ругается примерно так:
Error: attempt to use an ARM instruction on a Thumb-only processor -- `bx LR'
А если указать директиву
.code 16
выдается сообщение другого вида:
C:/Program Files/Rowley Associates Limited/CrossWorks for ARM 1.7/gcc/bin/ld: region UNPLACED_SECTIONS is full (THUMB Flash Debug/LPC1756_Test.elf section .code)
В то же время в datasheet на Cortex (конкретно это микроконтроллер LPC1758) нет никаких указаний, что ARM-инструкции запрещены - они там расписаны, как положено. Впечатление такое, что в CrossWorks где-то есть фича, которую можно установить, и CrossWorks будет все понимать. Но я пока такую фичу НЕ НАШЕЛ. А пока она не установлена, ARM-инструкции для CrossWorks останутся persona non grata, хотя это неправильно.
Есть ли выход из этой ситуации?
bseyur
А вы не пробовали вообще не указывать директивы вроде code16 или code32? Cortex - то ведь thumb-only процессор, у него один-единственный набор команд, следовательно и необходимость подобных директив отпадает.
В даташите на процессор под ARM-инструкциями для LPC17xx понимаются существующие 32-разрядные инструкции, но на самом деле они лежат в одном наборе с 16-разрядными под общим названием Thumb-2 и не требуют особого объявления. Есть, конечно, такие команды как LDR.N (16 бит) и LDR.W (32 бит), но это уже, скорее, тема для иного разговора, если интересно, можете почитать о них в документации.
Lemist
Цитата(bseyur @ May 11 2010, 18:56) *
А вы не пробовали вообще не указывать директивы вроде code16 или code32? Cortex - то ведь thumb-only процессор, у него один-единственный набор команд, следовательно и необходимость подобных директив отпадает.
В даташите на процессор под ARM-инструкциями для LPC17xx понимаются существующие 32-разрядные инструкции, но на самом деле они лежат в одном наборе с 16-разрядными под общим названием Thumb-2 и не требуют особого объявления. Есть, конечно, такие команды как LDR.N (16 бит) и LDR.W (32 бит), но это уже, скорее, тема для иного разговора, если интересно, можете почитать о них в документации.


Если не указывать никакой директивы "вроде code16 или code32", эффект тот же, как и при указании code16 - ассемблерный файл компилится, а потом при линковании выпадают все те сообщения, что упомянуты у меня в предыдущей реплике:
C:/Program Files/Rowley Associates Limited/CrossWorks for ARM 1.7/gcc/bin/ld: region UNPLACED_SECTIONS is full (THUMB Flash Debug/LPC1756_Test.elf section .code)
Что это за region UNPLACED_SECTIONS и чем это он забит? Ведь в компилируемом ассемблерном файле четко указано
.section .code, "ax"
то есть это именованная секция.
Lemist
Просмотрев help на CrossWorks, я вызвал в UltraEdit файл flash_placement.xml и добавил в него строку: <ProgramSection alignment="4" load="Yes" inputsections="*(.code .code.*)" name=".code"/>
После этого линковщик перестал выдавать сообщение "region UNPLACED_SECTIONS is full", но остальные ошибки с предупреждением dangerous error остались. Все они одного вида - first occurrence: THUMB Flash Debug/os_cpu_c.o: thumb call to arm. И касаются они как правило двух вещей в этих модулях - OS_ENTER_CRITICAL(); и OS_EXIT_CRITICAL(); - это запрещение и разрешение прерываний - и идут попарно.
Что линковщику нужно?
Lemist
Все то, о чем я писал ранее, относилось к CrossWorks 1.7. После инсталляции CrossWorks 2.0 (версия evaluation) вся эта масса сообщений перешла в категорию warnings, но линкование так и не состоялось - вывалились две ошибки линковщика о неопределенных символах __stack_process_start__ и __stack_process_end__. Очевидно,их нужно куда-нибудь добавить и сформировать стек процесса. Но меня беспокоит не это, а вся эта масса - то, что они стали warnings, вовсе не уменьшило их потенциальной опасности. Так что CrossWorks для меня потеряно... sad.gif
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.