Страница 103 из 160

Re: AVR studio в вопросах и ответах

Добавлено: Чт фев 11, 2016 22:52:04
ARV
Rtmip писал(а):ARV,
СпойлерВы перепутали меня с Jman
возможно. отличить одного флудера от другого порой сложновато. если это доставило вам неудобства - прошу прощения, не принимайте близко к сердцу.

Re: AVR studio в вопросах и ответах

Добавлено: Пт фев 12, 2016 07:53:00
Jman
ARV писал(а):
Rtmip писал(а):ARV,
СпойлерВы перепутали меня с Jman
возможно. отличить одного флудера от другого порой сложновато. если это доставило вам неудобства - прошу прощения, не принимайте близко к сердцу.
Вы адресовали это мне? Если да, то не собирался флудить. Задал конкретные вопросы. Получил ответы, другое дело, если некоторые товарищи начали холивар и нравоучения. Теперь по существу.
1. Только начал соображать как работать с портами в ATMEL Studio - очень даже интересно и на самом деле просто;
2. Забросил программу, начал как говорится с нуля. Писал различные мигалки для отладочной платы, дабы понять работу. (выражение PORTA |=(1<<PA1) - законно как и PORTA |=(1<<1)б);
3. #define F_CPU your_clock - не знал что должна быть выше всех хеддеров, иначе начинало матюкаться на бибку util/delay.h.
4. Деббагер - как много в этом звуке, как я мог упустить такое!!!
5. Работаю сейчас над прерываниями, ошибка - sei();!!!! Не ставил разрешение, и получал нерабочий код.
6. Работаю дальше над собой, буду пытаться переводить свой быдлокод из CVAVR в Студию.
Вывод: после CVAVR - Atmel studio показалось очень мощным инструментом с отладчиком. Вот думаю приобрести теперь JTAG отладчик для больших кристаллов.
ЗЫ: ни в коей мере нет желания заниматься флудерством...

Re: AVR studio в вопросах и ответах

Добавлено: Пт фев 12, 2016 08:22:19
ARV
Jman писал(а):выражение PORTA |=(1<<PA1) - законно как и PORTA |=(1<<1);
вместо (1<<x) рекомендую использовать "стандартный" для avr-gcc макрос _BV(x) - то же самое, но "стандартнее".
Jman писал(а):#define F_CPU your_clock - не знал что должна быть выше всех хеддеров, иначе начинало матюкаться на бибку util/delay.h.
скажите мне, кто учит начинающих этому - я ему плюну в харю! :evil: F_CPU должа быть определена ГЛОБАЛЬНО ДЛЯ ВСЕГО ПРОЕКТА! в старой студии (4.хх) это делается в окошке параметров проекта, в новой - не знаю, но в любом случае эта константа должна фигурировать В КОМАНДНОЙ СТРОКЕ ДЛЯ ЗАПУСКА КОМПИЛЯТОРА в опции -D
Никогда не размещайте ее внутри любого файла вашего проекта!

Re: AVR studio в вопросах и ответах

Добавлено: Пт фев 12, 2016 08:47:21
Jman
ARV писал(а):
Jman писал(а):выражение PORTA |=(1<<PA1) - законно как и PORTA |=(1<<1);
вместо (1<<x) рекомендую использовать "стандартный" для avr-gcc макрос _BV(x) - то же самое, но "стандартнее".
Jman писал(а):#define F_CPU your_clock - не знал что должна быть выше всех хеддеров, иначе начинало матюкаться на бибку util/delay.h.
скажите мне, кто учит начинающих этому - я ему плюну в харю! :evil: F_CPU должа быть определена ГЛОБАЛЬНО ДЛЯ ВСЕГО ПРОЕКТА! в старой студии (4.хх) это делается в окошке параметров проекта, в новой - не знаю, но в любом случае эта константа должна фигурировать В КОМАНДНОЙ СТРОКЕ ДЛЯ ЗАПУСКА КОМПИЛЯТОРА в опции -D
Никогда не размещайте ее внутри любого файла вашего проекта!
Спасибо за советы. В седьмой студии не могу пока найти. В 4ой да, есть. Я себе когда из USBasp делал STK500, в исходнике выбирал чип и частоту тактирования.
В седьмой студии _BV подчеркивается как ошибка, но работает.

