Lemist 0 29 апреля, 2010 Опубликовано 29 апреля, 2010 (изменено) · Жалоба Кто-нибудь портировал 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, но... Отзовитесь, плиз. Пожалуйста, не удаляйте эту тему. Изменено 29 апреля, 2010 пользователем Lemist Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
AlexandrY 3 29 апреля, 2010 Опубликовано 29 апреля, 2010 · Жалоба Поищите в этом проекте. Во всяком случае компилироваться должно без ошибок. http://www.alylab.eu/OpenProjects/ARMDomin...RMDominator.htm Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Lemist 0 30 апреля, 2010 Опубликовано 30 апреля, 2010 · Жалоба Поищите в этом проекте. Во всяком случае компилироваться должно без ошибок. http://www.alylab.eu/OpenProjects/ARMDomin...RMDominator.htm Спасибо за ссылку, но проект сделан не под процессор типа Cortex. Да, тот демо-проект скомпилировался без ошибок, но применить его не удалось - там все ассемблерные команды ARM, но не Thumb-only processor, каковым - уточняю - является LPC1758 с ядром Cortex. Так что портирование не удалось. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
igorsk 0 30 апреля, 2010 Опубликовано 30 апреля, 2010 · Жалоба Спасибо за ссылку, но проект сделан не под процессор типа Cortex. Да, тот демо-проект скомпилировался без ошибок, но применить его не удалось - там все ассемблерные команды ARM, но не Thumb-only processor, каковым - уточняю - является LPC1758 с ядром Cortex. Так что портирование не удалось. Тут смотрел? Упоминается конкретно M3. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Lemist 0 11 мая, 2010 Опубликовано 11 мая, 2010 · Жалоба Тут смотрел? Упоминается конкретно M3. Это сайт Micrium, там по указанной ссылке так просто не попасть - предлагают зарегистрироваться. Все бы ничего, но в процедуре регистрации имеется комбо со списком Target Processor. Так вот, в этом списке НЕТ Cortex, а где же он тогда по этой ссылке упоминается конкретно? Я просто наверняка не пройду регистрацию, потому что не нашел там Cortex. Может, плохо смотрел (хотя два раза и внимательно)? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Lemist 0 11 мая, 2010 Опубликовано 11 мая, 2010 · Жалоба И главная проблема в компиляции проектов под 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 0 11 мая, 2010 Опубликовано 11 мая, 2010 · Жалоба А вы не пробовали вообще не указывать директивы вроде code16 или code32? Cortex - то ведь thumb-only процессор, у него один-единственный набор команд, следовательно и необходимость подобных директив отпадает. В даташите на процессор под ARM-инструкциями для LPC17xx понимаются существующие 32-разрядные инструкции, но на самом деле они лежат в одном наборе с 16-разрядными под общим названием Thumb-2 и не требуют особого объявления. Есть, конечно, такие команды как LDR.N (16 бит) и LDR.W (32 бит), но это уже, скорее, тема для иного разговора, если интересно, можете почитать о них в документации. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Lemist 0 12 мая, 2010 Опубликовано 12 мая, 2010 · Жалоба А вы не пробовали вообще не указывать директивы вроде 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 0 12 мая, 2010 Опубликовано 12 мая, 2010 · Жалоба Просмотрев 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 0 20 мая, 2010 Опубликовано 20 мая, 2010 · Жалоба Все то, о чем я писал ранее, относилось к CrossWorks 1.7. После инсталляции CrossWorks 2.0 (версия evaluation) вся эта масса сообщений перешла в категорию warnings, но линкование так и не состоялось - вывалились две ошибки линковщика о неопределенных символах __stack_process_start__ и __stack_process_end__. Очевидно,их нужно куда-нибудь добавить и сформировать стек процесса. Но меня беспокоит не это, а вся эта масса - то, что они стали warnings, вовсе не уменьшило их потенциальной опасности. Так что CrossWorks для меня потеряно... :( Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться