|
Переход AVR to ARM, посоветуйте с чего начать:) |
|
|
|
 |
Ответов
|
Oct 22 2009, 12:50
|
Участник

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

|
В это теме задавались вопросы исключительно по выбору производителей микроконтроллеров с архитектурой ARM. Но я хочу задать несколько конкретных вопросов по самой архитектуре. Прочитал я ARM7TDMI Technical Reference Manual. Вроде все понятно за исключение некоторых нюансов. Так начнем с исключительных ситуаций. Аварийные ситуации. Насколько я понял возникает в зависимости от линии ABORT. Но вот совсем непонятно применение данной искл. ситуации. В документе описывается пример с виртуальной памятью, но если чесно перечитывал 5 раз, ничего не понял вообще, не могли бы вы обьяснить тот пример более по-простому? Ну и если можно привести ещё парочку промеров, где можно удачно применять аварийные ситуации? Как я понял они есть двух видов: аварийная предварительная выборка и аварийны данные. Я вообще не нашел в документе где описывается различие между ними. Не обьясните в чем между ними разница? И зачем они возникают. Программные прерывание. Очень хорошо понял зачем они применяются благодаря объяснению: ТЫЦНо я так и не поня как процессор попадает в это состояние? И что мне нужно в кде написать что бы попасть в это прерывание? И ещё вопрос: команды thunb выполняются медленнее? Правильно ли это? И ещё какие минусы применения thumb ещё наблюдаются? Спасибо.
|
|
|
|
|
Oct 22 2009, 13:01
|
Гуру
     
Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448

|
Цитата(arm123 @ Oct 22 2009, 16:50)  Ну и если можно привести ещё парочку промеров, где можно удачно применять аварийные ситуации? "Удачно применить" их можно разве что при отладке - узнать, например, где процессор обратился по невыровненному адресу или к несуществующей памяти. Цитата(arm123 @ Oct 22 2009, 16:50)  Как я понял они есть двух видов: аварийная предварительная выборка и аварийны данные. Я вообще не нашел в документе где описывается различие между ними. Не обьясните в чем между ними разница? И зачем они возникают. Prefetch Abort - исключение, возникающее при попытке ядра прочитать инструкцию, Data Abort - при попытке прочитать или записать данные. Вообще же, так как сигнал ABORT является внешним, то ситуации, в которых он генерируются, зависят от конкретной реализации контроллера памяти и отличаются у разных производителей. Цитата(arm123 @ Oct 22 2009, 16:50)  Программные прерывание. Очень хорошо понял зачем они применяются благодаря объяснению: ТЫЦНо я так и не поня как процессор попадает в это состояние? И что мне нужно в кде написать что бы попасть в это прерывание? Попадает по команде SWI. Компиляторы, как правило, предоставляют обертку, позволяющую оформить SWI как вызов: Код __swi int func(int, int); Цитата(arm123 @ Oct 22 2009, 16:50)  И ещё вопрос: команды thunb выполняются медленнее? Правильно ли это? И ещё какие минусы применения thumb ещё наблюдаются? Thumb - это всего лишь метод упаковки команд, на скорость выполнения он не влияет. А вот на скорость выполнения программы в целом - да, влияет, и не в лучшую сторону. Учитывая постоянно растущий объем доступной на кристалле памяти, использование Thumb представляется все менее целесообразным.
|
|
|
|
|
Oct 22 2009, 13:43
|
Участник

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

