|
STM32 Ассемблер. Идеи и приёмы написания, Правила хорошего тона и макросы |
|
|
|
Jan 15 2014, 22:50
|
Участник

Группа: Участник
Сообщений: 32
Регистрация: 22-01-13
Пользователь №: 75 284

|
По ассемблеру для арм документации и разного рода примеров гораздо меньше для С. Начал осваивать и возникли сомнения, правильный ли подход частого использования макросов и где та грань, свыше которой не стоит заморачиваться с написанием кода. В ассемблера я не силён, в основном по-любительски пишу на С. Но вот раз начал осваивать асм, сделал несколько элементарных макросов для битовых операций, настройки и использования портов. Вопрос в том правильно ли это делать и использовать таким образом (когда в коде используются много макросов), или может быть есть более рациональный способ, как лучше писать на асме для арм. Вот примерчик: STM32F100RB. И что конкретно делает команда bfi R1,R2,#$Pin,#4 ? Определение макросов: Код ;-------------------------------------- ;Start_GPIO_Conf $Port,$PinRange - начало настройки порта, где $Port - имя порта (GPIOA,..), $PinRange - верхняя/нижняя тетрада порта (GPIO_CR_H/GPIO_CR_L) macro Start_GPIO_Conf $Port,$PinRange mov32 R0,#$Port ;загружаем в регистр "R0" имя порта (его код) из памяти ldr R1,[R0,#$PinRange];загружаем в регистр "R1" значение по адресу из памяти "R0 + #GPIO_CR_H(0x00)" или "R0 + #GPIO_CR_H(0x04)" mend ;-------------------------------------- ;GPIO_Conf $Pin,$Mode - настройка ножек выбраного порта, где $Pin - номер ножки (CNF_Pin_0,..), $Mode - режим ножки (GPIO_OUT_50_PP,..) macro PinConfig $Pin,$Mode movs R2,#$Mode bfi R1,R2,#$Pin,#4 mend ;-------------------------------------- ;End_GPIO_Conf $Port,$PinRange - конец настройки порта, где $Port - имя порта (GPIOA,..), $PinRange - верхняя/нижняя тетрада порта (GPIO_CR_H/GPIO_CR_L) macro End_GPIO_Conf $Port,$PinRange str R1,[R0,#$PinRange];загружаем в память по адресу "R0 + #GPIO_CR_H(0x00)" или "R0 + #GPIO_CR_H(0x04)" значение "R1" mend ;-------------------------------------- ;SetBit_GPIO $Port,$Pin macro SetBit_GPIO $Port,$Pin mov32 R0,#($Port + GPIO_BSRR) mov32 R1,#$Pin str R1,[R0] mend ;-------------------------------------- ;ResetBit_GPIO $Port,$Pin macro ResetBit_GPIO $Port,$Pin mov32 R0,#($Port + GPIO_BRR) mov32 R1,#$Pin str R1,[R0] mend ;-------------------------------------- Использование в программе: Код ;-------------------------------------- Start_GPIO_Conf GPIOC,GPIO_CR_H PinConfig CNF_Pin_9,GPIO_OUT_50_PP PinConfig CNF_Pin_8,GPIO_OUT_50_PP End_GPIO_Conf GPIOC,GPIO_CR_H ;-------------------------------------- SetBit_GPIO GPIOC,PIN9 SetBit_GPIO GPIOC,PIN8 ;-------------------------------------- Пробный проект в Keil 5 прикреплен:
Сообщение отредактировал allsettingsdone - Jan 15 2014, 22:55
|
|
|
|
|
 |
Ответов
|
Jan 17 2014, 07:13
|
Гуру
     
Группа: Свой
Сообщений: 4 256
Регистрация: 17-02-06
Пользователь №: 14 454

|
вам видать плохой компилятор достался  ну или у вас ооочень большая голова. я разглядывая полученные коды находя крайне странно-нелогичные конструкции длительное время втыкая в них понимал что они настолько хитро упакованы, что я бы даже не поглядел бы в эту сторону. Хотя может если набраться опыта то за пару лет сам начнешь так мыслить... но где теперь этот проц и тот код? Стоил бы он нескольких лет упорных втыканий в АСМ? Все течет все меняется... Цитата(_Pasha @ Jan 16 2014, 23:01)  побивающее компиляторы как по скорости так и по размеру. а это не нарушает закон сохранения энергии?
|
|
|
|
|
Jan 17 2014, 10:24
|
Гуру
     
Группа: Свой
Сообщений: 2 712
Регистрация: 28-11-05
Из: Беларусь, Витебск, Строителей 18-4-220
Пользователь №: 11 521

