|
|
  |
Переход AVR to ARM, посоветуйте с чего начать:) |
|
|
|
Oct 22 2009, 13:51
|
Гуру
     
Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448

|
Цитата(arm123 @ Oct 22 2009, 17:43)  Но мне не понятно как мы её можем использовать попав уже в обработчик SWI? Это что получается нужно читать команду с которой мы перешли из памяти или как? Поясните пожалуйста. Да, именно так. Вот, например, обработчик от ARM: CODE ;;; Copyright ARM Ltd 1998. All rights reserved.
PRESERVE8 AREA SWI_Area, CODE, READONLY
EXPORT SWI_Handler IMPORT C_SWI_Handler
T_bit EQU 0x20
SWI_Handler
STMFD sp!, {r0-r3, r12, lr} ; Store registers MOV r1, sp ; Set pointer to parameters MRS r0, spsr ; Get spsr STMFD sp!, {r0, r3} ; Store spsr onto stack and another ; register to maintain 8-byte-aligned stack TST r0, #T_bit ; Occurred in Thumb state? LDRNEH r0, [lr,#-2] ; Yes: Load halfword and... BICNE r0, r0, #0xFF00 ; ...extract comment field LDREQ r0, [lr,#-4] ; No: Load word and... BICEQ r0, r0, #0xFF000000 ; ...extract comment field
; r0 now contains SWI number ; r1 now contains pointer to stacked registers
BL C_SWI_Handler ; Call main part of handler LDMFD sp!, {r0, r3} ; Get spsr from stack MSR spsr_cf, r0 ; Restore spsr LDMFD sp!, {r0-r3, r12, pc}^ ; Restore registers and return
END
Цитата(arm123 @ Oct 22 2009, 17:43)  Правильно ли я трактовал? Вы бы не могли привести общие рекомендации когда нужгно использовать ARM а когда Thumb? Нужно еще прибавить урезанность работы с immediate, методов адресации и т.п. Я бы сказал, что всегда нужно работать в ARM.
|
|
|
|
|
Oct 22 2009, 14:16
|
Участник

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

|
Цитата(aaarrr @ Oct 22 2009, 16:51)  Я бы сказал, что всегда нужно работать в ARM. Наверное за исключение когда обьемы FLASH ограничены. Мне вот дали пример большого проекта под АРМ, я ещё не смотрел что он делает, но если собрать его под Thumb то получается 70155, а под ARM 116639, разница в 46К что более чем в полтора раза больше. В описании указано, что ARM поддерживает оба порядка следования байт little-endian и big-endian. Сказано что по-умолчанию используется little-endian, но никак не могу найти где описано как эту смену произвести? В компиляторе нашел флаг смены порядка, но как это делается командами процессора? кстати читал что такие большие команды как "STMFD sp!, {r0-r3, r12, lr}"регулярно использоваться не рекомендуется так как значительно повышает латентность прерываний. Вообще читал, что высокая латентность большой из недостатков данной архитектуры, так ли это? А то что-то не верится
|
|
|
|
|
Oct 22 2009, 14:26
|

Гуру
     
Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244

|
Цитата(arm123 @ Oct 22 2009, 17:16)  Наверное за исключение когда обьемы FLASH ограничены. Мне вот дали пример большого проекта под АРМ, я ещё не смотрел что он делает, но если собрать его под Thumb то получается 70155, а под ARM 116639, разница в 46К что более чем в полтора раза больше. Это что-то жуткое написано (скорее чего-нибудь в стиле восьмибитовика)- разница у меня обычно крайне не велика - единицы процнентов, ну 10. Цитата В описании указано, что ARM поддерживает оба порядка следования байт little-endian и big-endian. Сказано что по-умолчанию используется little-endian, но никак не могу найти где описано как эту смену произвести? Как правило никак - ядро это одно, а реализация в железе, как правило не поддерживает такую возможность. Цитата кстати... А что Вы хотели заказав зараз пересылку кучи регистров?
--------------------
Feci, quod potui, faciant meliora potentes
|
|
|
|
|
Oct 22 2009, 14:27
|
Гуру
     
Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448

|
Цитата(arm123 @ Oct 22 2009, 18:16)  Наверное за исключение когда обьемы FLASH ограничены. Мне вот дали пример большого проекта под АРМ, я ещё не смотрел что он делает, но если собрать его под Thumb то получается 70155, а под ARM 116639, разница в 46К что более чем в полтора раза больше. Использование Thumb из-за ограниченного размера флеш все же крайний случай, ИМХО. Цитата(arm123 @ Oct 22 2009, 18:16)  В описании указано, что ARM поддерживает оба порядка следования байт little-endian и big-endian. Сказано что по-умолчанию используется little-endian, но никак не могу найти где описано как эту смену произвести? В компиляторе нашел флаг смены порядка, но как это делается командами процессора? Эндианизм задается аппаратно сигналом BIGEND ядра, поменять его программно нельзя. Цитата(arm123 @ Oct 22 2009, 18:16)  кстати читал что такие большие команды как "STMFD sp!, {r0-r3, r12, lr}"регулярно использоваться не рекомендуется так как значительно повышает латентность прерываний. Вообще читал, что высокая латентность большой из недостатков данной архитектуры, так ли это? А то что-то не верится  Да, это так. Некоторые компиляторы имеют опцию принудительного разбиения LDM/STM.
|
|
|
|
|
Oct 22 2009, 15:59
|
Участник

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

|
Цитата(zltigo @ Oct 22 2009, 17:26)  Это что-то жуткое написано (скорее чего-нибудь в стиле восьмибитовика) Давно хотел спросить, а что означает фраза "написано в стиле восьмибитовика"???
|
|
|
|
|
Oct 22 2009, 17:20
|
Участник

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

|
Я понял лучше всего использовать uint32_t и тому подобное. И это получается если я даже знаю что переменная хранит значение не больше 256, или вообще ноль/не_ноль, но все-равно лучше использовать 32-битную переменную? Ну и аналогично просто 16 битную переменную?
|
|
|
|
|
Oct 22 2009, 17:38
|

Гуру
     
Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244

|
Цитата(arm123 @ Oct 22 2009, 20:20)  но все-равно лучше использовать 32-битную переменную? Для портируемости правильнее что-то типа int_fast8_t, int_least8_t P.S. Вообще-то Ваши вопросы правильные, что редкость, то тем не менее на форуме они обсуждались МНОГОКРАТНО. Надо-бы ознакомиться с предшественниками  , для начала.
--------------------
Feci, quod potui, faciant meliora potentes
|
|
|
|
|
Oct 25 2009, 07:10
|
Участник

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

|
Цитата(aaarrr @ Oct 22 2009, 17:51)  Да, именно так. Вот, например, обработчик от ARM: Кстати Вы очень часто приводите стандартные примеры от ARM. Но я их что-то нигде найти не могу, подскажите от куда вы их выдираете?
|
|
|
|
|
Oct 25 2009, 08:44
|

Гуру
     
Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244

|
Цитата(arm123 @ Oct 25 2009, 10:10)  ...примеры от ARM Все это добро, обычно с компиляторами идет, а от "ARM" это Keil, который давненько уже "ARM Company". Только особо не обольщайтесь, хоть и "Company", но исходники там больше "Студеческие".
--------------------
Feci, quod potui, faciant meliora potentes
|
|
|
|
|
Oct 25 2009, 09:01
|
Участник

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

|
2zltigo, А есть где-нибудь просторах интернета исходники какого-нибудь проекта написанного не-"студенчески"? Хочу проанализировать для общеобразовательных целей.
|
|
|
|
|
Oct 25 2009, 10:10
|

Гуру
     
Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244

|
Цитата(arm123 @ Oct 25 2009, 12:01)  2zltigo, А есть где-нибудь просторах интернета исходники какого-нибудь проекта написанного не-"студенчески"? Цельного не встречал  . А так, приличные исходники встречаются. У "студенческих" тоже на самом деле тоже есть чему поучится - им цельности не хватает, но отдельные элементы и приемы, которым, видимо учили, весьма познавательны. Сшивки между ними ну буквально "белыми нитками" и самодельные куски страшные встречаются  .
--------------------
Feci, quod potui, faciant meliora potentes
|
|
|
|
|
  |
3 чел. читают эту тему (гостей: 3, скрытых пользователей: 0)
Пользователей: 0
|
|
|