Обсуждаем контроллеры компании Atmel.
Ответить

Подскажите по использованию препроцессорн. директиве #define

Вс мар 09, 2008 14:14:04

Подскажите по использованию препроцессорной директиве #define в AVR Studio в программе на АССЕМБЛЕРЕ при использовании её не для определения константы, а для определения макроса-функции.

В общем виде определение препроцессорного макроса-функции выглядит так:
#define prepMacrosName (список аргументов) (определение функции)

Вопрос №1

В хелпе приводиться такой пример:
#define SQR(X) ((X)*(X))

Т.е. если я вызову

ldi ZL , low SQR(17)

, то компилятор вместо SQR(17) напишет"

ldi ZL , low ((17) x (17)) или ldi ZL , low (289) ???

Вопрос №2

Обязательно ли в качестве аргументов "функции" макроса числовые переменные? Или можно и куски текстовых строк?
Могу ли я например использовать такой макрос:
#define Command (InstructionType) (InstructionType)

в строке программы

Command (and)i R16 , 0b01001000 // эквивалетно andi R16, 0b01001000
Command (or)i R16 , 0b01001110 // эквивалетно ori R16, 0b01001110


Замечание: как это сделано в СИ-компиляторах НЕ ИНТЕРЕСУЕТ. Интересует как это сделано для ассемблера в AVR Studio

Вс мар 09, 2008 18:18:32

мне вот что непонятно: разве сложно самому взять и откомпилить эти самые макроопределения, чтобы узнать результат?

один сами знаете кто может задать такие вопросоы, что и сто мудрецов не ответят... это я к тому, что, может быть, никому в мире не прийдет в голову именно так поступать, но раз вопрос задан кое-кто (типа меня, например) захочет разобраться и начнет тратить свое время... получается, за вас... а зачем, собственно говоря? если начинающий не понимает, как работает команда ассемблера - это одно, но когда профессионал находит себе способ заморочить голову - это совсем другое...

по сравнению с макроассемблером MCS51 (или для х86) у Atmel-a наредкость убогие, просто катастрофически убогие макроопределения, это известно давно. и даже потуги приблизить их синтаксис к сишному дела не спасают.

по поводу ваших вопросов рискну высказать свои предположения, т.к. проверять почему-то желания нет совсем: макрос в компиялторе ассемблера AVR Studio представляет собой именно текстовую подстановку, т.е. ldi ZL , low SQR(17) приведет к генерации кода ldi ZL, low ((17)*(17)), причем с пробелом после low. для второго вопроса в хелпе сказано, что для контатенции строк (а все операнды макросов есть именно набор символов, т.е. строки) надо использовать директиву ##.

Вс мар 09, 2008 18:41:40

ARV писал(а):разве сложно самому взять и откомпилить эти самые макроопределения, чтобы узнать результат ?


ARV, экономьте бисер !

Вс мар 09, 2008 19:07:31

tych писал(а):ARV, экономьте бисер !
да жалко вам, что ли?! :) вы вот на себя перестали быть похожи с такой экономией :) старожилы форума вас не узнаЮт...

Вс мар 09, 2008 19:29:55

Проблему решил сам. Кому интересно посмотрите в Хэлпе AVR Studio. Ключевые слова «Stringification» и «Concatenation)»

Вт мар 18, 2008 17:24:15

Есть очень неприятные глюки в AVR Studio4.
Один из них, например - не правильное отображение 16- разрядных чисел в просмотровщике состояния памяти ЭСППЗУ. А именно он путает старшие и младшие байты для слов. Старший байт оказывается в более младшей области памяти чем младший, но при этом в файле .eep, который он генерит, оказывается всё наоборот.

Можно ли как-нибудь устранить этот глюк, а то очень сильно мешает?

Вт мар 18, 2008 20:41:59

pirotehnick писал(а):Есть очень неприятные глюки в AVR Studio4.
Один из них, например - не правильное отображение 16- разрядных чисел в просмотровщике состояния памяти ЭСППЗУ. А именно он путает старшие и младшие байты для слов. Старший байт оказывается в более младшей области памяти чем младший, но при этом в файле .eep, который он генерит, оказывается всё наоборот.

Можно ли как-нибудь устранить этот глюк, а то очень сильно мешает?

Это не глюк. Это принятый в AVR Studio формат отображения

Чт май 01, 2008 21:39:09