|
Цитата(_Pasha @ Jan 17 2014, 12:09)  Подозрительным образом сообщество мгновенно накидывается на человека Да никто не накидывается. Правда состоит в том, что большинство отвечающих как раз серьёзно посидели на ASM. Более того, в образовательных целях, очень даже правильно позаниматься ASMом для ясного представления, как работает процессор. Хорошо бы посидеть на нескольких. Очень полезно попробовать соптимизировать какую-нибудь функцию Си. Я, например, даже при вылизывании, сначала всё пишу на Си, убеждаюсь в работоспособности и только потом переписываю узкие места. Убеждаясь, что всё продолжает работать. Просто жалко тех начинающих, кто пытается протянуть какую-нибудь философию либо религию в техническую область. Ещё недавно генеральный директор Мерседеса говорил, что скорее закроет свои заводы чем выпустит машину с передним приводом. ))
|
|
|
|
Сообщений в этой теме
allsettingsdone STM32 Ассемблер. Идеи и приёмы написания Jan 15 2014, 22:50 Golikov A. Все зависит от того чего вы хотите в итоге.
Если ... Jan 16 2014, 01:58 allsettingsdone Встраивать асемблеровский код в проект на С я не п... Jan 16 2014, 05:38 scifi Цитата(allsettingsdone @ Jan 16 2014, 09... Jan 16 2014, 06:46 Golikov A. Поддерживаю.
Весь проект на ассемблере - это долго... Jan 16 2014, 07:10 Сергей Борщ Цитата(allsettingsdone @ Jan 16 2014, 00... Jan 16 2014, 07:40 SII Цитата(Сергей Борщ @ Jan 16 2014, 11:40) ... Jan 17 2014, 20:47  _Pasha Цитата(SII @ Jan 18 2014, 00:47) Между Си... Jan 17 2014, 21:09   SII Цитата(_Pasha @ Jan 18 2014, 01:09) Псевд... Jan 18 2014, 06:37    _Pasha Цитата(SII @ Jan 18 2014, 10:37) Псевдоко... Jan 18 2014, 08:04 Ozelot Топикстартер задал конкретный вопрос в надежде пол... Jan 16 2014, 07:50 allsettingsdone Как раз читаю одну из этих книг. Что касается С, т... Jan 16 2014, 08:18 scifi Цитата(allsettingsdone @ Jan 16 2014, 12... Jan 16 2014, 09:42 jcxz Цитата(allsettingsdone @ Jan 16 2014, 14... Jan 16 2014, 11:08 MALLOY2 Цитатано когда пишешь на С, то не всегда очевидно ... Jan 16 2014, 09:57 Golikov A. ассемблер очевиднее С, только для ОЧЕНЬ маленьких ... Jan 16 2014, 10:23 allsettingsdone Ладно, а что по поводу таких вещей:
Кодmov32 R0,... Jan 16 2014, 10:56 scifi Цитата(allsettingsdone @ Jan 16 2014, 14... Jan 16 2014, 11:05 Сергей Борщ Цитата(allsettingsdone @ Jan 16 2014, 12... Jan 16 2014, 12:16  allsettingsdone Цитата(Сергей Борщ @ Jan 16 2014, 14:16) ... Jan 16 2014, 13:34   Сергей Борщ Цитата(allsettingsdone @ Jan 16 2014, 15... Jan 16 2014, 15:02 SasaVitebsk 1. Для некоторых процессоров ассемблер достаточно ... Jan 16 2014, 11:19 Golikov A. Так вам про это и долдонят битый час
Когда начина... Jan 16 2014, 13:55 jcxz Цитата(Golikov A. @ Jan 16 2014, 19:55) в... Jan 16 2014, 17:10  mantech Цитата(jcxz @ Jan 16 2014, 21:10) Хотя я ... Jan 17 2014, 17:25   scifi Цитата(mantech @ Jan 17 2014, 21:25) ЗЫ. ... Jan 17 2014, 18:27 Golikov A. ага или на асм ДСПешника со сдвоенным АЛУ,
помню... Jan 16 2014, 18:00 jcxz Цитата(Golikov A. @ Jan 17 2014, 00:00) п... Jan 16 2014, 18:57 _Pasha Я бы если бы так упорно писал бы на ассемблере(бы)... Jan 16 2014, 19:01  Сергей Борщ Цитата(_Pasha @ Jan 17 2014, 10:09) Подоз... Jan 17 2014, 10:54 Golikov A. не я про другое.
иногда интерпритатор работает ме... Jan 17 2014, 10:11 _Pasha Цитата(Golikov A. @ Jan 17 2014, 14:11) и... Jan 17 2014, 17:00  Golikov A. Цитата(_Pasha @ Jan 17 2014, 21:00) Надо ... Jan 17 2014, 20:10 Golikov A. напишите виндус ан ассемблере, а потом рассказывай... Jan 18 2014, 06:27 megabuks Добрый день
Что-бы не плодить темы. Помогите старт... Jun 8 2014, 03:38 jcxz Возьмите любой cstartup.asm (или как он там называ... Jun 8 2014, 05:03
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|