Страница 1 из 2
Синтаксис языка С в AVR Studio 5
Добавлено: Вс фев 12, 2012 20:17:58
Leo_vrn
Подскажите, где можно найти нормальное описание синтаксиса языка С, применяемого в AVR Studio 5 ?
До этого писал только на ассемблере, решил освоить С, но не хочу уходить с AVR Studio.
Столкнулся с большой проблемой, при попытке что-либо написать и скомпилировать постоянно вылезают ошибки синтаксиса, но нигде не получается найти, как синтаксически правильно именно в AVR Studio писать ту или конструкцию.
В самой AVR Studio никакого хелпа похоже не предусмотрено вообще.

Re: Синтаксис языка С в AVR Studio 5
Добавлено: Вс фев 12, 2012 20:26:38
IfoR
Так вы напишите код, на который оно ругается.
И сама AVR Studio с Си кодом работать не умеет - компилятор там WinAvr. Хотя может в 5-той версии свой появился.

Re: Синтаксис языка С в AVR Studio 5
Добавлено: Вс фев 12, 2012 20:56:14
hybroid
Leo_vrn писал(а):В самой AVR Studio никакого хелпа похоже не предусмотрено вообще.

Да и не должно его быть там. Это IDE. Хелп есть у компилятора. Гуглите winavr или gcc avr.
Re: Синтаксис языка С в AVR Studio 5
Добавлено: Пн фев 13, 2012 01:39:55
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?
Re: Синтаксис языка С в AVR Studio 5
Добавлено: Пн фев 13, 2012 04:24:00
hybroid
Leo_vrn писал(а):(куча ошибок синтаксиса)
Хорошо бы взглянуть на лог компиляции. И на исходник.
Re: Синтаксис языка С в AVR Studio 5
Добавлено: Пн фев 13, 2012 05:01:52
Leo_vrn
Мне бы всё же описание синтаксиса языка, а не разбор какого-то кусочка кода.
Есть 15 летний опыт программирования на Pascal (Delphi) и разных вариациях ассемблера.
Теперь вот для больших проектов на AVR нужно изучать Си. На асме что-то большое писать слишком долго.
Re: Синтаксис языка С в AVR Studio 5
Добавлено: Пн фев 13, 2012 05:31:21
hybroid
Откуда мне (да и остальным) известно, что у вас там происходит? Про синтаксис уже сказали - банальный GCC для AVR. А вы же не удосужились нормально описать, что у вас за "куча ошибок". Как, блин, блондинка, которая звонит сисадмину и говорит про какое-то окошко с какой-то кнопочкой. Телепатов нету, они не выдержали нагрузки и совершили массовое самогубство

Может у вас не подключен io.h.. Сидеть теперь и гадать?
Re: Синтаксис языка С в AVR Studio 5
Добавлено: Пн фев 13, 2012 09:21:26
IfoR
Leo_vrn, конструкция типа PORTB.1 используется только в CVAVR, ну или ещё в других. В WinAvr для установки битов нужно пользоваться битовыми операциями. Например, установка в PORTB бита 2:
Сброс этого же бита:
Установка 2 и 5 бита:
и т.д. Некоторые для удобства пишут макросы аля setBit(PORTB, 2).
И о каком таком "синтаксисе AVR Studio 5" идёт речь? Си - это стандартизированный язык и на него есть стандарт с регламентированными конструкциями и то что они точно должны делать и компилятор должен всё точно также исполнять. Иначе говоря, не важно что писать: мигалку для микроконтроллера или систему стабилизации для истребителя для какого-то мегакомпьютера - синтаксис один и тот же. Ну а то что некоторые разработчики добавляют нестандартные конструкции в свои компиляторы, так это другой компилятор не виноват, что он не знает этих конструкций. Максимум виноват программист, который написал этот компиляторозависимый код.
А PB1 - это наверно номер бита 1 порта PORTB:
Re: Синтаксис языка С в AVR Studio 5
Добавлено: Пн фев 13, 2012 10:33:31
phanis
Код: Выделить всё
Сброс этого же бита:
Код:
PORTB &= ~(1<<2);
А сброс сразу нескольких бит как будет ?
Re: Синтаксис языка С в AVR Studio 5
Добавлено: Пн фев 13, 2012 11:00:08
SubDia
phanis писал(а):А сброс сразу нескольких бит как будет ?
В точности так же. Сбрасываем 2, 3 и 4 биты.
Re: Синтаксис языка С в AVR Studio 5
Добавлено: Пн фев 13, 2012 11:04:01
Jack_A
phanis писал(а):Код: Выделить всё
Сброс этого же бита:
Код:
PORTB &= ~(1<<2);
А сброс сразу нескольких бит как будет ?
Хотя бы и так. Сбросить 2,3 и 6-й биты .
Re: Синтаксис языка С в AVR Studio 5
Добавлено: Пн фев 13, 2012 11:06:03
hybroid
В avr-gcc вместо (1<<PB2), например, можно использовать _BV(PB2).
Т.е. пример выше будет выглядеть так:
Код: Выделить всё
PORTB &= ~( _BV(PB2) | _BV(PB3) | _BV(PB6) );
Re: Синтаксис языка С в AVR Studio 5
Добавлено: Пн фев 13, 2012 15:23:27
ut1wpr
hybroid писал(а):В avr-gcc вместо (1<<PB2), например, можно использовать _BV(PB2).
Т.е. пример выше будет выглядеть так:
Код: Выделить всё
PORTB &= ~( _BV(PB2) | _BV(PB3) | _BV(PB6) );
И опять получим код, который будет понимать только ГСС. Это тот же макрос, только встроенный в Гнусь. Любой отход от стандарта ANSI C приводит к зависимости от компилятора. Так стоит-ли плодить сущности?

Если не понимать, что лежит в основе того или иного макроса - обречен сидеть под одним и тем же компилятором, портирование недоступно...
Re: Синтаксис языка С в AVR Studio 5
Добавлено: Пн фев 13, 2012 15:37:32
phanis
Ага понял спасибо, при установке бит нет общих скобок
, а при сбросе есть общая скобка
т.е если просто написать
не срабатывает как нужно, вот такой тонкий момент интересовал.
Вроде просто, а не поставил скобки и все, долго не мог понять в чем дело..
Спасибо еще раз..
Re: Синтаксис языка С в AVR Studio 5
Добавлено: Пн фев 13, 2012 16:09:04
ut1wpr
phanis писал(а):Ага понял спасибо, при установке бит нет общих скобок
, а при сбросе есть общая скобка
т.е если просто написать
не срабатывает как нужно, вот такой тонкий момент интересовал.
Вроде просто, а не поставил скобки и все, долго не мог понять в чем дело..
Спасибо еще раз..
Проблема не в сбросе или установке, а в порядке выполнения операторов в порядке их приоритетов. Без общей скобки оператор побитной инверсии (тильда) будет относится только к первому выражению. Заключение ВСЕГО проореного выражения в скобки приведет к именно его побитной инверсии.
Re: Синтаксис языка С в AVR Studio 5
Добавлено: Пн фев 13, 2012 16:58:40
hybroid
ut1wpr писал(а):И опять получим код, который будет понимать только ГСС.
Сударь, я с этого и начал мой пост с этим примером.
Если совсем заморачиваться стандартами Си - можно и подохнуть. А если вы не собираетесь менять компилятор, почему бы и не использовать его удобные возможности?
PS: вы сами часто встречали сорцы, которые проглотит любой компилятор? о.О
Re: Синтаксис языка С в AVR Studio 5
Добавлено: Пн фев 13, 2012 17:53:42
phanis
Еще вот такой вопрос. Операции
обязательно должны быть слитно написаны с знаком равно..??
Если да, то почему так?
Re: Синтаксис языка С в AVR Studio 5
Добавлено: Пн фев 13, 2012 18:07:13
ut1wpr
phanis писал(а):Еще вот такой вопрос. Операции
обязательно должны быть слитно написаны с знаком равно..??
Если да, то почему так?
Стоп! С этого момента надо прекратить задавать вопросы в форуме. Читаем Кернигана и Ричи, желательно в оригинале. Не спеша и вдумчиво. Форумы - не курсы обучения. Здесь топчется народ, знающий Си от А до Я и даже больше, но это не повод их мучать подобными вопросами. Вы собрались основы программирования на вопросах и ответах изучить? Желательна хоть небольшая, но все-таки платформа знаний. Я без обид, это же очевидно, не выучив азбуки, не научитесь слога составлять...
PS А по сути вопроса: Что вам скажет компилятор, если вы оператор
for напишите не слитно, а раздельно? Правильно. Потому что это ОПЕРАТОР.
И |= написанное раздельно будет компилятором воспринято как ДВА самостоятельных оператора | и =
Re: Синтаксис языка С в AVR Studio 5
Добавлено: Пн фев 13, 2012 18:23:18
phanis
Да ясно теперь. потому что это
Код: Выделить всё
l_значение = выражение
l_значение += выражение
l_значение -= выражение
l_значение *= выражение
l_значение /= выражение
l_значение %= выражение
l_значение >>= выражение
l_значение <<= выражение
l_значение &= выражение
l_значение ^= выражение
l_значение |= выражение
операции присваивания. Это не флуд, я частенько на таких мелочах попадался. Можно же например написать А = B + C; А=B+C; с пробелами и без вот я к чему..
Спасибо за разъяснения.
Re: Синтаксис языка С в AVR Studio 5
Добавлено: Пн фев 13, 2012 18:36:26
ut1wpr
phanis писал(а):Можно же например написать А = B + C; А=B+C; с пробелами и без вот я к чему..
Спасибо за разъяснения.
"А = B + C;" тождественно равно "А=B+C;" В вашем примере лишние пробелы безболезенно уберет сам компилятор на первом проходе. Все-таки Кернигана и Ричи читать придется, несмотря ни на какие уловки. Извините, я выпадаю из дальнейших обсуждений.
Удачи в освоении.