Заголовок сообщения: Подскажите по использованию препроцессорн. директиве #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)
мне вот что непонятно: разве сложно самому взять и откомпилить эти самые макроопределения, чтобы узнать результат?
один сами знаете кто может задать такие вопросоы, что и сто мудрецов не ответят... это я к тому, что, может быть, никому в мире не прийдет в голову именно так поступать, но раз вопрос задан кое-кто (типа меня, например) захочет разобраться и начнет тратить свое время... получается, за вас... а зачем, собственно говоря? если начинающий не понимает, как работает команда ассемблера - это одно, но когда профессионал находит себе способ заморочить голову - это совсем другое...
по сравнению с макроассемблером MCS51 (или для х86) у Atmel-a наредкость убогие, просто катастрофически убогие макроопределения, это известно давно. и даже потуги приблизить их синтаксис к сишному дела не спасают.
по поводу ваших вопросов рискну высказать свои предположения, т.к. проверять почему-то желания нет совсем: макрос в компиялторе ассемблера AVR Studio представляет собой именно текстовую подстановку, т.е. ldi ZL , low SQR(17) приведет к генерации кода ldi ZL, low ((17)*(17)), причем с пробелом после low. для второго вопроса в хелпе сказано, что для контатенции строк (а все операнды макросов есть именно набор символов, т.е. строки) надо использовать директиву ##.
_________________ если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе при взгляде на многих сверху ничего не меняется...
Есть очень неприятные глюки в AVR Studio4.
Один из них, например - не правильное отображение 16- разрядных чисел в просмотровщике состояния памяти ЭСППЗУ. А именно он путает старшие и младшие байты для слов. Старший байт оказывается в более младшей области памяти чем младший, но при этом в файле .eep, который он генерит, оказывается всё наоборот.
Можно ли как-нибудь устранить этот глюк, а то очень сильно мешает?
Есть очень неприятные глюки в AVR Studio4. Один из них, например - не правильное отображение 16- разрядных чисел в просмотровщике состояния памяти ЭСППЗУ. А именно он путает старшие и младшие байты для слов. Старший байт оказывается в более младшей области памяти чем младший, но при этом в файле .eep, который он генерит, оказывается всё наоборот.
Можно ли как-нибудь устранить этот глюк, а то очень сильно мешает?
Это не глюк. Это принятый в AVR Studio формат отображения
Зарегистрирован: Сб мар 10, 2007 12:50:43 Сообщений: 67
Рейтинг сообщения:0
вопрос по отладке в аврстудии мега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
Зарегистрирован: Сб мар 10, 2007 12:50:43 Сообщений: 67
Рейтинг сообщения:0
если в протеусе (у меня 7.2 sp2) отсутствует компонент (мега8535) это можно как-то поправить? скачать дополнения например?
может кто уже спрашивал, но я что-то не нашёл....
В 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.
Здраствуйте! Сталкнулся с такой проблемой: выкачал из инета AVRStudio4.13SP2.exe , но он при установке пишет, что прога уже установлена и прекращает установку(хотя она никогда и не была установлена)... Как с этим бороться?
и ещё такая проблема: хотел создать прошиву для микроконтролера по обучалке, при компеляции пишет что файл не найден(делал через батник)хотя всё поинструкции
точно, а на кирилицу то совсем забыл обратить внимание, только щас вот такая проблема... пишет что не в состоянии открыть файл, но путь проверяю, всё прально... почему так может быть?->
Сейчас этот форум просматривают: Google [Bot] и гости: 15
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете добавлять вложения