Микроконтроллеры, АЦП, память и т.д Темы касающиеся микроконтроллеров разных производителей, памяти, АЦП/ЦАП, периферийных модулей... |
29.09.2008, 16:22
|
|
Гражданин KAZUS.RU
Регистрация: 01.01.2007
Адрес: Таганрог
Сообщений: 571
Сказал спасибо: 26
Сказали Спасибо 213 раз(а) в 91 сообщении(ях)
|
как написать макрос-функцию в Си Winavr
Пишу в *.с файле:
#define lcd_port_config(void)
{
data_port=0xff;
data_ddr= 0xff;
ctr_port|=_BV(rd);
ctr_ddr|=_BV(rd);
ctr_port|=_BV(wr);
ctr_ddr|=_BV(wr);
ctr_port|=_BV(ce);
ctr_ddr|=_BV(ce);
//ctr_port|=_BV(md2);
ctr_port&=~_BV(md2);
ctr_ddr|=_BV(md2);
//ctr_port|=_BV(fs1);
ctr_port&=~_BV(fs1);
ctr_ddr|=_BV(fs1);
ctr_port|=_BV(c_d);
ctr_ddr|=_BV(c_d);
ctr_port|=_BV(rst);
ctr_ddr|=_BV(rst);
}
в *.h файле:
inline void lcd_port_config(void);
компилятор выводит ошибки (привожу не все, но они одинаковы):
t6963c.c:5: error: syntax error before '{' token
t6963c.c:7: error: syntax error before "volatile"
t6963c.c:9: error: syntax error before "volatile"
Знатоки помогите, шо я делаю неправильно., макросы-функции не разу ни писал
|
|
|
|
29.09.2008, 16:38
|
|
Почётный гражданин KAZUS.RU
Регистрация: 06.02.2007
Сообщений: 1,340
Сказал спасибо: 3
Сказали Спасибо 106 раз(а) в 66 сообщении(ях)
|
Я таки верю.. Насчет ошибок ...Если Вы не передаете параметры в макрос - (void) то с чего знать, ху из эти переменные ?_BV ce и пр ??? Или фунция с глобальными переменными, или макрос, так что определитесь...
Что значит фунция - макрос ??? Когда испрользуется инлайн ? Если жаба давит выделять оперативку в стек или стека физически не хватает, чтобы вставит функцию в фунцию - вот только тогда !!! оформляют фунцию как инлайн - макрос, чтобы стек не брала. Что увеличивает код, но снижает нагрузку на стек.
Или я чего-то не понял ??7
|
|
|
|
30.09.2008, 00:15
|
|
Почётный гражданин KAZUS.RU
Регистрация: 13.12.2004
Сообщений: 3,172
Сказал спасибо: 11
Сказали Спасибо 692 раз(а) в 504 сообщении(ях)
|
А цель всего этого? Получить инлайновую функцию?
Тогда прямо в h файле:
Код:
|
static inline void lcd_port_config(void) __attribute__((always_inline));
void lcd_port_config(void)
{
// тут собственно тело функции
} |
Функция будет доступна во всех с файлах, в которых подключен данный хэдер.
Или цель в чем то другом?
|
|
|
|
30.09.2008, 08:47
|
|
Гражданин KAZUS.RU
Регистрация: 01.01.2007
Адрес: Таганрог
Сообщений: 571
Сказал спасибо: 26
Сказали Спасибо 213 раз(а) в 91 сообщении(ях)
|
Я УЖЕ САМ РАЗОБРАЛСЯ, ВСЕМ ОТКЛИКНУВШИМСЯ СПАСИБА
|
|
|
|
30.09.2008, 09:02
|
|
Гражданин KAZUS.RU
Регистрация: 01.01.2007
Адрес: Таганрог
Сообщений: 571
Сказал спасибо: 26
Сказали Спасибо 213 раз(а) в 91 сообщении(ях)
|
Извините, еще один вопрос:
Напишите кто-нибудь образец написания функции-макроса на си (они мне необходимы для ускорени работы программы):
|
|
|
|
30.09.2008, 10:39
|
|
Почётный гражданин KAZUS.RU
Регистрация: 06.02.2007
Сообщений: 1,340
Сказал спасибо: 3
Сказали Спасибо 106 раз(а) в 66 сообщении(ях)
|
А смысл выкладывать??? В любом апноуте - валом.
Например
Код:
|
#define DelayUs(x) { unsigned char _dcnt;
_dcnt = (((long)(x))*(long)(XTAL_FREQ))/(long)(12MHZ);
while(--_dcnt != 0)
continue; } |
|
|
|
|
30.09.2008, 11:07
|
|
Гражданин KAZUS.RU
Регистрация: 01.01.2007
Адрес: Таганрог
Сообщений: 571
Сказал спасибо: 26
Сказали Спасибо 213 раз(а) в 91 сообщении(ях)
|
спасибо
|
|
|
|
30.09.2008, 11:08
|
|
Гражданин KAZUS.RU
Регистрация: 01.01.2007
Адрес: Таганрог
Сообщений: 571
Сказал спасибо: 26
Сказали Спасибо 213 раз(а) в 91 сообщении(ях)
|
тема закрыта
|
|
|
|
Ваши права в разделе
|
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения
HTML код Выкл.
|
|
|
Тема |
Автор |
Раздел |
Ответов |
Последнее сообщение |
Как использовать функцию printf для выовода на второй USART
|
igla_85 |
Микроконтроллеры, АЦП, память и т.д |
1 |
01.06.2009 02:35 |
Знатокам С! Как передать в функцию порт?
|
arkbox |
Микроконтроллеры, АЦП, память и т.д |
52 |
26.02.2008 17:06 |
CVAVR передача в функцию PORTА.X как переменную
|
woroba |
Микроконтроллеры, АЦП, память и т.д |
5 |
10.12.2007 12:49 |
Знатоки Си, помогите: Как обьявить функцию?
|
Hoksmur |
Микроконтроллеры, АЦП, память и т.д |
4 |
09.10.2007 19:36 |
CVAVR как программно вызвать функцию обработки прерывания???
|
woroba |
Микроконтроллеры, АЦП, память и т.д |
7 |
07.03.2007 11:54 |
Часовой пояс GMT +4, время: 04:19.
|
|