22.04.2011, 10:43
|
|
Почётный гражданин KAZUS.RU
Регистрация: 13.12.2004
Сообщений: 3,172
Сказал спасибо: 11
Сказали Спасибо 692 раз(а) в 504 сообщении(ях)
|
Re: Здравствуй, ARM. Запуск "на коленке"
Сообщение от uk8amk
|
или его шина не резиновая и инструкция затянется на 8 тактов?
|
Растянется. И скорее всего больше чем на 8 тактов.
|
|
|
|
22.04.2011, 13:04
|
|
Частый гость
Регистрация: 15.07.2006
Сообщений: 26
Сказал спасибо: 1
Сказали Спасибо 4 раз(а) в 4 сообщении(ях)
|
Re: Здравствуй, ARM. Запуск "на коленке"
добрый день
можете подсказать, как прочитать значения регистров и текущий указатель стека.
В процессе работы контроллер или программа если тупит, то всё вываливается в hard fault и виснет, насколько я понял.( у меня такое случилось вчера) и тут я сделал так-
поскольку используется ЖК экран 3,2' то я сделал синий экран BSOD с текстом ошибки, и хотел вывести ещё регистры, состояния портов,и прочую инфу, но на регистрах застрял.
Если подскажите, на днях выложу код, думаю, будет полезен всем при отладке.
__________________
-
|
|
|
|
23.04.2011, 09:57
|
|
Вид на жительство
Регистрация: 05.07.2006
Адрес: Tashkent
Сообщений: 454
Сказал спасибо: 24
Сказали Спасибо 67 раз(а) в 44 сообщении(ях)
|
Re: Здравствуй, ARM. Запуск "на коленке"
Расскажите пожалуйста про инструкции насыщения SSAT и USAT, как работают и для чего вообще нужны. В доке как-то кратко и непонятно объясняется.
Спасибо.
ЗЫ. Сегодня наткнулся на описание процессора Cortex-M3 и его системы команд на русском языке. Может кому будет полезно. Здесь
|
|
|
Эти 7 пользователя(ей) сказали Спасибо uk8amk за это сообщение:
|
|
|
24.04.2011, 10:06
|
|
Вид на жительство
Регистрация: 05.07.2006
Адрес: Tashkent
Сообщений: 454
Сказал спасибо: 24
Сказали Спасибо 67 раз(а) в 44 сообщении(ях)
|
Re: Здравствуй, ARM. Запуск "на коленке"
Кажется нашел ответ на вопрос про иснтрукции насыщения. Достаточно было поискать на англицком.
Коротко: это DSP инструкции. Ограничивают число на каком-то уровне, не позволяют выйти за установленные пределы.
|
|
|
|
25.04.2011, 10:44
|
|
Вид на жительство
Регистрация: 05.07.2006
Адрес: Tashkent
Сообщений: 454
Сказал спасибо: 24
Сказали Спасибо 67 раз(а) в 44 сообщении(ях)
|
Re: Здравствуй, ARM. Запуск "на коленке"
Мой очередной вопрос касается использования инструкции IT(If-Then-Else). Например запись блока IT:
ITTE NE ; 2 инструкц=NE, 1 инструкц !NE
ADDNE R0,R0,R1; не равно
ADDSNE R2,R2,#1; не равно
MOVEQ R2,R3 ; равно
Что изменилось если записать так?:
ADDNE R0,R0,R1; не равно
ADDSNE R2,R2,#1; не равно
MOVEQ R2,R3 ; равно
Точно также конвейер процессора пропускает инструкции, не удовлетворяющие флагам условного кода как NOPы. Тогда в чем разница, в каких случаях(за исключением BXcond и BLXcond - это я уже понял) следует использовать блок IT?
|
|
|
|
25.04.2011, 13:27
|
|
Почётный гражданин KAZUS.RU
Регистрация: 10.05.2005
Адрес: Саратов.ru
Сообщений: 1,548
Сказал спасибо: 384
Сказали Спасибо 737 раз(а) в 417 сообщении(ях)
|
Re: Здравствуй, ARM. Запуск "на коленке"
Этот кусок для Thumb режима
Сообщение от uk8amk
|
ITTE NE ; 2 инструкц=NE, 1 инструкц !NE
ADDNE R0,R0,R1; не равно
ADDSNE R2,R2,#1; не равно
MOVEQ R2,R3 ; равно
|
Этот - для ARM режима
Сообщение от uk8amk
|
Что изменилось если записать так?:
ADDNE R0,R0,R1; не равно
ADDSNE R2,R2,#1; не равно
MOVEQ R2,R3 ; равно
|
Разница в том, что изначально в наборе команд thumb условными являются только переходы. В расширенном наборе thumb-2 появилась инструкция IT, обеспечивающая выполнение блока инструкций по условию. Выгода в количестве инструкций и занимаемом программой объеме памяти, как следствие и в быстродействии.
|
|
|
|
26.04.2011, 10:01
|
|
Вид на жительство
Регистрация: 05.07.2006
Адрес: Tashkent
Сообщений: 454
Сказал спасибо: 24
Сказали Спасибо 67 раз(а) в 44 сообщении(ях)
|
Re: Здравствуй, ARM. Запуск "на коленке"
Процессор CM-3 в МК STM32, работает только в режиме тумб-2. Изучаю документацию Programming manual PM0056. В примерах использования машинных инструкций есть варианты условного выполнения как с блоком IT, так и без него. Это меня и путает.
Т.е. как правильно должно быть для thumb-2:
1) Инструкция{проверка_условия} операнды
или
2)IT проверка_условия
инструкция{условие} операнд
???
|
|
|
|
26.04.2011, 10:30
|
|
Почётный гражданин KAZUS.RU
Регистрация: 10.05.2005
Адрес: Саратов.ru
Сообщений: 1,548
Сказал спасибо: 384
Сказали Спасибо 737 раз(а) в 417 сообщении(ях)
|
Re: Здравствуй, ARM. Запуск "на коленке"
Код:
|
; if (r0 == r1)
CMP r0, r1 ;выставляем флаги
ITE EQ ;Thumb: IT instruction
; then r0 = r2;
MOVEQ r0, r2 ;Thumb: condition via ITE 'T' (then)
; else r0 = r3;
MOVNE r0, r3 ;Thumb: condition via ITE 'E' (else) |
Сообщение от uk8amk
|
есть варианты условного выполнения как с блоком IT, так и без него
|
Цитату можно?
|
|
|
|
26.04.2011, 16:18
|
|
Вид на жительство
Регистрация: 05.07.2006
Адрес: Tashkent
Сообщений: 454
Сказал спасибо: 24
Сказали Спасибо 67 раз(а) в 44 сообщении(ях)
|
Re: Здравствуй, ARM. Запуск "на коленке"
PM0056, стр 64:
Цитата:
|
Examples
LDRR8, [R10]; loads R8 from the address in R10.
LDRNER2, [R5, #960]!; loads (conditionally) R2 from a word
; 960 bytes above the address in R5, and
; increments R5 by 960.
STRR2, [R9,#const-struc]; const-struc is an expression evaluating
; to a constant in the range 0-4095.
STRHR3, [R4], #4; Store R3 as halfword data
|
Далее стр 75:
Цитата:
|
Examples
ADDR2, R1, R3
SUBSR8, R6, #240; sets the flags on the result
RSBR4, R4, #1280; subtracts contents of R4 from 1280
ADCHIR11, R0, R3;
|
стр. 79:
Цитата:
|
Examples
CMPR2, R9
CMNR0, #6400
CMPGTSP, R7, LSL #2
|
И т.д.
А вот здесь уже с IT блоком(стр.59):
Цитата:
|
Specific example 1: Absolute value
MOVSR0, R1; R0 = R1, setting flags
IT MI; IT instruction for the negative condition
RSBMIR0, R1, #0; If negative, R0 = -R1
|
Хотя благодаря вашим ответам я начинаю догонять, что они ради упрощения наверное выкинули лишнюю писанину и тем самым ввели меня в заблуждение.
|
|
|
|
26.04.2011, 17:08
|
|
Почётный гражданин KAZUS.RU
Регистрация: 10.05.2005
Адрес: Саратов.ru
Сообщений: 1,548
Сказал спасибо: 384
Сказали Спасибо 737 раз(а) в 417 сообщении(ях)
|
Re: Здравствуй, ARM. Запуск "на коленке"
Так там везде воткнута строка
Цитата:
|
‘cond’ is an optional condition code (see Conditional execution on page 58)
|
а на странице 58 написано
Цитата:
|
Conditional instructions, except for conditional branches, must be inside an If-then instruction block.
|
ну и примеры, соответственно с этим блоком.
Согласен, запутаться легко с такими примерами. Хотя, может компилятор сам эти IfThen вставляет в ассемблерный код, поэтому и не стали писать.
|
|
|
Сказали "Спасибо" AJScorp
|
|
|
Ваши права в разделе
|
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения
HTML код Выкл.
|
|
|
Часовой пояс GMT +4, время: 03:27.
|
|