CodeVision AVR в вопросах и ответах

Обсуждаем контроллеры компании Atmel.
Аватара пользователя
ELcat
Друг Кота
Сообщения: 3258
Зарегистрирован: Вт май 19, 2009 09:27:30
Откуда: Украина

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

Сообщение ELcat »

Сам неоднократно слыхал о пародийности CVAVR. От себя же скажу, что это чрезвычайно вредная среда. Она развращает новичков, тормозит развитие их мозгов и вообще перенаправляет его в другое русло. А всё из-за таких "прелестей" как Wizard и целого ряда не свойственных классической Си операторов. Так же бывалые и многоуважаемые мной люди говаривали, что код, сгенерённый CVAVR, после дизассемблирования чрезвычайно кривой и массивный - он не оптимизирован ни по размеру, ни по скорости исполнения, что для очень даже платной программы не очень хорошо.

С другой стороны CVAVR позволяет в кратчайшие сроки научиться "хоть как-то лабать" на AVR. Пусть при этом и "дарит" вывих мозга с затруднёнными прогнозами по переходу на "более человеческие" компиляторы.
Одним словом всё очень субъективно. Тут уж кому что важнее: "шашечки" или "ехать". :tea:
Vov123
Опытный кот
Сообщения: 804
Зарегистрирован: Чт мар 12, 2009 16:31:05

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

Сообщение Vov123 »

Я чего-то не пойму-начальный код с генерированный в CVAVR не будет скомпилирован в WinAVR или в IARe?.
Мне по барабану на чём писать CVAVR,WinAVR или IAR.Одни и те-же программы для пробы пишу во всех этих средах.Если программа довольно пространна,то в размере кода в выигрыше по компактности за CVAVR,конечно-же это не значит,что лучше.В WinAVR размер кода очень сильно зависит от степени оптимизации,а вот в IARе разница в коде в зависимости от степени оптимизации не сильно велика.
У меня как радиолюбителя-программиста-любителя,полностью отсутствуют комплексы по поводу процев и их сред разработки.
А в промышленности в основном используются промышленные контроллеры,где в основном используется язык лд-диаграмм,который у местных программистов вызывает рвотный рефлекс.
Совесть
Встал на лапы
Сообщения: 106
Зарегистрирован: Пн мар 26, 2012 05:25:06

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

Сообщение Совесть »

ELcat писал(а):Сам неоднократно слыхал о пародийности CVAVR.
А кроме слухов есть что-то еще? Сам в этой среде не работал, а кроме претензий к "PORTA.0" ничего не встречал.
Vov123
Опытный кот
Сообщения: 804
Зарегистрирован: Чт мар 12, 2009 16:31:05

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

Сообщение Vov123 »

Ну "PORTA.0" в CVAVR можно заменить фразой на классическом С, и CVAVR переварит легко.
Я хотел добавить про другое.Сейчас максимально заработать можно работая программистом в среде 1С(Предприятие,бухгалтерия и т.д)А вы видели на каком языке она пишется?Классики С пришли бы в ужас.
Marchello
Встал на лапы
Сообщения: 114
Зарегистрирован: Чт ноя 24, 2011 12:39:13

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

Сообщение Marchello »

Подскажите пожалуйста в CodevisionAVR я смогу прошить МК только программаторами типа STK200+/300, AVR910 или есть какие еще альтернативные варианты! Может под USB есть вариант программатора! требуется прошить Atmega16 в CodevisionAVR а LPT у меня нет на компе!
Аватара пользователя
ELcat
Друг Кота
Сообщения: 3258
Зарегистрирован: Вт май 19, 2009 09:27:30
Откуда: Украина

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

Сообщение ELcat »

Marchello писал(а):Подскажите пожалуйста в CodevisionAVR я смогу прошить МК только программаторами типа STK200+/300, AVR910 или есть какие еще альтернативные варианты! Может под USB есть вариант программатора! требуется прошить Atmega16 в CodevisionAVR а LPT у меня нет на компе!

