Подскажите, где можно найти нормальное описание синтаксиса языка С, применяемого в AVR Studio 5 ?
До этого писал только на ассемблере, решил освоить С, но не хочу уходить с AVR Studio.
Столкнулся с большой проблемой, при попытке что-либо написать и скомпилировать постоянно вылезают ошибки синтаксиса, но нигде не получается найти, как синтаксически правильно именно в AVR Studio писать ту или конструкцию.
В самой AVR Studio никакого хелпа похоже не предусмотрено вообще.
Так вы напишите код, на который оно ругается.
И сама AVR Studio с Си кодом работать не умеет - компилятор там WinAvr. Хотя может в 5-той версии свой появился.
Да нагуглил уже давно.
Например, как там операции с портами должны происходить?
почему-то на, например, portb.1 оно ругается
на PB1 тоже ругается (хотя в файле определений это есть).
Как правильно к портам и пинам обращаться?
В примерах по AVR GCC и WinAVR именно как PORTB.1 обращения идут.
Например у того же Шпака в "Программирование на языке С для AVR и PIC микроконтроллеров" примеры даны именно для WinAVR и AVR Studio, только работать почему-то описанный там синтаксис не хочет.
Мне бы всё же описание синтаксиса языка, а не разбор какого-то кусочка кода.
Есть 15 летний опыт программирования на Pascal (Delphi) и разных вариациях ассемблера.
Теперь вот для больших проектов на AVR нужно изучать Си. На асме что-то большое писать слишком долго.
Откуда мне (да и остальным) известно, что у вас там происходит? Про синтаксис уже сказали - банальный GCC для AVR. А вы же не удосужились нормально описать, что у вас за "куча ошибок". Как, блин, блондинка, которая звонит сисадмину и говорит про какое-то окошко с какой-то кнопочкой. Телепатов нету, они не выдержали нагрузки и совершили массовое самогубство Может у вас не подключен io.h.. Сидеть теперь и гадать?
Leo_vrn, конструкция типа PORTB.1 используется только в CVAVR, ну или ещё в других. В WinAvr для установки битов нужно пользоваться битовыми операциями. Например, установка в PORTB бита 2:
и т.д. Некоторые для удобства пишут макросы аля setBit(PORTB, 2).
И о каком таком "синтаксисе AVR Studio 5" идёт речь? Си - это стандартизированный язык и на него есть стандарт с регламентированными конструкциями и то что они точно должны делать и компилятор должен всё точно также исполнять. Иначе говоря, не важно что писать: мигалку для микроконтроллера или систему стабилизации для истребителя для какого-то мегакомпьютера - синтаксис один и тот же. Ну а то что некоторые разработчики добавляют нестандартные конструкции в свои компиляторы, так это другой компилятор не виноват, что он не знает этих конструкций. Максимум виноват программист, который написал этот компиляторозависимый код.
Последний раз редактировалось SubDia Пн фев 13, 2012 11:05:31, всего редактировалось 1 раз.
pavel_cydenov: Вобще я праAVRославный человек. Но и про ислARM слышал много хорошего ) MrYuran: Самые ортодоксальные — это PICудеи ) Katz: Не, 51-ники. )
И опять получим код, который будет понимать только ГСС. Это тот же макрос, только встроенный в Гнусь. Любой отход от стандарта ANSI C приводит к зависимости от компилятора. Так стоит-ли плодить сущности?
Если не понимать, что лежит в основе того или иного макроса - обречен сидеть под одним и тем же компилятором, портирование недоступно...
не срабатывает как нужно, вот такой тонкий момент интересовал.
Вроде просто, а не поставил скобки и все, долго не мог понять в чем дело..
Спасибо еще раз..
не срабатывает как нужно, вот такой тонкий момент интересовал.
Вроде просто, а не поставил скобки и все, долго не мог понять в чем дело..
Спасибо еще раз..
Проблема не в сбросе или установке, а в порядке выполнения операторов в порядке их приоритетов. Без общей скобки оператор побитной инверсии (тильда) будет относится только к первому выражению. Заключение ВСЕГО проореного выражения в скобки приведет к именно его побитной инверсии.
ut1wpr писал(а):И опять получим код, который будет понимать только ГСС.
Сударь, я с этого и начал мой пост с этим примером.
Если совсем заморачиваться стандартами Си - можно и подохнуть. А если вы не собираетесь менять компилятор, почему бы и не использовать его удобные возможности?
PS: вы сами часто встречали сорцы, которые проглотит любой компилятор? о.О
обязательно должны быть слитно написаны с знаком равно..??
Если да, то почему так?
Стоп! С этого момента надо прекратить задавать вопросы в форуме. Читаем Кернигана и Ричи, желательно в оригинале. Не спеша и вдумчиво. Форумы - не курсы обучения. Здесь топчется народ, знающий Си от А до Я и даже больше, но это не повод их мучать подобными вопросами. Вы собрались основы программирования на вопросах и ответах изучить? Желательна хоть небольшая, но все-таки платформа знаний. Я без обид, это же очевидно, не выучив азбуки, не научитесь слога составлять...
PS А по сути вопроса: Что вам скажет компилятор, если вы оператор for напишите не слитно, а раздельно? Правильно. Потому что это ОПЕРАТОР.
И |= написанное раздельно будет компилятором воспринято как ДВА самостоятельных оператора | и =
l_значение = выражение
l_значение += выражение
l_значение -= выражение
l_значение *= выражение
l_значение /= выражение
l_значение %= выражение
l_значение >>= выражение
l_значение <<= выражение
l_значение &= выражение
l_значение ^= выражение
l_значение |= выражение
операции присваивания. Это не флуд, я частенько на таких мелочах попадался. Можно же например написать А = B + C; А=B+C; с пробелами и без вот я к чему..
Спасибо за разъяснения.
phanis писал(а):Можно же например написать А = B + C; А=B+C; с пробелами и без вот я к чему..
Спасибо за разъяснения.
"А = B + C;" тождественно равно "А=B+C;" В вашем примере лишние пробелы безболезенно уберет сам компилятор на первом проходе. Все-таки Кернигана и Ричи читать придется, несмотря ни на какие уловки. Извините, я выпадаю из дальнейших обсуждений.
Удачи в освоении.