Программирование входо-выходов в Atmel Studio 7

Обсуждаем контроллеры компании Atmel.
Skitalec777
Первый раз сказал Мяу!
Сообщения: 24
Зарегистрирован: Чт ноя 12, 2015 08:13:38

Программирование входо-выходов в Atmel Studio 7

Сообщение Skitalec777 »

Здравствуйте!

Я только начинаю изучение микроконтроллеров. Помогите, пожалуйста, разобраться.

Почему такую запись Atmel Studio принимает:

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

DDRB =  0b00000001;
PORTB = 0b00000001;
А на такую ругается:

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

DDRB.0 =  1;
PORTB.0 = 1;
Ведь судя по примерам, которые я смог найти, по сути это должны быть аналогичные записи.

Заранее спасибо за ответ!
Реклама
Аватара пользователя
eess9
Вымогатель припоя
Сообщения: 672
Зарегистрирован: Ср фев 29, 2012 01:58:32
Откуда: Харьков, Украина

Re: Программирование входо-выходов в Atmel Studio 7

Сообщение eess9 »

Skitalec777 писал(а):А на такую ругается:

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

DDRB.0 =  1;
PORTB.0 = 1;
Эта запись характерна для Codevisionavr, а AVRStudio такое не кушает.
Вы должны записать так:

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

DDRB =  (1 << 0);
PORTB = (1 << 0);
или так:

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

DDRB =  0х01;
PORTB = 0х01;
Реклама
Pnjom-Penb
Мучитель микросхем
Сообщения: 469
Зарегистрирован: Вс авг 30, 2015 03:52:59

Re: Программирование входо-выходов в Atmel Studio 7

Сообщение Pnjom-Penb »

Добавлю к вышесказанному еще пару копеек.
Во-первых, выражения на языке CodeVision "не скушает" вообще ни один компилятор Си, не только AVRStudi'я.
Во-вторых, разница не только в языках, но и в сути предполагаемых действий - код "порт.бит = 1" устанавливает один бит, а код "порт = константа" устанавливает все биты.
Аватара пользователя
oleg110592
Друг Кота
Сообщения: 3832
Зарегистрирован: Сб сен 10, 2011 17:46:25

Re: Программирование входо-выходов в Atmel Studio 7

Сообщение oleg110592 »

Pnjom-Penb писал(а):"не скушает" вообще ни один компилятор Си
компилятор Си CC5X для PIC микроконтроллеров нормально "кушает" выражения типа PORTA.0=1, также битовые переменные есть в Микрочиповском XC8 (бывший HI-TECH) - можно установить бит так: RA0=1. В IAR AVR тоже можно устанавливать биты порта так: PORTA_Bit0 = 1.
В стандартном Си нет определения битовые переменные, но есть битовые поля в структурах. Которые можно использовать в качестве битовых переменных. Типа так:

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

struct {
unsigned char a : 1;
unsigned char b : 1;
unsigned char c : 1;
unsigned char d : 1;
} b;
использовать так:
Реклама
Эиком - электронные компоненты и радиодетали
pcb
Опытный кот
Сообщения: 833
Зарегистрирован: Пт авг 12, 2011 09:14:27
Откуда: Млечный путь/Земля/РФ/Екатеринбург

Re: Программирование входо-выходов в Atmel Studio 7

Сообщение pcb »

oleg110592 писал(а):компилятор
Правильно.
У некоторых специально оформленные заголовки(файлы.н) где прописаны битовые поля указывающие на нужную ячеку или УВВ.
Разработал:
-BLDC
-ФУОЗ/МПСЗ
-SMART BMS
-ECU/EDC на STM32F4(43%)+CPLD(57%)
-Моноинжектор на ATSAMD20G16
-контроллер эффектов для RGB LED ленты
-умные часы/обратный счет/секундомер
-устройство измерения емкости АКБ
Реклама
Skitalec777
Первый раз сказал Мяу!
Сообщения: 24
Зарегистрирован: Чт ноя 12, 2015 08:13:38

Re: Программирование входо-выходов в Atmel Studio 7

Сообщение Skitalec777 »

eess9 писал(а): Эта запись характерна для Codevisionavr, а AVRStudio такое не кушает.
Pnjom-Penb писал(а): ... выражения на языке CodeVision "не скушает" вообще ни один компилятор Си, не только AVRStudi'я.
Вот оно что... Оказывается, язык Си языку Си - рознь, и все зависит от компилятора. А я то думал, что данный язык программирования стандартизированный.

Большое спасибо за разъяснения!
Реклама
Skitalec777
Первый раз сказал Мяу!
Сообщения: 24
Зарегистрирован: Чт ноя 12, 2015 08:13:38

Re: Программирование входо-выходов в Atmel Studio 7

Сообщение Skitalec777 »

eess9 писал(а): Вы должны записать так:

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