|
Цитата(aaarrr @ Oct 22 2009, 16:01)  Попадает по команде SWI. Компиляторы, как правило, предоставляют обертку, позволяющую оформить SWI как вызов Спасибо, я все понял не понятно одно. Вот есть основная программа и обработчик swi. В обработчик мы попадаем как swi 14, к примеру. 14 находится в поле команты как констанка, которая игнорируется процессором. Но мне не понятно как мы её можем использовать попав уже в обработчик SWI? Это что получается нужно читать команду с которой мы перешли из памяти или как? Поясните пожалуйста. А скорость при Thumb попадает из-за того что компилятор не может оптимально выстраивать конструкции, например я вычитал что в режиме thumb процессор только инструкции перехода могут выполнятся по условию. Получается конструкцию: если (условие) то Операция1 иначе Операция1 в режиме ARM можно выполнить так: 1. Вычислить условие и поставить Флаг1 по результатам вычисления 2. Выполнить Операция1 при условии выставленного Флаг1 3. Выполнить Операция2 при условии невыставленного Флаг1 а в режиме Thumb мы как и в других системах должны использовать привычную для x86 конструкцию: 1. Вычислить условие 2. Если условие выполнено, то идти к 5 3. Выполнить Операция1 4. Идти к 6 5. Выполнить Операция2 6. … Получается в режиме ARM код лишен одного условного и одного безусловного перехода, которые обычно больно бьют по производительности конвейерных архитектур. Правильно ли я трактовал? Вы бы не могли привести общие рекомендации когда нужгно использовать ARM а когда Thumb?
|
|
|
|
|
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
|
|
|
|
Сообщений в этой теме
Br.Misha Переход AVR to ARM Oct 12 2009, 11:54 Xenia Цитата(Br.Misha @ Oct 12 2009, 15:54) Сна... Oct 12 2009, 12:09 aaarrr Цитата(Br.Misha @ Oct 12 2009, 15:54) ...... Oct 12 2009, 12:12 zltigo Цитатапосоветуйте с чего начать
Moderator
С чтения... Oct 12 2009, 12:28 Br.Misha Большое спасибо всем кто ответил
К сожалению AT32... Oct 12 2009, 21:25 zltigo Цитата(Br.Misha @ Oct 12 2009, 23:25) Для... Oct 12 2009, 21:50  GetSmart Цитата(zltigo @ Oct 13 2009, 03:50) Тогда... Oct 12 2009, 23:30   zltigo Цитата(GetSmart @ Oct 13 2009, 01:30) Чел... Oct 13 2009, 08:55 Br.Misha zltigo, какой та спецконтролер граф дисплея мне не... Oct 13 2009, 12:58 zltigo Цитата(Br.Misha @ Oct 13 2009, 15:58) что... Oct 13 2009, 13:15 Dog Pawlowa Цитата(Br.Misha @ Oct 12 2009, 14:54) Под... Oct 13 2009, 18:19 zltigo Цитата(Dog Pawlowa @ Oct 13 2009, 21:19) ... Oct 13 2009, 18:45    Сергей Борщ Цитата(aaarrr @ Oct 22 2009, 16:51) Я бы ... Oct 22 2009, 14:15      arm123 Цитата(zltigo @ Oct 22 2009, 17:26) Это ч... Oct 22 2009, 15:59       aaarrr Цитата(arm123 @ Oct 22 2009, 19:59) Давно... Oct 22 2009, 16:10     aaarrr Цитата(arm123 @ Oct 22 2009, 18:16) Навер... Oct 22 2009, 14:27    arm123 Цитата(aaarrr @ Oct 22 2009, 17:51) Да, и... Oct 25 2009, 07:10     zltigo Цитата(arm123 @ Oct 25 2009, 10:10) ...пр... Oct 25 2009, 08:44      aaarrr Цитата(zltigo @ Oct 25 2009, 11:44) Все э... Oct 25 2009, 12:06       zltigo Цитата(aaarrr @ Oct 25 2009, 15:06) Если ... Oct 25 2009, 15:21        aaarrr Цитата(zltigo @ Oct 25 2009, 18:21) Да, а... Oct 25 2009, 16:42         zltigo Цитата(aaarrr @ Oct 25 2009, 19:42) Keil-... Oct 25 2009, 18:52          aaarrr Цитата(zltigo @ Oct 25 2009, 21:52) При т... Oct 25 2009, 19:07       zltigo Цитата(aaarrr @ Oct 25 2009, 15:06) Если ... Oct 25 2009, 19:36        aaarrr Цитата(zltigo @ Oct 25 2009, 22:36) Что-т... Oct 25 2009, 19:43 arm123 Я понял лучше всего использовать uint32_t и тому п... Oct 22 2009, 17:20 aaarrr Цитата(arm123 @ Oct 22 2009, 21:20) И это... Oct 22 2009, 17:26 zltigo Цитата(arm123 @ Oct 22 2009, 20:20) но вс... Oct 22 2009, 17:38 arm123 2zltigo, А есть где-нибудь просторах интернета исх... Oct 25 2009, 09:01 zltigo Цитата(arm123 @ Oct 25 2009, 12:01) 2zlti... Oct 25 2009, 10:10 Genadi Zawidowski Цитата(arm123 @ Oct 25 2009, 13:01) 2zlti... Oct 25 2009, 17:17  zltigo Цитата(Genadi Zawidowski @ Oct 25 2009, 20... Oct 25 2009, 19:58   aaarrr Цитата(zltigo @ Oct 25 2009, 22:58) таког... Oct 25 2009, 20:04   Genadi Zawidowski Цитата(zltigo @ Oct 25 2009, 23:58) Не пр... Oct 25 2009, 20:51    aaarrr Цитата(Genadi Zawidowski @ Oct 25 2009, 23... Oct 25 2009, 21:02     zltigo Цитата(aaarrr @ Oct 26 2009, 00:02) Да, е... Oct 25 2009, 21:05      aaarrr Цитата(zltigo @ Oct 26 2009, 00:05) Неуже... Oct 25 2009, 21:06 Genadi Zawidowski Если бы вы, как внимательные читатели, не обратили... Oct 25 2009, 21:16 Br.Misha Хай!
Я купил себе три STM32: две STM32F100C8T6... May 9 2011, 09:28 aaarrr Я бы советовал избегать любых визардов как чумы. May 9 2011, 12:18 Br.Misha Ок, тогда визард отпадает. Почти уверен что дальше... May 9 2011, 20:51 Artem_Petrik Цитата(Br.Misha @ May 9 2011, 23:51) Тут ... May 10 2011, 16:48 Br.Misha не нашел дискавери, заказал на ибее вот такую штук... May 17 2011, 23:54 Br.Misha дня 4 назад пришла та отладочная плата. Начал учит... May 29 2011, 21:23 aaarrr Цитата(Br.Misha @ May 30 2011, 01:23) На ... May 29 2011, 21:49
2 чел. читают эту тему (гостей: 2, скрытых пользователей: 0)
Пользователей: 0
|
|
|