aaarrr 69 22 октября, 2009 Опубликовано 22 октября, 2009 · Жалоба Но мне не понятно как мы её можем использовать попав уже в обработчик SWI? Это что получается нужно читать команду с которой мы перешли из памяти или как? Поясните пожалуйста. Да, именно так. Вот, например, обработчик от ARM: ;;; 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 Правильно ли я трактовал? Вы бы не могли привести общие рекомендации когда нужгно использовать ARM а когда Thumb? Нужно еще прибавить урезанность работы с immediate, методов адресации и т.п. Я бы сказал, что всегда нужно работать в ARM. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Сергей Борщ 141 22 октября, 2009 Опубликовано 22 октября, 2009 · Жалоба Я бы сказал, что всегда нужно работать в ARM.Кроме процессоров ADuC, которые имеют 16-битную неспешную флеш и в них Thumb ощутимо быстрее. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
arm123 0 22 октября, 2009 Опубликовано 22 октября, 2009 · Жалоба Я бы сказал, что всегда нужно работать в ARM. Наверное за исключение когда обьемы FLASH ограничены. Мне вот дали пример большого проекта под АРМ, я ещё не смотрел что он делает, но если собрать его под Thumb то получается 70155, а под ARM 116639, разница в 46К что более чем в полтора раза больше. В описании указано, что ARM поддерживает оба порядка следования байт little-endian и big-endian. Сказано что по-умолчанию используется little-endian, но никак не могу найти где описано как эту смену произвести? В компиляторе нашел флаг смены порядка, но как это делается командами процессора? кстати читал что такие большие команды как "STMFD sp!, {r0-r3, r12, lr}"регулярно использоваться не рекомендуется так как значительно повышает латентность прерываний. Вообще читал, что высокая латентность большой из недостатков данной архитектуры, так ли это? А то что-то не верится :) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
zltigo 2 22 октября, 2009 Опубликовано 22 октября, 2009 · Жалоба Наверное за исключение когда обьемы FLASH ограничены. Мне вот дали пример большого проекта под АРМ, я ещё не смотрел что он делает, но если собрать его под Thumb то получается 70155, а под ARM 116639, разница в 46К что более чем в полтора раза больше. Это что-то жуткое написано (скорее чего-нибудь в стиле восьмибитовика)- разница у меня обычно крайне не велика - единицы процнентов, ну 10. В описании указано, что ARM поддерживает оба порядка следования байт little-endian и big-endian. Сказано что по-умолчанию используется little-endian, но никак не могу найти где описано как эту смену произвести? Как правило никак - ядро это одно, а реализация в железе, как правило не поддерживает такую возможность. кстати... А что Вы хотели заказав зараз пересылку кучи регистров? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
aaarrr 69 22 октября, 2009 Опубликовано 22 октября, 2009 · Жалоба Наверное за исключение когда обьемы FLASH ограничены. Мне вот дали пример большого проекта под АРМ, я ещё не смотрел что он делает, но если собрать его под Thumb то получается 70155, а под ARM 116639, разница в 46К что более чем в полтора раза больше. Использование Thumb из-за ограниченного размера флеш все же крайний случай, ИМХО. В описании указано, что ARM поддерживает оба порядка следования байт little-endian и big-endian. Сказано что по-умолчанию используется little-endian, но никак не могу найти где описано как эту смену произвести? В компиляторе нашел флаг смены порядка, но как это делается командами процессора? Эндианизм задается аппаратно сигналом BIGEND ядра, поменять его программно нельзя. кстати читал что такие большие команды как "STMFD sp!, {r0-r3, r12, lr}"регулярно использоваться не рекомендуется так как значительно повышает латентность прерываний. Вообще читал, что высокая латентность большой из недостатков данной архитектуры, так ли это? А то что-то не верится :) Да, это так. Некоторые компиляторы имеют опцию принудительного разбиения LDM/STM. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
arm123 0 22 октября, 2009 Опубликовано 22 октября, 2009 · Жалоба Это что-то жуткое написано (скорее чего-нибудь в стиле восьмибитовика) Давно хотел спросить, а что означает фраза "написано в стиле восьмибитовика"??? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
aaarrr 69 22 октября, 2009 Опубликовано 22 октября, 2009 · Жалоба Давно хотел спросить, а что означает фраза "написано в стиле восьмибитовика"??? Наверное, имеется в виду использование где ни попадя восьмибитных переменных вместо нативных 32-х битных. Таки да, thumb в этом случае будет заметно компактнее. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
arm123 0 22 октября, 2009 Опубликовано 22 октября, 2009 · Жалоба Я понял лучше всего использовать uint32_t и тому подобное. И это получается если я даже знаю что переменная хранит значение не больше 256, или вообще ноль/не_ноль, но все-равно лучше использовать 32-битную переменную? Ну и аналогично просто 16 битную переменную? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
aaarrr 69 22 октября, 2009 Опубликовано 22 октября, 2009 · Жалоба И это получается если я даже знаю что переменная хранит значение не больше 256, или вообще ноль/не_ноль, но все-равно лучше использовать 32-битную переменную? Ну и аналогично просто 16 битную переменную? Если вам не нужна именно восьмибитная переменная, то да, нужно использовать 32-х битную. Иначе получите изрядный оверхед на постоянном приведении результата операций к восьми битам. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
zltigo 2 22 октября, 2009 Опубликовано 22 октября, 2009 · Жалоба но все-равно лучше использовать 32-битную переменную? Для портируемости правильнее что-то типа int_fast8_t, int_least8_t P.S. Вообще-то Ваши вопросы правильные, что редкость, то тем не менее на форуме они обсуждались МНОГОКРАТНО. Надо-бы ознакомиться с предшественниками :(, для начала. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
arm123 0 25 октября, 2009 Опубликовано 25 октября, 2009 · Жалоба Да, именно так. Вот, например, обработчик от ARM: Кстати Вы очень часто приводите стандартные примеры от ARM. Но я их что-то нигде найти не могу, подскажите от куда вы их выдираете? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
zltigo 2 25 октября, 2009 Опубликовано 25 октября, 2009 · Жалоба ...примеры от ARM Все это добро, обычно с компиляторами идет, а от "ARM" это Keil, который давненько уже "ARM Company". Только особо не обольщайтесь, хоть и "Company", но исходники там больше "Студеческие". Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
arm123 0 25 октября, 2009 Опубликовано 25 октября, 2009 · Жалоба 2zltigo, А есть где-нибудь просторах интернета исходники какого-нибудь проекта написанного не-"студенчески"? Хочу проанализировать для общеобразовательных целей. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
zltigo 2 25 октября, 2009 Опубликовано 25 октября, 2009 · Жалоба 2zltigo, А есть где-нибудь просторах интернета исходники какого-нибудь проекта написанного не-"студенчески"? Цельного не встречал :). А так, приличные исходники встречаются. У "студенческих" тоже на самом деле тоже есть чему поучится - им цельности не хватает, но отдельные элементы и приемы, которым, видимо учили, весьма познавательны. Сшивки между ними ну буквально "белыми нитками" и самодельные куски страшные встречаются :(. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
aaarrr 69 25 октября, 2009 Опубликовано 25 октября, 2009 · Жалоба Все это добро, обычно с компиляторами идет, а от "ARM" это Keil, который давненько уже "ARM Company". Если бы это был Keil, то я бы так и написал. Это добро из комплекта RVDS. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться