Синтаксис языка С в AVR Studio 5

Вопросы настройки, программирования, прошивки микроконтроллеров и микросхем программируемой логики
Leo_vrn
Первый раз сказал Мяу!
Сообщения: 22
Зарегистрирован: Чт июл 15, 2010 04:01:56

Синтаксис языка С в AVR Studio 5

Сообщение Leo_vrn »

Подскажите, где можно найти нормальное описание синтаксиса языка С, применяемого в AVR Studio 5 ?

До этого писал только на ассемблере, решил освоить С, но не хочу уходить с AVR Studio.
Столкнулся с большой проблемой, при попытке что-либо написать и скомпилировать постоянно вылезают ошибки синтаксиса, но нигде не получается найти, как синтаксически правильно именно в AVR Studio писать ту или конструкцию.
В самой AVR Studio никакого хелпа похоже не предусмотрено вообще. :(
Реклама
Аватара пользователя
IfoR
Поставщик валерьянки для Кота
Сообщения: 2029
Зарегистрирован: Сб ноя 15, 2008 10:09:56
Откуда: г. Тула
Контактная информация:

Re: Синтаксис языка С в AVR Studio 5

Сообщение IfoR »

Так вы напишите код, на который оно ругается.
И сама AVR Studio с Си кодом работать не умеет - компилятор там WinAvr. Хотя может в 5-той версии свой появился. :dont_know:
Изображение
/dev/urandom - гигабайты информации.

OS: openSUSE 13.2 (x86_64)
Реклама
Аватара пользователя
hybroid
Друг Кота
Сообщения: 8007
Зарегистрирован: Вс ноя 14, 2010 19:24:26
Откуда: Лукалэнд

Re: Синтаксис языка С в AVR Studio 5

Сообщение hybroid »

Leo_vrn писал(а):В самой AVR Studio никакого хелпа похоже не предусмотрено вообще. :(
Да и не должно его быть там. Это IDE. Хелп есть у компилятора. Гуглите winavr или gcc avr.
Leo_vrn
Первый раз сказал Мяу!
Сообщения: 22
Зарегистрирован: Чт июл 15, 2010 04:01:56

Re: Синтаксис языка С в AVR Studio 5

Сообщение Leo_vrn »

Да нагуглил уже давно.
Например, как там операции с портами должны происходить?

почему-то на, например, portb.1 оно ругается
на PB1 тоже ругается (хотя в файле определений это есть).
Как правильно к портам и пинам обращаться?
В примерах по AVR GCC и WinAVR именно как PORTB.1 обращения идут.
Например у того же Шпака в "Программирование на языке С для AVR и PIC микроконтроллеров" примеры даны именно для WinAVR и AVR Studio, только работать почему-то описанный там синтаксис не хочет.

Описанные в этой http://easyelectronics.ru/rabota-s-port ... na-si.html статье примеры (написано, что примеры для компилятора AVR GCC) не проходят при компиляции (куча ошибок синтаксиса).


Так где нарыть описание использования языка именно для AVR Studio 5?
Реклама
Эиком - электронные компоненты и радиодетали
Аватара пользователя
hybroid
Друг Кота
Сообщения: 8007
Зарегистрирован: Вс ноя 14, 2010 19:24:26
Откуда: Лукалэнд

Re: Синтаксис языка С в AVR Studio 5

Сообщение hybroid »

Leo_vrn писал(а):(куча ошибок синтаксиса)
Хорошо бы взглянуть на лог компиляции. И на исходник.
Реклама
Leo_vrn
Первый раз сказал Мяу!
Сообщения: 22
Зарегистрирован: Чт июл 15, 2010 04:01:56

Re: Синтаксис языка С в AVR Studio 5

Сообщение Leo_vrn »

Мне бы всё же описание синтаксиса языка, а не разбор какого-то кусочка кода. :)

Есть 15 летний опыт программирования на Pascal (Delphi) и разных вариациях ассемблера.
Теперь вот для больших проектов на AVR нужно изучать Си. На асме что-то большое писать слишком долго.
Реклама
Аватара пользователя
hybroid
Друг Кота
Сообщения: 8007
Зарегистрирован: Вс ноя 14, 2010 19:24:26
Откуда: Лукалэнд

Re: Синтаксис языка С в AVR Studio 5

Сообщение hybroid »

Откуда мне (да и остальным) известно, что у вас там происходит? Про синтаксис уже сказали - банальный GCC для AVR. А вы же не удосужились нормально описать, что у вас за "куча ошибок". Как, блин, блондинка, которая звонит сисадмину и говорит про какое-то окошко с какой-то кнопочкой. Телепатов нету, они не выдержали нагрузки и совершили массовое самогубство :( Может у вас не подключен io.h.. Сидеть теперь и гадать?
Аватара пользователя
IfoR
Поставщик валерьянки для Кота
Сообщения: 2029
Зарегистрирован: Сб ноя 15, 2008 10:09:56
Откуда: г. Тула
Контактная информация:

Re: Синтаксис языка С в AVR Studio 5

Сообщение IfoR »

Leo_vrn, конструкция типа PORTB.1 используется только в CVAVR, ну или ещё в других. В WinAvr для установки битов нужно пользоваться битовыми операциями. Например, установка в PORTB бита 2:

Код: Выделить всё

PORTB |= 1<<2; 
Сброс этого же бита:

Код: Выделить всё

PORTB &= ~(1<<2); 
Установка 2 и 5 бита:

Код: Выделить всё

PORTB |= (1<<2)|(1<<5); 
и т.д. Некоторые для удобства пишут макросы аля setBit(PORTB, 2).
И о каком таком "синтаксисе AVR Studio 5" идёт речь? Си - это стандартизированный язык и на него есть стандарт с регламентированными конструкциями и то что они точно должны делать и компилятор должен всё точно также исполнять. Иначе говоря, не важно что писать: мигалку для микроконтроллера или систему стабилизации для истребителя для какого-то мегакомпьютера - синтаксис один и тот же. Ну а то что некоторые разработчики добавляют нестандартные конструкции в свои компиляторы, так это другой компилятор не виноват, что он не знает этих конструкций. Максимум виноват программист, который написал этот компиляторозависимый код.

А PB1 - это наверно номер бита 1 порта PORTB:

Код: Выделить всё

PORTB |= 1<<PB1;  
Изображение
/dev/urandom - гигабайты информации.

OS: openSUSE 13.2 (x86_64)
phanis
Вымогатель припоя
Сообщения: 513
Зарегистрирован: Сб фев 19, 2011 18:04:08
Откуда: Татарстан, пос. Актюбинский
Контактная информация:

Re: Синтаксис языка С в AVR Studio 5

Сообщение phanis »

Код: Выделить всё

Сброс этого же бита:
Код:
PORTB &= ~(1<<2); 
А сброс сразу нескольких бит как будет ?
Аватара пользователя
SubDia
Держит паяльник хвостом
Сообщения: 995
Зарегистрирован: Сб апр 02, 2011 17:59:22
Откуда: Город-герой Севастополь

Re: Синтаксис языка С в AVR Studio 5

Сообщение SubDia »

phanis писал(а):А сброс сразу нескольких бит как будет ?
В точности так же. Сбрасываем 2, 3 и 4 биты.

Код: Выделить всё

PORTB &= ~((1<<2)|(1<<3)|(1<<4));
Последний раз редактировалось SubDia Пн фев 13, 2012 11:05:31, всего редактировалось 1 раз.
pavel_cydenov: Вобще я праAVRославный человек. Но и про ислARM слышал много хорошего )
MrYuran: Самые ортодоксальные — это PICудеи )
Katz: Не, 51-ники. )
Изображение
Аватара пользователя
Jack_A
Друг Кота
Сообщения: 6312
Зарегистрирован: Вт апр 24, 2007 07:45:40
Откуда: Minsk