Прошу проверить одним глазком, код работает. Тикает таймер раз в секунду, через 5 сек. зажигаед СИД, через еще 5 сек. гасит, все это при нажатии кнопки, настройку таймера не буду приводить:

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

ISR (TIMER1_COMPA_vect) 
{
	if (!(PINB &_BV(PINB0)))
	{
		tic_tac++;
		   	if (tic_tac>=5){
				PORTA &=~_BV(PA0);
				}
				if (tic_tac >=10) {
					PORTA |=_BV(PA0);
					}
	}
	else { PORTA |=_BV(PA0); tic_tac=0;}
 TCNT1=0;

}  

Можно ли сделать типо

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

#define on PORTA |=_BV(PA0)  
#define off PORTA &=~_BV(PA0)
Это нормально будет? Как-то оперировать с переменными удобнее чем с битами порта. В принципе то же работает.

Re: AVR studio в вопросах и ответах

Добавлено: Пт фев 12, 2016 11:51:51
HHIMERA
Jman писал(а):
Это нормально будет? Как-то оперировать с переменными удобнее чем с битами порта. В принципе то же работает.
Это будет правильнее, нагляднее и понятнее... чем подобные вредные советы...
рекомендую использовать "стандартный" для avr-gcc макрос _BV(x)
Только нужно писать... не просто on... a LED_ON... например...

Re: AVR studio в вопросах и ответах

Добавлено: Пт фев 12, 2016 12:17:14
ARV
Jman писал(а):Это нормально будет?
нормально, только это будут макросы, а не переменные.

Re: AVR studio в вопросах и ответах

Добавлено: Пт фев 12, 2016 14:49:13
Alexeyslav
Смысл макросов как раз и состоит в том чтобы давать осмысленные названия таким вот маленьким а иногда и не очень маленьким конструкциям.

По сути есть два вида макросов - через директиву DEFINE - определяет однострочные выражения, как самый простой вид и через директиву MACRO/END MACRO - через неё можно определять многострочные макросы с подставляемыми параметрами но надо отдавать себе отчёт когда их используешь что выражения в параметрах этих макросов вычисляются только во время компиляции и заменяются на константы, поэтому там не может быть переменных.
И еще отлаживать работу макросов крайне трудно, поэтому при их составлении надо быть очень внимательным и сразу оговаривать область их применимости и использования.

Re: AVR studio в вопросах и ответах

Добавлено: Пт фев 12, 2016 19:30:40
ARV
Alexeyslav писал(а):По сути есть два вида макросов - через директиву DEFINE - определяет однострочные выражения, как самый простой вид и через директиву MACRO/END MACRO
это вы, часом, не про ассемблер ли говорите? пока что тут речь про Си шла. а в Си чуть-чуть не так: MACRO/END MACRO вообще не существует, а #define позволяет определять и многострочные макросы

Re: AVR studio в вопросах и ответах

Добавлено: Пт фев 12, 2016 21:09:59
Alexeyslav
Это не зависит от языка, этим занимается препроцессор, который о языках ничего не знает.
Дефайном можно ввести выражение на несколько строк, но это несколько неудобно.
Макросами на С никто не занимается потому что практически никогда не нужно потому что все некрасивости аппаратных особенностей можно выделить на уровень HAL, а программу писать уже в нормальных терминах.

Re: AVR studio в вопросах и ответах