А AVR910 чем не USB??? Ещё есть AT STK-500. Ещё есть "дудка", но она шьёт из под своей проги.
Аватара пользователя
Apparatchik
Держит паяльник хвостом
Сообщения: 908
Зарегистрирован: Вс май 23, 2010 13:55:42
Откуда: Украина, Александрия

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

Сообщение Apparatchik »

Совесть писал(а):Да человек сам не понимает о чем говорит.
Я нехочу вступать в споры, всеравно каждый останется при своем мнении. Скажу лишь, что с другого компилятора на CVAVR портировать оч. легко и быстро, а вот наоборот нада помучиться.
«И всё-таки она вертится!»
Аватара пользователя
vitalik_1984
Поставщик валерьянки для Кота
Сообщения: 2482
Зарегистрирован: Пт авг 27, 2010 05:57:06
Откуда: Тюмень
Контактная информация:

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

Сообщение vitalik_1984 »

оч. легко и быстро, а вот наоборот нада помучиться.
Это смотря как программа написана, если есть такое

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

 
#define LED_ON PORTB.1=1
//и везде в программе этот фрагмент использован только так
if(anything) LED_ON;  

то вполне легко сменить лишь одну строчку во всей программе.
Аватара пользователя
Apparatchik
Держит паяльник хвостом
Сообщения: 908
Зарегистрирован: Вс май 23, 2010 13:55:42
Откуда: Украина, Александрия

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

Сообщение Apparatchik »

Согласен, но так бывает далеко не всегда.
«И всё-таки она вертится!»
Аватара пользователя
vitalik_1984
Поставщик валерьянки для Кота
Сообщения: 2482
Зарегистрирован: Пт авг 27, 2010 05:57:06
Откуда: Тюмень
Контактная информация:

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

Сообщение vitalik_1984 »

Я бы даже сказал, что среди любителей так бывает очень и очень редко.Поэтому при переносе код из одного компилятора в другой возникают такие утычки.
Vov123
Опытный кот
Сообщения: 804
Зарегистрирован: Чт мар 12, 2009 16:31:05

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

Сообщение Vov123 »

Применение всем известных макросов может свести переделку даже сложных программ к минимуму


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

#define SB(reg, bit)          reg |= (1<<bit)         //установить бит       
#define CB(reg, bit)       reg &= (~(1<<bit))      //сбросить бит
#define IB(reg, bit)          reg ^= (1<<bit)      //инвертировать бит
#define BIS(reg, bit)       ((reg & (1<<bit)) != 0)   //если бит установлен
#define BIC(reg, bit)    ((reg & (1<<bit)) == 0)   //если бит очищен


Кстати и для переделки,например,с AVR на PIC.
pokk
Вымогатель припоя
Сообщения: 574
Зарегистрирован: Вт ноя 02, 2010 17:46:37

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

Сообщение pokk »

Делаю двоично-десятичное преобразования дробных чисел (123.456778) тип float
Для целых чисел сделал а вот с дробными проблема.
И тут нашёл два варианте решения разделить число на целую часть 123 и остаток 456778 вот в таком виде не как не получается.
И второе решение посчитать количество чисел после запятой и потом умножить на 10*n что бы получить число 123456778 вот это как-то не особо выходит.

Как будет правильнее ?
Аватара пользователя
ELcat
Друг Кота
Сообщения: 3258
Зарегистрирован: Вт май 19, 2009 09:27:30
Откуда: Украина

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

Сообщение ELcat »

Я просто умнжал на то количество разрядов, сколько мне нужно. То есть 1 - х10, 2 - х100 и т.д.
Аватара пользователя
vitalik_1984
Поставщик валерьянки для Кота
Сообщения: 2482
Зарегистрирован: Пт авг 27, 2010 05:57:06
Откуда: Тюмень
Контактная информация:

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