Re: Синтаксис языка С в AVR Studio 5

Сообщение Jack_A »

phanis писал(а):

Код: Выделить всё

Сброс этого же бита:
Код:
PORTB &= ~(1<<2); 
А сброс сразу нескольких бит как будет ?

Код: Выделить всё

PORTB &= ~( (1<<2) | (1<<3) | (1<<6) ); 
Хотя бы и так. Сбросить 2,3 и 6-й биты .
Аватара пользователя
hybroid
Друг Кота
Сообщения: 8007
Зарегистрирован: Вс ноя 14, 2010 19:24:26
Откуда: Лукалэнд

Re: Синтаксис языка С в AVR Studio 5

Сообщение hybroid »

В avr-gcc вместо (1<<PB2), например, можно использовать _BV(PB2).
Т.е. пример выше будет выглядеть так:

Код: Выделить всё

PORTB &= ~( _BV(PB2) | _BV(PB3) | _BV(PB6) );
ut1wpr
Вымогатель припоя
Сообщения: 581
Зарегистрирован: Ср янв 05, 2011 10:03:18

Re: Синтаксис языка С в AVR Studio 5

Сообщение ut1wpr »

hybroid писал(а):В avr-gcc вместо (1<<PB2), например, можно использовать _BV(PB2).
Т.е. пример выше будет выглядеть так:

Код: Выделить всё

PORTB &= ~( _BV(PB2) | _BV(PB3) | _BV(PB6) );
И опять получим код, который будет понимать только ГСС. Это тот же макрос, только встроенный в Гнусь. Любой отход от стандарта ANSI C приводит к зависимости от компилятора. Так стоит-ли плодить сущности? :)
Если не понимать, что лежит в основе того или иного макроса - обречен сидеть под одним и тем же компилятором, портирование недоступно...
С уважением,
Виктор.
phanis
Вымогатель припоя
Сообщения: 513
Зарегистрирован: Сб фев 19, 2011 18:04:08
Откуда: Татарстан, пос. Актюбинский
Контактная информация:

Re: Синтаксис языка С в AVR Studio 5

Сообщение phanis »

Ага понял спасибо, при установке бит нет общих скобок

Код: Выделить всё

PORTB |=  (1<<2) | (1<<3) | (1<<6) ;
, а при сбросе есть общая скобка

Код: Выделить всё

 PORTB &= ~( (1<<2) | (1<<3) | (1<<6) ); 
т.е если просто написать

Код: Выделить всё

PORTB &= ~ (1<<2) | (1<<3) | (1<<6) ;
не срабатывает как нужно, вот такой тонкий момент интересовал.
Вроде просто, а не поставил скобки и все, долго не мог понять в чем дело..
Спасибо еще раз..
ut1wpr
Вымогатель припоя
Сообщения: 581
Зарегистрирован: Ср янв 05, 2011 10:03:18

Re: Синтаксис языка С в AVR Studio 5

Сообщение ut1wpr »

phanis писал(а):Ага понял спасибо, при установке бит нет общих скобок

Код: Выделить всё

PORTB |=  (1<<2) | (1<<3) | (1<<6) ;
, а при сбросе есть общая скобка

Код: Выделить всё

 PORTB &= ~( (1<<2) | (1<<3) | (1<<6) ); 
т.е если просто написать

Код: Выделить всё

PORTB &= ~ (1<<2) | (1<<3) | (1<<6) ;
не срабатывает как нужно, вот такой тонкий момент интересовал.
Вроде просто, а не поставил скобки и все, долго не мог понять в чем дело..
Спасибо еще раз..
Проблема не в сбросе или установке, а в порядке выполнения операторов в порядке их приоритетов. Без общей скобки оператор побитной инверсии (тильда) будет относится только к первому выражению. Заключение ВСЕГО проореного выражения в скобки приведет к именно его побитной инверсии.
С уважением,
Виктор.
Аватара пользователя
hybroid
Друг Кота
Сообщения: 8007
Зарегистрирован: Вс ноя 14, 2010 19:24:26
Откуда: Лукалэнд