Добавлено: Пт фев 12, 2016 21:50:58
axillent
Alexeyslav писал(а):Это не зависит от языка, этим занимается препроцессор, который о языках ничего не знает.
Ничего, что препроцессор часть языка?
#include по вашему ошибочно описывают во всех книгах про Си?
А ведь это тоже директива препроцессора
препроцессор Си стандартный как и сам язык
Про директивы препроцессора не знает компилятор, но компилятор != язык Си
Alexeyslav писал(а): Дефайном можно ввести выражение на несколько строк, но это несколько неудобно.
Если быть корректным, то определение любого дефайна делается в одну строку. Но семантика языка Си (понятная препроцессору) имеет специальный символ \ переноса строки.
То есть в текстовом релакторе это несколько строк, но с точки зрения языка это одна строка
Alexeyslav писал(а):Макросами на С никто не занимается потому что практически никогда не нужно потому что все некрасивости аппаратных особенностей можно выделить на уровень HAL, а программу писать уже в нормальных терминах.
Очень даже занимаются, это удобный гибкий инструмент
А что такое HAL по вашему? Разве он определен в стандарте C99?
Насколько понимаю C99 последний широко признанный стандарт

Re: AVR studio в вопросах и ответах

Добавлено: Пт фев 12, 2016 22:54:26
Alexeyslav
HAL - это лишь уровень абстракции программы, и к языкам он никак не относится и не зависит. Это лишь способ разделения кода в программе на программную логику и аппаратно-зависимый(низкоуровневый).

Выше приведённые примеры
#define on PORTA |=_BV(PA0)
#define off PORTA &=~_BV(PA0)
как раз являются HAL этой программы, где они используются. В самом простом виде.

Препроцессор не работает с программой на семантическом уровне, поэтому ему не важно на каком языке написана программа. Жаль что препроцессор бывает заточен под конкретный компилятор.
Директива INCLUDE тоже никак не зависит от языка.
Директивы по большому счёту не являются языковыми конструкциями, и очень странно если в книжках их смешивают с языком. Вероятно, это очень плохие книги если они допускают такое трактование.

Где-то я читал, что макросы в С просуществовали очень долго, вплоть до нынешних времён и были исключены в препроцессорах высокоуровневых языков вроде C++ и C# за их полной ненадобностью.

Re: AVR studio в вопросах и ответах

Добавлено: Сб фев 13, 2016 00:10:16
axillent
Hardware abstract layer лишь один из возможных уровней абстракции при програмировании
Не понимаю почему ему нужно уделять особое внимание. Если мы говорим в общем про Си, а не в частности про микроконтроллеры

Как это препроцессор не работает на семантическом уровне? Если как минимум он выделяет такие семантические конструкции как комментарии и специальные символы? Другие конструкции ему просто не нужны.
Препроцессор часть языка Си, а не какая то сторонняя вещь

Поясните где в языке С++ отказались от препроцессора? Я конечно изучал этот язык весьма давно, но не слышал, чтобы с тех пор в него вносились такие значимые изменения
Может вы с java путаете?

Re: AVR studio в вопросах и ответах

Добавлено: Сб фев 13, 2016 02:41:25
L.O.D
axillent писал(а):Если как минимум он выделяет такие семантические конструкции как комментарии и специальные символы?
Это не семантические, а синтаксические конструкции. Чуточку другая вещь. То есть, абсолютно.

Re: AVR studio в вопросах и ответах

Добавлено: Сб фев 13, 2016 06:00:53
axillent
https://ru.m.wikipedia.org/wiki/Синтакс ... мирование)
Синтаксис языка описывает «чистый» язык, в то же время семантика приписывает значения (действия) различным синтаксическим конструкциям
Директивы препроцессора это же конкретные действия, то есть семантика языка?
А то, что по символу переноса строки надо строки склеить в одну - это же тоже конкретное действие, а не просто синтаксис.
вот здесь например https://ru.m.wikipedia.org/wiki/Препроцессор_Си утверждается, что препроцессор синтаксиса вообще не касается
По сути в Си мы имеем двух этапную компиляцию.
Сначала препроцессор, потом компилятор. Две составные языка Си
Заметьте, препроцессор вызывается не отдельно, он вызывается самим компилятором и часто встроен в тот же бинарник.
Собственно спор не о семантике и синтаксисе, а о том является ли препроцессор и его директивы частью языка Си. Я убежден, что являются

Re: AVR studio в вопросах и ответах

