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

 
 
 
Reply to this topicStart new topic
> Портирование uCOS под CrossWorks, Кто-нибудь портировал uCOS под CrossWorks?
Lemist
сообщение Apr 29 2010, 14:46
Сообщение #1


Участник
*

Группа: Участник
Сообщений: 27
Регистрация: 28-04-10
Из: город Харьков
Пользователь №: 56 948



Кто-нибудь портировал 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, но...
Отзовитесь, плиз.
Пожалуйста, не удаляйте эту тему.

Сообщение отредактировал Lemist - Apr 29 2010, 15:23
Go to the top of the page
 
+Quote Post
AlexandrY
сообщение Apr 29 2010, 16:37
Сообщение #2


Ally
******

Группа: Модераторы
Сообщений: 6 232
Регистрация: 19-01-05
Пользователь №: 2 050



Поищите в этом проекте. Во всяком случае компилироваться должно без ошибок.
http://www.alylab.eu/OpenProjects/ARMDomin...RMDominator.htm
Go to the top of the page
 
+Quote Post
Lemist
сообщение Apr 30 2010, 07:06
Сообщение #3


Участник
*

Группа: Участник
Сообщений: 27
Регистрация: 28-04-10
Из: город Харьков
Пользователь №: 56 948



Цитата(AlexandrY @ Apr 29 2010, 19:37) *
Поищите в этом проекте. Во всяком случае компилироваться должно без ошибок.
http://www.alylab.eu/OpenProjects/ARMDomin...RMDominator.htm


Спасибо за ссылку, но проект сделан не под процессор типа Cortex. Да, тот демо-проект скомпилировался без ошибок, но применить его не удалось - там все ассемблерные команды ARM, но не Thumb-only processor, каковым - уточняю - является LPC1758 с ядром Cortex. Так что портирование не удалось.
Go to the top of the page
 
+Quote Post
igorsk
сообщение Apr 30 2010, 21:37
Сообщение #4


Частый гость
**

Группа: Участник
Сообщений: 84
Регистрация: 22-03-10
Пользователь №: 56 131



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

Тут смотрел? Упоминается конкретно M3.
Go to the top of the page
 
+Quote Post
Lemist
сообщение May 11 2010, 12:45
Сообщение #5


Участник
*

Группа: Участник
Сообщений: 27
Регистрация: 28-04-10
Из: город Харьков
Пользователь №: 56 948



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


Это сайт Micrium, там по указанной ссылке так просто не попасть - предлагают зарегистрироваться. Все бы ничего, но в процедуре регистрации имеется комбо со списком Target Processor. Так вот, в этом списке НЕТ Cortex, а где же он тогда по этой ссылке упоминается конкретно? Я просто наверняка не пройду регистрацию, потому что не нашел там Cortex. Может, плохо смотрел (хотя два раза и внимательно)?
Go to the top of the page
 
+Quote Post
Lemist
сообщение May 11 2010, 13:50
Сообщение #6


Участник
*

Группа: Участник
Сообщений: 27
Регистрация: 28-04-10
Из: город Харьков
Пользователь №: 56 948



И главная проблема в компиляции проектов под 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, хотя это неправильно.
Есть ли выход из этой ситуации?
Go to the top of the page
 
+Quote Post
bseyur
сообщение May 11 2010, 15:56
Сообщение #7


Участник
*

Группа: Участник
Сообщений: 65
Регистрация: 8-01-07
Из: Томск
Пользователь №: 24 208



А вы не пробовали вообще не указывать директивы вроде code16 или code32? Cortex - то ведь thumb-only процессор, у него один-единственный набор команд, следовательно и необходимость подобных директив отпадает.
В даташите на процессор под ARM-инструкциями для LPC17xx понимаются существующие 32-разрядные инструкции, но на самом деле они лежат в одном наборе с 16-разрядными под общим названием Thumb-2 и не требуют особого объявления. Есть, конечно, такие команды как LDR.N (16 бит) и LDR.W (32 бит), но это уже, скорее, тема для иного разговора, если интересно, можете почитать о них в документации.
Go to the top of the page
 
+Quote Post
Lemist
сообщение May 12 2010, 06:25
Сообщение #8


Участник
*

Группа: Участник
Сообщений: 27
Регистрация: 28-04-10
Из: город Харьков
Пользователь №: 56 948



Цитата(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"
то есть это именованная секция.
Go to the top of the page
 
+Quote Post
Lemist
сообщение May 12 2010, 08:13
Сообщение #9


Участник
*

Группа: Участник
Сообщений: 27
Регистрация: 28-04-10
Из: город Харьков
Пользователь №: 56 948



Просмотрев 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(); - это запрещение и разрешение прерываний - и идут попарно.
Что линковщику нужно?
Go to the top of the page
 
+Quote Post
Lemist
сообщение May 20 2010, 12:39
Сообщение #10


Участник
*

Группа: Участник
Сообщений: 27
Регистрация: 28-04-10
Из: город Харьков
Пользователь №: 56 948



Все то, о чем я писал ранее, относилось к CrossWorks 1.7. После инсталляции CrossWorks 2.0 (версия evaluation) вся эта масса сообщений перешла в категорию warnings, но линкование так и не состоялось - вывалились две ошибки линковщика о неопределенных символах __stack_process_start__ и __stack_process_end__. Очевидно,их нужно куда-нибудь добавить и сформировать стек процесса. Но меня беспокоит не это, а вся эта масса - то, что они стали warnings, вовсе не уменьшило их потенциальной опасности. Так что CrossWorks для меня потеряно... sad.gif
Go to the top of the page
 
+Quote Post

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

 


RSS Текстовая версия Сейчас: 18th July 2025 - 08:57
Рейтинг@Mail.ru


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