Сообщение vitalik_1984 »

Vov123 писал(а):Применение всем известных макросов может свести переделку даже сложных программ к минимуму
----------
Кстати и для переделки,например,с AVR на PIC.
Ага только пользоваться ими в таком виде :

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


 
#define CLEAR(reg, bit)  reg &= (~(1<<bit)) 
#define LED1 {(PORTB,1)}
CLEAR LED1;
 

Тогда надпись CLEAR LED1; в любом месте будет обозначать одно и то же.
Совесть
Встал на лапы
Сообщения: 106
Зарегистрирован: Пн мар 26, 2012 05:25:06

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

Сообщение Совесть »

Что? Ошибку компиляции?
Аватара пользователя
unalex
Мучитель микросхем
Сообщения: 424
Зарегистрирован: Сб авг 25, 2007 22:02:05
Откуда: Германия, Viernheim

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

Сообщение unalex »

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

#define LED PORTB
#define RED 0
#define TOGGLE(reg, bit)  reg ^= (1<<bit)

int main()
{
   TOGGLE(LED, RED);
}
Коктейль "Рекурсивный": 20% спирта, 30% воды, 50% коктейля "Рекурсивный"...
Аватара пользователя
Valek3306
Встал на лапы
Сообщения: 95
Зарегистрирован: Вт авг 03, 2010 22:51:57
Откуда: Санкт-Петербург
Контактная информация:

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

Сообщение Valek3306 »

Добрый вечер! Помогите пожалуйста! Мне надо организовать прием по UART с PC трех чисел от 0 до 255 и распихать эти три числа в три переменные. Передача может произойти в любое время. Контролер Мега8535.
Маленький хакер в подстанцию влез
Перенаправил поток он с АЭС
Клевая мощность два мегаватта,
Быстро горит материнская плата!
Аватара пользователя
Аlex
Модератор
Сообщения: 4614
Зарегистрирован: Чт мар 18, 2010 23:09:57
Откуда: Планета Земля
Контактная информация:

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

Сообщение Аlex »

Пожелания Вы свои высказали, а вот чем помочь - не сказали :roll:

PS: И причём тут CVAVR ? Или эта тема была самой первой в области видимости ? :)
Аватара пользователя
ELcat
Друг Кота
Сообщения: 3258
Зарегистрирован: Вт май 19, 2009 09:27:30
Откуда: Украина

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

Сообщение ELcat »

Включи прерывание по факту приёма посылки UART. В обработчике прерываний отправляй принятый байт в одну из трёх промежуточных временных переменных и делай запуск таймера (если пришёл первый байт) или перезапуск (если второй). По прерыванию таймера (таймаут истёк, а очередная посылка UART так и не пришла) выполни отключение таймера и сброс временных переменных - так сказать переход в исходное состояние на случай обрыва/сбоя передачи. Если все три посылки пришли без сбоя (таймер ни разу не сработал), тогда выключай таймер, значения трёх временных переменных присваивай тем, которые надо установить в случае успешного сеанса приёма данных и переходи в режим ожидания нового сеанса приёма.
Аватара пользователя
Valek3306
Встал на лапы
Сообщения: 95
Зарегистрирован: Вт авг 03, 2010 22:51:57
Откуда: Санкт-Петербург
Контактная информация:

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

Сообщение Valek3306 »

Подскажите, почему такой способ не работает.

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

// USART Receiver interrupt service routine
interrupt [USART_RXC] void usart_rx_isr(void)
{
if(temp == 0){temp = 1; ru = UDR; };
if(temp == 1){temp = 2; gu = UDR; };
if(temp == 2){temp = 0; bu = UDR; };
}

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

Извините за глупый вопрос.
Маленький хакер в подстанцию влез
Перенаправил поток он с АЭС
Клевая мощность два мегаватта,
Быстро горит материнская плата!
Ответить

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