Страница 1 из 3

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

Добавлено: Чт ноя 12, 2015 08:33:22
Skitalec777
Здравствуйте!

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

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

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

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

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

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

Заранее спасибо за ответ!

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

Добавлено: Чт ноя 12, 2015 09:10:20
eess9
Skitalec777 писал(а):А на такую ругается:

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

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

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

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

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

DDRB =  0х01;
PORTB = 0х01;

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

Добавлено: Чт ноя 12, 2015 09:47:36
Pnjom-Penb
Добавлю к вышесказанному еще пару копеек.
Во-первых, выражения на языке CodeVision "не скушает" вообще ни один компилятор Си, не только AVRStudi'я.
Во-вторых, разница не только в языках, но и в сути предполагаемых действий - код "порт.бит = 1" устанавливает один бит, а код "порт = константа" устанавливает все биты.

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

Добавлено: Чт ноя 12, 2015 12:48:36
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;
использовать так:

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

Добавлено: Чт ноя 12, 2015 14:11:19
pcb
oleg110592 писал(а):компилятор
Правильно.
У некоторых специально оформленные заголовки(файлы.н) где прописаны битовые поля указывающие на нужную ячеку или УВВ.

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

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

Большое спасибо за разъяснения!

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

Добавлено: Чт ноя 12, 2015 14:33:36
Skitalec777
eess9 писал(а): Вы должны записать так:

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

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

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

DDRB |=  (1 << 0);
PORTB |= (1 << 0);
Есть ли между этими записями разница? Или это по сути одно и тоже?

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

Добавлено: Чт ноя 12, 2015 14:37:43
Mishany
авр студия имеет наиболее правильный стоковый синтаксис.

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

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

книжку, какую нибудь, возьми по с/с++

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

Добавлено: Чт ноя 12, 2015 14:45:37
Mishany
это же элементарные битовые операции
DDRB = (1 << 0);
1 сдвинуть влево на 0 бит и положить в регистр DDRB
DDRB |= (1 << 0);
1 сдвинуть влево на 0 бит и логичиское или с регистром DDRB, т.е. на 0 бите если была 1 - 1 и останеться, если был 0 установиться 1

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

Добавлено: Чт ноя 12, 2015 14:47:48
Skitalec777
pcb писал(а): книжку, какую нибудь, возьми по с/с++
Книжка у меня есть. И даже не одна. Однако эти книги, видимо, пишут программисты для программистов же. Вот Вы, буквально двумя предложениями, используя человеческий язык, объяснили мне довольно сложный момент, который по книжкам я пытался понять три дня. Именно это меня и сподвигло создать данный топик.

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

Добавлено: Чт ноя 12, 2015 15:01:30
Z_h_e
Писал Вам нижеследующее, но уже вроде все пояснили. Раз написал, пускай будет.

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

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

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

DDRB |= (1 << 0);
тоже самое
DDRB=DDRB | 0b00000001
Книжка у меня есть. И даже не одна. Однако эти книги, видимо,
Или не с того начали читать или не c той.

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

Добавлено: Чт ноя 12, 2015 15:03:21
Pnjom-Penb
Skitalec777 писал(а):Оказывается, язык Си языку Си - рознь, ...
С чего это вы взяли, что язык CodeVision'а это язык Си? Это заблуждение.
Skitalec777 писал(а):А я то думал, что данный язык программирования стандартизированный.
Нет, он стандартизованный. И стандарт языка Си (ISO/IEC 9899) хорошо бы иметь под рукой, чтобы не вестись на разные 'portb.0' и не удивляться тому, что компиляторы языка Си не компилируют код, написанный на языке CodeVision'а (и наоборот).

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

Добавлено: Чт ноя 12, 2015 15:17:37
Skitalec777
Pnjom-Penb писал(а):С чего это вы взяли, что язык CodeVision'а это язык Си? Это заблуждение.
стандарт языка Си (ISO/IEC 9899) хорошо бы иметь под рукой, чтобы не вестись на разные 'portb.0' и не удивляться тому, что компиляторы языка Си не компилируют код, написанный на языке CodeVision'а (и наоборот).
Поскольку я новичок, как вообще в программировании, так и в программировании микроконтроллеров в частности, то мне допускать подобные ошибки простительно. Благо, есть добрые люди, который вовремя подскажут и поправят. Тем более, что даже серьезные дяди говорят, что, например, Wiring - это чистый С/С++, просто в "обертке".

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

Добавлено: Чт ноя 12, 2015 15:21:27
oleg110592
Mishany писал(а):студия имеет наиболее правильный стоковый синтаксис
это еще автор до констант не добрался в Program Space
Pnjom-Penb писал(а):CodeVision'а это язык Си?
Зачем тогда сама Атмел написала, что это C Compiler, и в расширения студии включила?
https://gallery.atmel.com/Products/Deta ... 337def9c54
Если что, иаром для авр пользовался.

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

Добавлено: Чт ноя 12, 2015 17:51:35
Pnjom-Penb
oleg110592 писал(а):Зачем тогда сама Атмел написала, ...
То есть, как зачем? (ключевые слова подчеркнуты) Чтобы продвигать свой продукт. :))) Вероятно, подъезд на кривой козе к IAR'у завершился слишком высокими запросами, либо и вовсе ничем. :dont_know: Когда это маркетоложцы останавливались перед ложью во имя прибылЕй? Что им грубое несоответствие стандарту языка? Тем более, что ни один из стандартов им неизвестен... :)))

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

Добавлено: Чт ноя 12, 2015 19:45:35
Skitalec777
Pnjom-Penb писал(а):С чего это вы взяли, что язык CodeVision'а это язык Си? Это заблуждение.
Ну а, на Ваш взгляд, с Atmel Studio в этом плане все в порядке? Очень не хотелось бы ошибиться с инструментом с самого начала и потратить время на обучение в пустую...

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

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

Учитывая тот факт, что обращение к отдельным битам порта легко реализуется в рамках стандарта, извраты, типа языка CV, не только лишают написанный так код переносимости, но и не дают никакого выигрыша, который мог бы хоть в какой-то степени оправдать такие выверты. В задачнике спрашивается © - если решение имеет минусы, но не имеет плюсов, то ... наQа оно надо?!!!

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

Добавлено: Чт ноя 12, 2015 21:30:59
Mishany
кстати PORTB.1 по записи похож на обращение к структуре, но имена в структуре не могут быть числовыми, это что там наворотили чтоб работало?
я что то с ходу не смог реализовать такое обращение к структуре.

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

Добавлено: Чт ноя 12, 2015 22:14:03
Pnjom-Penb
Mishany писал(а):я что то с ходу не смог реализовать такое обращение к структуре.
Если речь об обращении в стиле CV, то... "Семен Семеныч, ну что же вы!!!", - прочтите же пост ровно на один выше Вашего.