Добавлено: Сб фев 13, 2016 09:18:07
Alexeyslav
Где я сказал что отказались от препроцессора? я только про макросы говорил.
Препроцессор вообще ничего не касается ни синтаксиса ни семантики. Это просто компилятор для языка, который работает исключительно с текстовыми строками исходника и результатом его работы являются синтаксические и семантические конструкции конкретного языка.

То что разработчики компилятора за одно пишут свой же препроцессор в котором вольны реализовать всё по своему и выкинуть ненужное не отменяет того факта что это две разные сущности. У препроцессора свой синтаксис и семантика не имеющая отношения к основному языку, но поскольку разрабатывается одними и теми же разработчиками они не конфликтуют друг с другом(в языке нет таких же конструкций которые используются препроцессором).

Re: AVR studio в вопросах и ответах

Добавлено: Сб фев 13, 2016 10:31:18
axillent
Alexeyslav вы что то такое намудрили в своем понимании Си
по каким книжкам изучали? интересно где это Си описан без препроцессора
также скажите в каком компиляторе препроцессор "свой" не подчиняющийся стандарту Си?

Re: AVR studio в вопросах и ответах

Добавлено: Сб фев 13, 2016 11:04:19
Alexeyslav
Не надо этих дешёвых трюков, не искажайте мои слова. Препроцессор работает исключительно с исходниками и ни к каким действиям в программе он не приводит, он собственно генерирует сам исходник программы в которой уже появляется и синтаксис и семантика конкретного языка.
Похоже, вы либо прикалываетесь либо не те книжки читаете либо читаете их очень по диагонали.

В некоторых языках препроцессор становится настолько сложным что обзавёлся собственным компилятором.
интересно где это Си описан без препроцессора
Реальность такова, что без директивы INCLUDE написать более менее приличную программу(да даже хелло ворлд!) очень сложно, поэтому в книжках рассматривается ещё и препроцессор, хотя там должны на каждом шагу объяснять что препроцессор и компилятор это разные сущности, хоть уже и не могут друг без дружки существовать.

Re: AVR studio в вопросах и ответах

Добавлено: Сб фев 13, 2016 11:07:22
axillent
я не прикалываюсь
критично отношусь к своим знаниям и реально хотел выяснить действительно ли что то изменилось
но сейчас вижу, что ничего не менялось, а вы полны ошибочных представлений
книжки не привели, видимо не читали и знания ваши поверхностны

это ваш выбор
нет смысла спорить, хотите считайте так
главное, чтобы этим не путали других участников форума

Re: AVR studio в вопросах и ответах

Добавлено: Вс фев 14, 2016 15:12:52
Curandero
Здравствуйте, Котаны! У меня глупый вопрос, какой мобильный девайс себе приобрести под студию? То есть у меня иногда на работе есть немного свободного времени и я мог бы его потратить на освоение МК, но мобильных гаджетов для этого не имею. Куда реально установить студию - планшет/нетбук/ или всё ж ноут необходим, какие минимальные характеристики нужны? Но так как МК для меня останется на уровне хобби, то естественно вопрос цены стоит если не на первом месте, то всё же важен.
П. С. Если у кого имеется опыт установки на подобные девайсы Протеуса, Мультисима - тоже поделитесь своими соображениями.

Re: AVR studio в вопросах и ответах

Добавлено: Вс фев 14, 2016 15:41:54
ARV
Alexeyslav писал(а):Реальность такова, что без директивы INCLUDE написать более менее приличную программу(да даже хелло ворлд!) очень сложно, поэтому в книжках рассматривается ещё и препроцессор, хотя там должны на каждом шагу объяснять что препроцессор и компилятор это разные сущности, хоть уже и не могут друг без дружки существовать.
мозг и печень - это две разные сущности, которые не могут существовать друг без друга. но вместе они входят в ОРГАНИЗМ.
так и здесь: ЯЗЫК СИ состоит из препроцессора и компилятора.

Язык Си отдельно без препроцессора не существует нигде в реальности, если исключить абстрактное теоретизирование (сферический конь в вакууме). Отдельно взятый препроцессор не существует даже в фантазиях теоретиков. Так что спор пора заканчивать, тем более что к теме форума он не имеет никакого отношения.