Re: Синтаксис языка С в AVR Studio 5

Сообщение hybroid »

ut1wpr писал(а):И опять получим код, который будет понимать только ГСС.
Сударь, я с этого и начал мой пост с этим примером.
Если совсем заморачиваться стандартами Си - можно и подохнуть. А если вы не собираетесь менять компилятор, почему бы и не использовать его удобные возможности?

PS: вы сами часто встречали сорцы, которые проглотит любой компилятор? о.О
phanis
Вымогатель припоя
Сообщения: 513
Зарегистрирован: Сб фев 19, 2011 18:04:08
Откуда: Татарстан, пос. Актюбинский
Контактная информация:

Re: Синтаксис языка С в AVR Studio 5

Сообщение phanis »

Еще вот такой вопрос. Операции

Код: Выделить всё

   |=   &=    ^=  *=    /=  
обязательно должны быть слитно написаны с знаком равно..??
Если да, то почему так?
ut1wpr
Вымогатель припоя
Сообщения: 581
Зарегистрирован: Ср янв 05, 2011 10:03:18

Re: Синтаксис языка С в AVR Studio 5

Сообщение ut1wpr »

phanis писал(а):Еще вот такой вопрос. Операции

Код: Выделить всё

   |=   &=    ^=  *=    /=  
обязательно должны быть слитно написаны с знаком равно..??
Если да, то почему так?
Стоп! С этого момента надо прекратить задавать вопросы в форуме. Читаем Кернигана и Ричи, желательно в оригинале. Не спеша и вдумчиво. Форумы - не курсы обучения. Здесь топчется народ, знающий Си от А до Я и даже больше, но это не повод их мучать подобными вопросами. Вы собрались основы программирования на вопросах и ответах изучить? Желательна хоть небольшая, но все-таки платформа знаний. Я без обид, это же очевидно, не выучив азбуки, не научитесь слога составлять...
PS А по сути вопроса: Что вам скажет компилятор, если вы оператор for напишите не слитно, а раздельно? Правильно. Потому что это ОПЕРАТОР.
И |= написанное раздельно будет компилятором воспринято как ДВА самостоятельных оператора | и =
С уважением,
Виктор.
phanis
Вымогатель припоя
Сообщения: 513
Зарегистрирован: Сб фев 19, 2011 18:04:08
Откуда: Татарстан, пос. Актюбинский
Контактная информация:

Re: Синтаксис языка С в AVR Studio 5

Сообщение phanis »

Да ясно теперь. потому что это

Код: Выделить всё

   l_значение = выражение
              l_значение += выражение
              l_значение -= выражение
              l_значение *= выражение
              l_значение /= выражение
              l_значение %= выражение
              l_значение >>= выражение
              l_значение <<= выражение
              l_значение &= выражение
              l_значение ^= выражение
              l_значение |= выражение
операции присваивания. Это не флуд, я частенько на таких мелочах попадался. Можно же например написать А = B + C; А=B+C; с пробелами и без вот я к чему..
Спасибо за разъяснения.
ut1wpr
Вымогатель припоя
Сообщения: 581
Зарегистрирован: Ср янв 05, 2011 10:03:18

Re: Синтаксис языка С в AVR Studio 5

Сообщение ut1wpr »

phanis писал(а):Можно же например написать А = B + C; А=B+C; с пробелами и без вот я к чему..
Спасибо за разъяснения.
"А = B + C;" тождественно равно "А=B+C;" В вашем примере лишние пробелы безболезенно уберет сам компилятор на первом проходе. Все-таки Кернигана и Ричи читать придется, несмотря ни на какие уловки. Извините, я выпадаю из дальнейших обсуждений.
Удачи в освоении.
С уважением,
Виктор.
Закрыто

Вернуться в «Микроконтроллеры и ПЛИС»