|
Переход 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 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, 19:36
|

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

|
Цитата(aaarrr @ Oct 25 2009, 15:06)  Если бы это был Keil, то я бы так и написал. Это добро из комплекта RVDS. смотрим на тот-же файл из поставки Keil: CODE ;/*****************************************************************************/ ;/* SWI.S: SWI Handler */ ;/*****************************************************************************/ ;/* This file is part of the uVision/ARM development tools. */ ;/* Copyright © 2005-2006 Keil Software. All rights reserved. */ ;/* This software may only be used under the terms of a valid, current, */ ;/* end user licence from KEIL for a compatible version of KEIL software */ ;/* development tools. Nothing else gives you the right to use this software. */ ;/*****************************************************************************/
T_Bit EQU 0x20
PRESERVE8 ; 8-Byte aligned Stack AREA SWI_Area, CODE, READONLY ARM
EXPORT SWI_Handler SWI_Handler
STMFD SP!, {R12, LR} ; Store R12, LR MRS R12, SPSR ; Get SPSR STMFD SP!, {R8, R12} ; Store R8, SPSR TST R12, #T_Bit ; Check Thumb Bit LDRNEH R12, [LR,#-2] ; Thumb: Load Halfword BICNE R12, R12, #0xFF00 ; Extract SWI Number LDREQ R12, [LR,#-4] ; ARM: Load Word BICEQ R12, R12, #0xFF000000 ; Extract SWI Number
LDR R8, SWI_Count CMP R12, R8 BHS SWI_Dead ; Overflow ADR R8, SWI_Table LDR R12, [R8,R12,LSL #2] ; Load SWI Function Address MOV LR, PC ; Return Address BX R12 ; Call SWI Function
LDMFD SP!, {R8, R12} ; Load R8, SPSR MSR SPSR_cxsf, R12 ; Set SPSR LDMFD SP!, {R12, PC}^ ; Restore R12 and Return
SWI_Dead B SWI_Dead ; None Existing SWI
SWI_Cnt EQU (SWI_End-SWI_Table)/4 SWI_Count DCD SWI_Cnt
IMPORT __SWI_0 IMPORT __SWI_1 IMPORT __SWI_2 IMPORT __SWI_3 SWI_Table DCD __SWI_0 ; SWI 0 Function Entry DCD __SWI_1 ; SWI 1 Function Entry DCD __SWI_2 ; SWI 2 Function Entry DCD __SWI_3 ; SWI 3 Function Entry ; ... SWI_End
END
Главные отличия в свежих годах Copyright ну и естественно теперь ©Keil. Что-то я совсем не понимаю предмета спора
--------------------
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 Цитата(aaarrr @ Oct 22 2009, 16:51) Я бы ... Oct 22 2009, 14:16     zltigo Цитата(arm123 @ Oct 22 2009, 17:16) Навер... Oct 22 2009, 14:26      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       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        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
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|