вопрос по отладке в аврстудии мега8535, настройка модуля usart (не смешно)
там регистры UBRRH b UCSRC имеют один адрес.
код самый простой:

sbi ddrd,0
sbi portd,0
sbi ddrd,1
sbi portd,1
ldi temp,UBR_232
out UBRRL,temp
ldi temp,0
out UBRRH,temp
ldi temp,(1<<TXEN)|(1<<RXEN)|(1<<RXCIE)
out UCSRB,temp
ldi temp,(1<<URSEL)|(1<<USBS)|(3<<UCSZ0> запись в UCSRC
out UCSRC,temp
однако при выполнении изменяется UBRRH
такое ощущение что студия не реагирует на URSEL=1
версия студии 4.12.497 SP4

Чт май 01, 2008 21:42:22

Дак хелп к студии чтить надобно. А симулить в VMLAB и PROTEUS соответствующие МК.

Чт май 01, 2008 22:25:00

там вроде предлагается записывать ubrrh после ucrsc
но что то не помогает....
подскажи .... :)

Чт май 01, 2008 22:47:17

rlc писал(а):там вроде предлагается записывать ubrrh после ucrsc
но что то не помогает....
подскажи .... :)


ucrsc - наверно ошибка. нужно UCSRC

я обычно смотрю АСМ листинг компилятора CVAVR - вот из задачи 5 курса под кнопкой моей домашней странички.

000117 b9ea OUT 0xA,R30
; 286 UCSRC=0x86;
000118 e8e6 LDI R30,LOW(134)
000119 bde0 OUT 0x20,R30
; 287
; 288 //UBRRH=0x00; // USART Baud rate: 115200
; 289 //UBRRL=0x05; это настройки из задачи 5

===
в прицепе исходник и весь листинг
Вложения
z5.rar
(16.3 KiB) Скачиваний: 566

Пт май 02, 2008 10:08:52

если в протеусе (у меня 7.2 sp2) отсутствует компонент (мега8535) это можно как-то поправить? скачать дополнения например?
может кто уже спрашивал, но я что-то не нашёл.... :(

Пт май 02, 2008 10:22:52

Нет. не лечится ни как. Только сравнивать на совместимсть с мегой16 например и пытаться помоделировать или в железе.

При выборе МК советую учитывать наличие инструментария для разработки ! Пока это Меги 8 16 32 64 128 для VMLAB и PROTEUS.

Вт июн 24, 2008 23:08:05

В AVR-Studio выбираю Tools -> AVR Prog..., а в ответ получаю привычное уже мне сообщение: "No supported board found! AVRprog version 1.40". Захожу Tools -> Program AVR -> Connect..., перебираю все параметры, порты, после каждой установки проверяю Tools -> AVR Prog... и в ответ получаю все то же "No supported board found! AVRprog version 1.40". Что делать. Программатор AVR910 от PROTTOS.

Вт июн 24, 2008 23:11:24

Изображение

Вт июл 15, 2008 19:28:57

Вопрос знатокам:
покажите пожалуйста ламеру (желательно в скринах), что нужно выставить в AVR Studio 4, чтобы выставить фьюзы как на картинке
Вложения
Фьюзы.zip
(35.77 KiB) Скачиваний: 627

Пн сен 15, 2008 23:15:42

Здраствуйте! Сталкнулся с такой проблемой: выкачал из инета AVRStudio4.13SP2.exe , но он при установке пишет, что прога уже установлена и прекращает установку(хотя она никогда и не была установлена)... Как с этим бороться?
и ещё такая проблема: хотел создать прошиву для микроконтролера по обучалке, при компеляции пишет что файл не найден(делал через батник)хотя всё поинструкции :(

Пн сен 15, 2008 23:31:37

ивеняюсь за столько веток, почемуто не смог в предыдущее сообщение кинуть... :(
Вложения
скрин ошибки.jpg
Ошибка батника
(28.48 KiB) Скачиваний: 1014

Вт сен 16, 2008 18:27:38

Кириллица и пробелы в путях (имена файлов и/или каталогов) это зло. Пора бы уже зарубить это себе раз и навсегда.

Вт сен 16, 2008 18:54:06

точно, а на кирилицу то совсем забыл обратить внимание, только щас вот такая проблема... пишет что не в состоянии открыть файл, но путь проверяю, всё прально... почему так может быть?->
Вложения
проблема с открытием.jpg
(31.13 KiB) Скачиваний: 715
Ответить