DDRB =  (1 << 0);
PORTB = (1 << 0);
А это писать именно так? Или может быть так?

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

DDRB |=  (1 << 0);
PORTB |= (1 << 0);
Есть ли между этими записями разница? Или это по сути одно и тоже?
Аватара пользователя
Mishany
Электрический кот
Сообщения: 1031
Зарегистрирован: Чт июн 20, 2013 00:00:58
Откуда: москва, м.Сходненская

Re: Программирование входо-выходов в Atmel Studio 7

Сообщение Mishany »

авр студия имеет наиболее правильный стоковый синтаксис.
Последний раз редактировалось Mishany Чт ноя 12, 2015 14:40:05, всего редактировалось 1 раз.
pcb
Опытный кот
Сообщения: 833
Зарегистрирован: Пт авг 12, 2011 09:14:27
Откуда: Млечный путь/Земля/РФ/Екатеринбург

Re: Программирование входо-выходов в Atmel Studio 7

Сообщение pcb »

Разница есть.
Skitalec777 писал(а):DDRB |= (1 << 0);
устанавливает бит 0, остальные не трогает.
Skitalec777 писал(а):DDRB = (1 << 0);
устанавливает бит 0, остальные обнуляет.

книжку, какую нибудь, возьми по с/с++
Разработал:
-BLDC
-ФУОЗ/МПСЗ
-SMART BMS
-ECU/EDC на STM32F4(43%)+CPLD(57%)
-Моноинжектор на ATSAMD20G16
-контроллер эффектов для RGB LED ленты
-умные часы/обратный счет/секундомер
-устройство измерения емкости АКБ
Аватара пользователя
Mishany
Электрический кот
Сообщения: 1031
Зарегистрирован: Чт июн 20, 2013 00:00:58
Откуда: москва, м.Сходненская

Re: Программирование входо-выходов в Atmel Studio 7

Сообщение Mishany »

это же элементарные битовые операции
DDRB = (1 << 0);
1 сдвинуть влево на 0 бит и положить в регистр DDRB
DDRB |= (1 << 0);
1 сдвинуть влево на 0 бит и логичиское или с регистром DDRB, т.е. на 0 бите если была 1 - 1 и останеться, если был 0 установиться 1
Skitalec777
Первый раз сказал Мяу!
Сообщения: 24
Зарегистрирован: Чт ноя 12, 2015 08:13:38

Re: Программирование входо-выходов в Atmel Studio 7

Сообщение Skitalec777 »

pcb писал(а): книжку, какую нибудь, возьми по с/с++
Книжка у меня есть. И даже не одна. Однако эти книги, видимо, пишут программисты для программистов же. Вот Вы, буквально двумя предложениями, используя человеческий язык, объяснили мне довольно сложный момент, который по книжкам я пытался понять три дня. Именно это меня и сподвигло создать данный топик.
Аватара пользователя
Z_h_e
Собутыльник Кота
Сообщения: 2708
Зарегистрирован: Сб май 14, 2011 21:16:04
Откуда: г. Чайковский

Re: Программирование входо-выходов в Atmel Studio 7

Сообщение Z_h_e »

Писал Вам нижеследующее, но уже вроде все пояснили. Раз написал, пускай будет.

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

DDRB = (1 << 0);
тоже самое
DDRB=0b00000001

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

DDRB |= (1 << 0);
тоже самое
DDRB=DDRB | 0b00000001
Книжка у меня есть. И даже не одна. Однако эти книги, видимо,
Или не с того начали читать или не c той.
Изображение
Добро всегда побеждает зло. Поэтому кто победил - тот и добрый.
Pnjom-Penb
Мучитель микросхем
Сообщения: 469
Зарегистрирован: Вс авг 30, 2015 03:52:59

Re: Программирование входо-выходов в Atmel Studio 7

Сообщение Pnjom-Penb »

Skitalec777 писал(а):Оказывается, язык Си языку Си - рознь, ...
С чего это вы взяли, что язык CodeVision'а это язык Си? Это заблуждение.
Skitalec777 писал(а):А я то думал, что данный язык программирования стандартизированный.
Нет, он стандартизованный. И стандарт языка Си (ISO/IEC 9899) хорошо бы иметь под рукой, чтобы не вестись на разные 'portb.0' и не удивляться тому, что компиляторы языка Си не компилируют код, написанный на языке CodeVision'а (и наоборот).
Skitalec777
Первый раз сказал Мяу!
Сообщения: 24
Зарегистрирован: Чт ноя 12, 2015 08:13:38

Re: Программирование входо-выходов в Atmel Studio 7

Сообщение Skitalec777 »

