CodeVisionAVR 2.60
03.02.2014, 23:54
|
|
|
Почётный гражданин KAZUS.RUN
Регистрация: 29.10.2012
Сообщений: 2,930
Сказал спасибо: 7
Сказали Спасибо 3,471 раз(а) в 1,771 сообщении(ях)
|
Re: CodeVisionAVR 2.60
Сообщение от olc0267
|
|
А как так получилось? Где вызов функции delay, и возврат из неё? Компилятор слил две функции в одну - вот это оптимизация!
|
Так это же и есть оптимизация.
Сообщение от olc0267
|
Маленький тест.
int volatile a
int a
А вот что сделал CV для обоих вариантов абсолютно одинаково...
2. Какой из компиляторов умнее?
|
Что как бы намекает... у CVAVR все переменные... - volatile, что ли ?
|
|
|
|
03.02.2014, 23:59
|
|
|
Почётный гражданин KAZUS.RUN
Регистрация: 06.08.2008
Адрес: Ярославль
Сообщений: 1,504
Сказал спасибо: 115
Сказали Спасибо 1,314 раз(а) в 548 сообщении(ях)
|
Re: CodeVisionAVR 2.60
Сообщение от Арктур
|
Что как бы намекает... у CVAVR все переменные... - volatile, что ли ?
|
Да похоже на то. А кому от этого хуже? Зато у малоопытных программистов проблем меньше.
|
|
|
|
04.02.2014, 00:04
|
|
|
Почётный гражданин KAZUS.RUN
Регистрация: 29.10.2012
Сообщений: 2,930
Сказал спасибо: 7
Сказали Спасибо 3,471 раз(а) в 1,771 сообщении(ях)
|
Re: CodeVisionAVR 2.60
Редко кто из этих начинающих потом , после CV, может перейти на профессиональный эффективный компилятор.
|
|
|
|
04.02.2014, 00:13
|
|
|
Почётный гражданин KAZUS.RUN
Регистрация: 06.08.2008
Адрес: Ярославль
Сообщений: 1,504
Сказал спасибо: 115
Сказали Спасибо 1,314 раз(а) в 548 сообщении(ях)
|
Re: CodeVisionAVR 2.60
А лично мне это и не надо. Я железячник, а не программист. Программирую нечасто. Если бюджет проекта позволяет, я промышленный панельный компьютер куплю и насую туда проприетарного софта. Если понадобится - несложную программу под винду могу и сам сговнякать.
А AVR - это для меня мелкие шабашки, да для себя, от скуки.
Существует же бейсик, после которого, как говорят, люди на Си писать уже не могут.
Последний раз редактировалось olc0267; 04.02.2014 в 00:16.
|
|
|
|
04.02.2014, 00:20
|
|
|
Почётный гражданин KAZUS.RUN
Регистрация: 29.10.2012
Сообщений: 2,930
Сказал спасибо: 7
Сказали Спасибо 3,471 раз(а) в 1,771 сообщении(ях)
|
Re: CodeVisionAVR 2.60
Ситуация такая, что почти все подсевшие на CV, Flowcode..., рьяно защищают его.
Причём, объясняют так - если лично их это устраивает, то значит - устроит всех!
|
|
|
|
04.02.2014, 01:27
|
|
|
Гражданин KAZUS.RUN
Регистрация: 16.03.2011
Сообщений: 486
Сказал спасибо: 8
Сказали Спасибо 131 раз(а) в 116 сообщении(ях)
|
Re: CodeVisionAVR 2.60
Сообщение от olc0267
|
|
А какие задачи собираетесь выполнять с такими числами?
|
Да ладно вам - АВР такой CPU как и другие, только медленный по нашему времени. И 8-битный к тому же. И что с того?
Сообщение от olc0267
|
|
Если подключить внешний АЦП, например, DS18B20, так у него разрядность 12бит и интерфейс настолько медленный, что нет необходимости очень быстро считать floating point.
|
Flash память объёмом до 256кБ позволяет много чего напихать туда. И чем ядро быстрее просчитает float тем лучше. Во всех компиляторах для АВР поддержка float есть. Почему бы и не использовать эти типы?
Сообщение от olc0267
|
|
16-битного целочисленного представления для решения почти любой задачи на AVR должно хватать.
|
Считаю во float расстояния между двуми точками пришедшими от GPS-приёмника. Можно в целых конечно. Но зачем?
|
|
|
|
04.02.2014, 08:59
|
|
|
Почётный гражданин KAZUS.RUN
Регистрация: 06.08.2008
Адрес: Ярославль
Сообщений: 1,504
Сказал спасибо: 115
Сказали Спасибо 1,314 раз(а) в 548 сообщении(ях)
|
Re: CodeVisionAVR 2.60
Я не защищаю CV, и не заставляю никого им пользоваться.
Поставил сейчас последнюю демо-версию V3.08.
Теперь в меню появился такой пункт : "Export to CodeVision AVR Extension for Atmel Studio". Короче, есть возможность по-быстрому накидать проект в CV, а компилировать в GCC. Тем более, что CV всё равно использует отладчик от Atmel Studio.
|
|
|
|
04.02.2014, 09:43
|
|
|
Почётный гражданин KAZUS.RUN
Регистрация: 06.08.2008
Адрес: Ярославль
Сообщений: 1,504
Сказал спасибо: 115
Сказали Спасибо 1,314 раз(а) в 548 сообщении(ях)
|
Re: CodeVisionAVR 2.60
Сообщение от _Артём_
|
Да ладно вам - АВР такой CPU как и другие, только медленный по нашему времени. И 8-битный к тому же. И что с того?
Flash память объёмом до 256кБ позволяет много чего напихать туда. И чем ядро быстрее просчитает float тем лучше. Во всех компиляторах для АВР поддержка float есть. Почему бы и не использовать эти типы?
Считаю во float расстояния между двуми точками пришедшими от GPS-приёмника. Можно в целых конечно. Но зачем?
|
Так Вы определитесь, какие вычисления Вам нужны - быстрые, или точные?
Если и то и другое, то AVR - явно не та платформа.
ЗЫ. Блин, поторопился я радоваться. Расширение Atmel Studio для CV всего-навсего интегрирует CV вовнутрь себя и использует не GCC, а компилятор CV.
Последний раз редактировалось olc0267; 04.02.2014 в 11:54.
|
|
|
|
04.02.2014, 12:12
|
|
|
Прописка
Регистрация: 28.04.2008
Сообщений: 141
Сказал спасибо: 11
Сказали Спасибо 18 раз(а) в 9 сообщении(ях)
|
Re: CodeVisionAVR 2.60
Господа подскажите что не так, вот код:
Atmega8
Написано на WinAVR
int main (void)
{
DDRD = 0xFF;
DDRB |= (1 ‹‹ PB0)|(1 ‹‹ PB1)|(1 ‹‹ PB2)|(1 ‹‹ PB3);
PORTD = 0x00;
PORTB = 0x00;
DDRC = 0x00;
TIMSK |= (1 ‹‹ TOIE2); // разрешение прерывания по таймеру2
TCCR2 |= (1 ‹‹ CS21); //предделитель на 8
ADCSRA |= (1 ‹‹ ADEN) // разрешение АЦП
|(1 ‹‹ ADSC) // запуск преобразования
|(1 ‹‹ ADFR) // непрерывный режим работы АЦП
|(1 ‹‹ ADPS2)|(1 ‹‹ ADPS1)|(0 ‹‹ ADPS0) // предделитель на 64 (частота АЦП 125kHz)
|(1 ‹‹ ADIE); // разрешение прерывания
ADMUX |= (1 ‹‹ REFS1)|(1 ‹‹ REFS0) // внутренний ИОН 2,56V
|(0 ‹‹ MUX3)|(0 ‹‹ MUX2)|(0 ‹‹ MUX1)|(0 ‹‹ MUX0); // вход ADC0
_delay_ms(50);
while(1)
{
ADCSRA |= (1 ‹‹ ADEN) // разрешение АЦП
|(1 ‹‹ ADSC) // запуск преобразования
|(1 ‹‹ ADFR) // непрерывный режим работы АЦП
|(1 ‹‹ ADPS2)|(1 ‹‹ ADPS1)|(0 ‹‹ ADPS0) // предделитель на 64 (частота АЦП 125kHz)
|(1 ‹‹ ADIE); // разрешение прерывания
ADMUX |= (1 ‹‹ REFS1)|(1 ‹‹ REFS0) // внутренний ИОН 2,56V
|(0 ‹‹ MUX3)|(0 ‹‹ MUX2)|(0 ‹‹ MUX1)|(0 ‹‹ MUX0); // вход ADC0
sei(); //глобально разрешаем прерывания
_delay_ms(50);
for (i=0; i‹100; i=i+1) //Цикл
{
if (adc_counter › 300) // вычисляем среднее значение АЦП0
{
display = value/adc_counter;
adc_counter = 0;
value = 0;
}
_delay_ms(50);
} // конец цикла
cli(); // Запрет глобального прерывания
ADCSRA |= (1 ‹‹ ADEN) // разрешение АЦП
|(1 ‹‹ ADSC) // запуск преобразования
|(1 ‹‹ ADFR) // непрерывный режим работы АЦП
|(1 ‹‹ ADPS2)|(1 ‹‹ ADPS1)|(0 ‹‹ ADPS0) // предделитель на 64 (частота АЦП 125kHz)
|(1 ‹‹ ADIE); // разрешение прерывания
ADMUX |= (1 ‹‹ REFS1)|(1 ‹‹ REFS0) // внутренний ИОН 2,56V
|(0 ‹‹ MUX3)|(0 ‹‹ MUX2)|(0 ‹‹ MUX1)|(1 ‹‹ MUX0); // вход ADC1
sei(); //глобально разрешаем прерывания
_delay_ms(50);
for (i=0; i‹100; i=i+1) //Цикл
{
if (adc_counter › 300) // вычисляем среднее значение АЦП1
{
display = value/adc_counter;
adc_counter = 0;
value = 0;
}
_delay_ms(50);
}
cli(); // Запрет глобального прерывания
}
}
суть данного кода такова, вычисляем среднее значение АЦП0 и определённое время выводим его на индикацию, по завершении цикла переходим на АЦП1 и выводим на индикацию и так по переменно.
Проблема в том, что по переменно работать не желает.
Что я сделал не так?
Последний раз редактировалось vgtmaster; 04.02.2014 в 12:16.
|
|
|
|
04.02.2014, 13:10
|
|
|
Почётный гражданин KAZUS.RUN
Регистрация: 19.08.2006
Адрес: Львов
Сообщений: 1,613
Сказал спасибо: 65
Сказали Спасибо 315 раз(а) в 264 сообщении(ях)
|
Re: CodeVisionAVR 2.60
Сообщение от vgtmaster
|
Господа подскажите что не так, вот код:
Atmega8
Написано на WinAVR
|
Код:
|
int main (void)
{
DDRD = 0xFF;
DDRB |= (1 ‹‹ PB0)|(1 ‹‹ PB1)|(1 ‹‹ PB2)|(1 ‹‹ PB3);
PORTD = 0x00;
PORTB = 0x00;
DDRC = 0x00;
TIMSK |= (1 ‹‹ TOIE2); // разрешение прерывания по таймеру2
TCCR2 |= (1 ‹‹ CS21); //предделитель на 8
ADCSRA |= (1 ‹‹ ADEN) // разрешение АЦП
|(1 ‹‹ ADSC) // запуск преобразования
|(1 ‹‹ ADFR) // непрерывный режим работы АЦП
|(1 ‹‹ ADPS2)|(1 ‹‹ ADPS1)|(0 ‹‹ ADPS0) // предделитель на 64 (частота АЦП 125kHz)
|(1 ‹‹ ADIE); // разрешение прерывания
ADMUX |= (1 ‹‹ REFS1)|(1 ‹‹ REFS0) // внутренний ИОН 2,56V
|(0 ‹‹ MUX3)|(0 ‹‹ MUX2)|(0 ‹‹ MUX1)|(0 ‹‹ MUX0); // вход ADC0
_delay_ms(50);
while(1)
{
ADCSRA |= (1 ‹‹ ADEN) // разрешение АЦП
|(1 ‹‹ ADSC) // запуск преобразования
|(1 ‹‹ ADFR) // непрерывный режим работы АЦП
|(1 ‹‹ ADPS2)|(1 ‹‹ ADPS1)|(0 ‹‹ ADPS0) // предделитель на 64 (частота АЦП 125kHz)
|(1 ‹‹ ADIE); // разрешение прерывания
ADMUX |= (1 ‹‹ REFS1)|(1 ‹‹ REFS0) // внутренний ИОН 2,56V
|(0 ‹‹ MUX3)|(0 ‹‹ MUX2)|(0 ‹‹ MUX1)|(0 ‹‹ MUX0); // вход ADC0
sei(); //глобально разрешаем прерывания
_delay_ms(50);
for (i=0; i‹100; i=i+1) //Цикл
{
if (adc_counter › 300) // вычисляем среднее значение АЦП0
{
display = value/adc_counter;
adc_counter = 0;
value = 0;
}
_delay_ms(50);
} // конец цикла
cli(); // Запрет глобального прерывания
ADCSRA |= (1 ‹‹ ADEN) // разрешение АЦП
|(1 ‹‹ ADSC) // запуск преобразования
|(1 ‹‹ ADFR) // непрерывный режим работы АЦП
|(1 ‹‹ ADPS2)|(1 ‹‹ ADPS1)|(0 ‹‹ ADPS0) // предделитель на 64 (частота АЦП 125kHz)
|(1 ‹‹ ADIE); // разрешение прерывания
ADMUX |= (1 ‹‹ REFS1)|(1 ‹‹ REFS0) // внутренний ИОН 2,56V
|(0 ‹‹ MUX3)|(0 ‹‹ MUX2)|(0 ‹‹ MUX1)|(1 ‹‹ MUX0); // вход ADC1
sei(); //глобально разрешаем прерывания
_delay_ms(50);
for (i=0; i‹100; i=i+1) //Цикл
{
if (adc_counter › 300) // вычисляем среднее значение АЦП1
{
display = value/adc_counter;
adc_counter = 0;
value = 0;
}
_delay_ms(50);
}
cli(); // Запрет глобального прерывания
}
} |
суть данного кода такова, вычисляем среднее значение АЦП0 и определённое время выводим его на индикацию, по завершении цикла переходим на АЦП1 и выводим на индикацию и так по переменно.
Проблема в том, что по переменно работать не желает.
Что я сделал не так?
|
Да все не так.
Ваша проблема на поверхности. Вы ее легко устраните сами, если:
1. Начнете применять тег ‹code›. Облегчите видение программы в первую очередь себе. И другим тоже.
2. Уйдете от линейного написания программы и перейдете к функциям. Внутри функции проще и легче найти ошибку, нежели в многократно растиражированных фрагментах линейного кода.
3. Разберетесь с прерываниями. Или уйдете от них. Или покажете всем, что у вас творится в обработчике.
Успехов.
__________________
С уважением,
Vic / ut1wpr
Последний раз редактировалось ut1wpr; 04.02.2014 в 13:12.
|
|
|
|
Ваши права в разделе
|
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения
HTML код Выкл.
|
|
|
Часовой пояс GMT +4, время: 05:56.
|
|