Нескольно простых вопросов о программировании AVR на Си.
Re: Нескольно простых вопросов о программировании AVR на Си.
Ассемблер. Реализует все возможности АВР без всяких ограничений и "костылей". Заодно "заостряет ум" пользователя.
- WishMasterMax
- Потрогал лапой паяльник
- Сообщения: 389
- Зарегистрирован: Пн июл 09, 2012 11:07:59
- Откуда: Ukraine
- Контактная информация:
Re: Нескольно простых вопросов о программировании AVR на Си.
Я вот на студию и смотрю, судя по описанию она на основе визуал студии сделана, а это приятно и удобно, родная среда))
Jack_A, уметь бы еще писать на нем нормально) А то дальше того что в универе давали ничего не знаю, да и то походу давно уже забыл)
Jack_A, уметь бы еще писать на нем нормально) А то дальше того что в универе давали ничего не знаю, да и то походу давно уже забыл)
- ИС-пытатель
- Вымогатель припоя
- Сообщения: 577
- Зарегистрирован: Ср июн 19, 2013 08:10:48
- Откуда: Москва, СПб, Липецк, Рязань
Re: Нескольно простых вопросов о программировании AVR на Си.
Jack_A писал(а):Ассемблер. Реализует все возможности АВР без всяких ограничений и "костылей". Заодно "заостряет ум" пользователя.
Ага. И закаляет характер!
Пользую студию 6.0. очень удобно работать в плане подсветки синтаксиса, автоматического ввода имен переменных и др. + много всяких примочек, позволяющих, например, двинуть весь абзац одним нажатием клавиши табуляции. Или закомментировать его клавишей /. Жду-недождусь когда сделают возможность сворачивания блока кода (как в CV AVR).
Большой минус - бывают проблемы с правильностью компиляции. + при изменении настроек оптимизации код, работавший с прошлыми настройками в 70% случаев перестает работать. Поэтому обычно пишу код в 6-й студии, а потом переношу в 4-ю и компилю. )
Ну, и эмулятор в 6-ке глючный
- ARV
- Ум, честь и совесть. И скромность.
- Сообщения: 18544
- Зарегистрирован: Чт дек 28, 2006 08:19:56
- Откуда: Новочеркасск
- Контактная информация:
Re: Нескольно простых вопросов о программировании AVR на Си.
при слове Visual Studio у меня мурашки по коже
поэтому я продолжаю рекомендоваь Eclipse, редактор которого с моей точки зрения содержит абсолютно все фишки, которые только можно пожелать, включая сдвиги, комментирование, сворачивание и т.п. выделение. к тому же он может работать с флешки 
Безусловным плюсом Атмеловской студии следует признать наличие весьма приличного симулятора, это факт. Альтернативных бесплатных симуляторов для AVR такого уровня просто не существует... но ради симулятора ставить монструозную 6-ю студию - увольте! поэтому продолжаю пользоваться студией версии 4.18. а для симуляции использую PROTEUS
Безусловным плюсом Атмеловской студии следует признать наличие весьма приличного симулятора, это факт. Альтернативных бесплатных симуляторов для AVR такого уровня просто не существует... но ради симулятора ставить монструозную 6-ю студию - увольте! поэтому продолжаю пользоваться студией версии 4.18. а для симуляции использую PROTEUS
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
- WishMasterMax
- Потрогал лапой паяльник
- Сообщения: 389
- Зарегистрирован: Пн июл 09, 2012 11:07:59
- Откуда: Ukraine
- Контактная информация:
Re: Нескольно простых вопросов о программировании AVR на Си.
Попробую студию
Не хочу в CVAVR возвращаться) От нее отупеть можно с этими визардами)
Ну визуалка хорошая вещь, по сравнению с тем же нетбинсом)
Ну визуалка хорошая вещь, по сравнению с тем же нетбинсом)
- Леонид Иванович
- Друг Кота
- Сообщения: 4779
- Зарегистрирован: Сб апр 02, 2011 12:40:46
- Откуда: Минск
- Контактная информация:
Re: Нескольно простых вопросов о программировании AVR на Си.
ИС-пытатель писал(а):Жду-недождусь когда сделают возможность сворачивания блока кода
А я эту возможность в IAR отключил. При работе часто пользуюсь выделением строк кликом мышки слева, так постоянно попадал на это сворачивание.
- WishMasterMax
- Потрогал лапой паяльник
- Сообщения: 389
- Зарегистрирован: Пн июл 09, 2012 11:07:59
- Откуда: Ukraine
- Контактная информация:
Re: Нескольно простых вопросов о программировании AVR на Си.
О, а что по поводу IAR скажете?
Re: Нескольно простых вопросов о программировании AVR на Си.
вопрос по авр студии - 5.1
при написании кода для совсем мелких контроллеров хочется использовать регистры напрямую. это также уменьшает использование памяти на пуши из/в стек при переходах в пп.
в частности, CVAVR при компилировании всегда сам использовал регистры, без применения ОЗУ. студия же даже для одной переменной в проекте всёравно использует озу.
в одном из видео подсмотрел оператор Register, специально для этих целей. однако студия конструкцию
register unsigned char temp;
просто не видит, далее по тексту выделяет temp как просто не обьявленную. что делать?
при написании кода для совсем мелких контроллеров хочется использовать регистры напрямую. это также уменьшает использование памяти на пуши из/в стек при переходах в пп.
в частности, CVAVR при компилировании всегда сам использовал регистры, без применения ОЗУ. студия же даже для одной переменной в проекте всёравно использует озу.
в одном из видео подсмотрел оператор Register, специально для этих целей. однако студия конструкцию
register unsigned char temp;
просто не видит, далее по тексту выделяет temp как просто не обьявленную. что делать?
- oleg110592
- Друг Кота
- Сообщения: 3832
- Зарегистрирован: Сб сен 10, 2011 17:46:25
Re: Нескольно простых вопросов о программировании AVR на Си.
Winavr так понимал:
register unsigned char counter asm("r3");
регистры вроде можно использовать r2-r7
register unsigned char counter asm("r3");
регистры вроде можно использовать r2-r7
Re: Нескольно простых вопросов о программировании AVR на Си.
где на эту тему можно почитать? точнее что вообще искать......
- oleg110592
- Друг Кота
- Сообщения: 3832
- Зарегистрирован: Сб сен 10, 2011 17:46:25
Re: Нескольно простых вопросов о программировании AVR на Си.
AVR Libc Reference Manual
9.10.4 How to permanently bind a variable to a register?
9.10.4 How to permanently bind a variable to a register?
-
illarionovsp
- Прорезались зубы
- Сообщения: 234
- Зарегистрирован: Ср апр 29, 2009 22:22:13
- Откуда: СПб
Re: Нескольно простых вопросов о программировании AVR на Си.
Всё, как всегда, не так просто, как хотелось бы.
1. Необходимость в ассемблере существует. Только она столь редка и конкретна, что просто так, из пижонства прибегать к нему не вижу смысла. Какой-то умник с изиэлектроник сказал: "Жизнь слишком коротка и интересна, чтобы ассемблеры изучать".
2. Си тоже не подарок судьбы. Недаром регулярно происходят пересмотры стратегий компиляторов. Например, адресация. В существующей версии есть значение переменной, а есть ссылка на неё (адрес). И что хорошего? Очередной головолом и лишняя возможность для ошибок. В новой версии, говорят, эту пакость решат.
3. Всякий компил жрёт место в памяти и время выполнения. Так "Не гонялся бы ты, поп, за дешевизною". Ставь более мощный МК и не крохоборничай!
4. Все версии компиляторов содержат хитрости и недомолвки. Например, можно обрабатывать Булевы переменные битовыми операциями. Ну, типа вместо && писать &. Некоторые компилы ругаются, другие внимания не обращают. Или while(1). Неправильно это. Не по циркулю. 1 - не Булева переменная. Д.б. while(true). Только я такого занудства нигде не видел.
5. Atmel Studio 6.0 и 6.2 вещи удобные. Мне, ИМХО, нравятся. Но я к MC VC++ и MC VC# привыкший, мне проще.
1. Необходимость в ассемблере существует. Только она столь редка и конкретна, что просто так, из пижонства прибегать к нему не вижу смысла. Какой-то умник с изиэлектроник сказал: "Жизнь слишком коротка и интересна, чтобы ассемблеры изучать".
2. Си тоже не подарок судьбы. Недаром регулярно происходят пересмотры стратегий компиляторов. Например, адресация. В существующей версии есть значение переменной, а есть ссылка на неё (адрес). И что хорошего? Очередной головолом и лишняя возможность для ошибок. В новой версии, говорят, эту пакость решат.
3. Всякий компил жрёт место в памяти и время выполнения. Так "Не гонялся бы ты, поп, за дешевизною". Ставь более мощный МК и не крохоборничай!
4. Все версии компиляторов содержат хитрости и недомолвки. Например, можно обрабатывать Булевы переменные битовыми операциями. Ну, типа вместо && писать &. Некоторые компилы ругаются, другие внимания не обращают. Или while(1). Неправильно это. Не по циркулю. 1 - не Булева переменная. Д.б. while(true). Только я такого занудства нигде не видел.
5. Atmel Studio 6.0 и 6.2 вещи удобные. Мне, ИМХО, нравятся. Но я к MC VC++ и MC VC# привыкший, мне проще.
- ARV
- Ум, честь и совесть. И скромность.
- Сообщения: 18544
- Зарегистрирован: Чт дек 28, 2006 08:19:56
- Откуда: Новочеркасск
- Контактная информация:
Re: Нескольно простых вопросов о программировании AVR на Си.
illarionovsp писал(а):Ну, типа вместо && писать &. Некоторые компилы ругаются, другие внимания не обращают.
Во-первых, булевого типа в Си вообще не существует, т.е. принципиально.
Во-вторых, очень многие и так не могут понять разницу между & и &&.
В третьих, настоящие монстры вместо | | применяют +, а вместо && умножение.
Си даёт программисту широкий спектр инструментов для создания проблем
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
-
illarionovsp
- Прорезались зубы
- Сообщения: 234
- Зарегистрирован: Ср апр 29, 2009 22:22:13
- Откуда: СПб
Re: Нескольно простых вопросов о программировании AVR на Си.
ARV пишет: "в Си булевских (логических) типов нет".
Правильно, нет. А известное лукавство есть. Логические константы true и false есть. В книжке приведён пример:
int x=20; printf("%d", x>10);
Компил проглотит эту чепуху невозмутимо, даже не поморщится.
Вот уж действительно "А древо жизни пышно зеленеет".
Напишите y=(a>b);
a>b какой тип имеет. Ясен пень, булевский (логический). Т.е. такой, которого не бывает. А раз не бывает, то компил гавкнет: Пиши int y. Или ещё какой из списка разрешённых.
Правильно, нет. А известное лукавство есть. Логические константы true и false есть. В книжке приведён пример:
int x=20; printf("%d", x>10);
Компил проглотит эту чепуху невозмутимо, даже не поморщится.
Вот уж действительно "А древо жизни пышно зеленеет".
Напишите y=(a>b);
a>b какой тип имеет. Ясен пень, булевский (логический). Т.е. такой, которого не бывает. А раз не бывает, то компил гавкнет: Пиши int y. Или ещё какой из списка разрешённых.
- ARV
- Ум, честь и совесть. И скромность.
- Сообщения: 18544
- Зарегистрирован: Чт дек 28, 2006 08:19:56
- Откуда: Новочеркасск
- Контактная информация:
Re: Нескольно простых вопросов о программировании AVR на Си.
если можно, не надо фантазировать на публикеillarionovsp писал(а):Напишите y=(a>b); a>b какой тип имеет. Ясен пень, булевский (логический). Т.е. такой, которого не бывает. А раз не бывает, то компил гавкнет: Пиши int y. Или ещё какой из списка разрешённых.
выражение a>b имеет тип int по умолчанию, принимает значение 0 или 1, и никакого "гавканья компилера" не может вызывать.
вы можете определить самостоятельно какие угодно "константы", но это ничего не изменит в Си... в нем нет булевого типа
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
-
illarionovsp
- Прорезались зубы
- Сообщения: 234
- Зарегистрирован: Ср апр 29, 2009 22:22:13
- Откуда: СПб
Re: Нескольно простых вопросов о программировании AVR на Си.
Прошу прощения. Всё не от необузданной фантазии, а от "большого" ума.
В MC VC++ тип bool есть. А я уже давно на простом Си не работаю.
Сейчас начал прибор программировать, а в прикладных приборных прогах от С++ только заумствования одни, толку чуть.
Но всё же вопрос остался: (x>y) имеет тип int или автоматически (в случае необходимости) преобразуется в int. Или, по другому, длина у (x>y) байт (меньше не бывает) или 2 байта, как у int? Думается, что 1 байт...
В MC VC++ тип bool есть. А я уже давно на простом Си не работаю.
Сейчас начал прибор программировать, а в прикладных приборных прогах от С++ только заумствования одни, толку чуть.
Но всё же вопрос остался: (x>y) имеет тип int или автоматически (в случае необходимости) преобразуется в int. Или, по другому, длина у (x>y) байт (меньше не бывает) или 2 байта, как у int? Думается, что 1 байт...
- ARV
- Ум, честь и совесть. И скромность.
- Сообщения: 18544
- Зарегистрирован: Чт дек 28, 2006 08:19:56
- Откуда: Новочеркасск
- Контактная информация:
Re: Нескольно простых вопросов о программировании AVR на Си.
Длина переменной определяется ее типом, остальное - явное или неявное приведение типов.
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
- COKPOWEHEU
- Говорящий с текстолитом
- Сообщения: 1525
- Зарегистрирован: Чт июн 10, 2010 20:11:19
Re: Нескольно простых вопросов о программировании AVR на Си.
Само по себе оно не имеет типа (в ассемблерном виде обрабатывается как блок if с присвоением 1 либо 0), но по логике языка тип тот же, что у аргументов, тем более что по факту операция сравнения - вычисление разности без записи результата.Но всё же вопрос остался: (x>y) имеет тип int или автоматически (в случае необходимости) преобразуется в int.
-
illarionovsp
- Прорезались зубы
- Сообщения: 234
- Зарегистрирован: Ср апр 29, 2009 22:22:13
- Откуда: СПб
Re: Нескольно простых вопросов о программировании AVR на Си.
Книжку открываем. Читаем: while(сравнение) {}.
Читаем дальше: while(1) {}. 1 - результат сравнения (истина). Но результат сравнения и оператор сравнения, это несколько разные вещи. ИМХО.
Насчёт сравнения, как вычисление разности без записи этой самой разности. Но с выставлением флагов. Флаг - это бит. Стал быть, булева переменная имеет размерность бит. А дальше преобразуем куда хотим. Это, ребята, здорово. Логические переменные очень логичны.
Читаем дальше: while(1) {}. 1 - результат сравнения (истина). Но результат сравнения и оператор сравнения, это несколько разные вещи. ИМХО.
Насчёт сравнения, как вычисление разности без записи этой самой разности. Но с выставлением флагов. Флаг - это бит. Стал быть, булева переменная имеет размерность бит. А дальше преобразуем куда хотим. Это, ребята, здорово. Логические переменные очень логичны.
- COKPOWEHEU
- Говорящий с текстолитом
- Сообщения: 1525
- Зарегистрирован: Чт июн 10, 2010 20:11:19
Re: Нескольно простых вопросов о программировании AVR на Си.
Флаги выставляются в SREG, а не в переменной. Для AVR разницы, где хранить булевские переменные, нет. Хоть 8 штук на байт, хоть одну, хоть одну на long long. Физически булевские переменные не являются результатом математического преобразования. Насчет while(1) так логическим 0 считается нулевое число, а логической 1 - любое ненулевое число.