Pnjom-Penb писал(а):С чего это вы взяли, что язык CodeVision'а это язык Си? Это заблуждение.
стандарт языка Си (ISO/IEC 9899) хорошо бы иметь под рукой, чтобы не вестись на разные 'portb.0' и не удивляться тому, что компиляторы языка Си не компилируют код, написанный на языке CodeVision'а (и наоборот).
Поскольку я новичок, как вообще в программировании, так и в программировании микроконтроллеров в частности, то мне допускать подобные ошибки простительно. Благо, есть добрые люди, который вовремя подскажут и поправят. Тем более, что даже серьезные дяди говорят, что, например, Wiring - это чистый С/С++, просто в "обертке".
Аватара пользователя
oleg110592
Друг Кота
Сообщения: 3832
Зарегистрирован: Сб сен 10, 2011 17:46:25

Re: Программирование входо-выходов в Atmel Studio 7

Сообщение oleg110592 »

Mishany писал(а):студия имеет наиболее правильный стоковый синтаксис
это еще автор до констант не добрался в Program Space
Pnjom-Penb писал(а):CodeVision'а это язык Си?
Зачем тогда сама Атмел написала, что это C Compiler, и в расширения студии включила?
https://gallery.atmel.com/Products/Deta ... 337def9c54
Если что, иаром для авр пользовался.
Pnjom-Penb
Мучитель микросхем
Сообщения: 469
Зарегистрирован: Вс авг 30, 2015 03:52:59

Re: Программирование входо-выходов в Atmel Studio 7

Сообщение Pnjom-Penb »

oleg110592 писал(а):Зачем тогда сама Атмел написала, ...
То есть, как зачем? (ключевые слова подчеркнуты) Чтобы продвигать свой продукт. :))) Вероятно, подъезд на кривой козе к IAR'у завершился слишком высокими запросами, либо и вовсе ничем. :dont_know: Когда это маркетоложцы останавливались перед ложью во имя прибылЕй? Что им грубое несоответствие стандарту языка? Тем более, что ни один из стандартов им неизвестен... :)))
Skitalec777
Первый раз сказал Мяу!
Сообщения: 24
Зарегистрирован: Чт ноя 12, 2015 08:13:38

Re: Программирование входо-выходов в Atmel Studio 7

Сообщение Skitalec777 »

Pnjom-Penb писал(а):С чего это вы взяли, что язык CodeVision'а это язык Си? Это заблуждение.
Ну а, на Ваш взгляд, с Atmel Studio в этом плане все в порядке? Очень не хотелось бы ошибиться с инструментом с самого начала и потратить время на обучение в пустую...
Pnjom-Penb
Мучитель микросхем
Сообщения: 469
Зарегистрирован: Вс авг 30, 2015 03:52:59

Re: Программирование входо-выходов в Atmel Studio 7

Сообщение Pnjom-Penb »

Не заметил этого:
oleg110592 писал(а):нормально "кушает" выражения типа PORTA.0=1
Выражения "типа PORTA.0=1" не принадлежат языку Си. Совсем. Никак.
Вот такой вот облом... :
Изображение
oleg110592 писал(а):но есть битовые поля в структурах.
Абсолютная истина, как и утверждения из серии "небо - голубое, трава - зеленая". Однако, все, что не соответствует стандарту Си, по-прежнему не является языком Си. Стандарты вводятся не для оправдания зарплат сотрудников соответствующих организаций, а для исключения бардака, типа упомянутого выше.
Разные мелкие экосистемы, типа CV, имеют свой ареал и свою аудиторию, но их попытка изобразить "настоящесть" - не более, чем мимикрия. Соответствующие языки упоминаются как "C-like".

Учитывая тот факт, что обращение к отдельным битам порта легко реализуется в рамках стандарта, извраты, типа языка CV, не только лишают написанный так код переносимости, но и не дают никакого выигрыша, который мог бы хоть в какой-то степени оправдать такие выверты. В задачнике спрашивается © - если решение имеет минусы, но не имеет плюсов, то ... наQа оно надо?!!!
Вложения
C_identifiers.png
(6.16 КБ) 2067 скачиваний
Аватара пользователя
Mishany
Электрический кот
Сообщения: 1031
Зарегистрирован: Чт июн 20, 2013 00:00:58
Откуда: москва, м.Сходненская

Re: Программирование входо-выходов в Atmel Studio 7

Сообщение Mishany »

кстати PORTB.1 по записи похож на обращение к структуре, но имена в структуре не могут быть числовыми, это что там наворотили чтоб работало?
я что то с ходу не смог реализовать такое обращение к структуре.
Pnjom-Penb
Мучитель микросхем
Сообщения: 469
Зарегистрирован: Вс авг 30, 2015 03:52:59

Re: Программирование входо-выходов в Atmel Studio 7

Сообщение Pnjom-Penb »

Mishany писал(а):я что то с ходу не смог реализовать такое обращение к структуре.
Если речь об обращении в стиле CV, то... "Семен Семеныч, ну что же вы!!!", - прочтите же пост ровно на один выше Вашего.
Ответить

Вернуться в «AVR»