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

Обсуждаем контроллеры компании Atmel.
kras
Опытный кот
Сообщения: 782
Зарегистрирован: Вт апр 26, 2011 18:37:06

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

Сообщение kras »

AlexFisher, а не получилось. Правда проект находится в папке с русским названием. Но в пустом окне открыл cof файл - все, он открылся, данные, а больше ничего.
На практике можно не успеть сделать того, что можно хорошо обосновать в теории. Но без практики теория может отдаляться от нее, и когда они встретятся снова - не узнает даже неприкосновенное шампанское профессора в лаборатории. Моя практика: robofeya.ru
Реклама
Аватара пользователя
vitalik_1984
Поставщик валерьянки для Кота
Сообщения: 2482
Зарегистрирован: Пт авг 27, 2010 05:57:06
Откуда: Тюмень
Контактная информация:

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

Сообщение vitalik_1984 »

Студия нормально принимает русские названия файлов при симуляции, я пробовал все запускается после code vision AVR.Что конкретно не получилось?Запуск нажимали?
И что значит данные и все?
В поисках истины человек развивается.
Реклама
Аватара пользователя
AlexFisher
Мучитель микросхем
Сообщения: 493
Зарегистрирован: Вт апр 21, 2009 13:31:27
Откуда: Санкт-Петербург
Контактная информация:

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

Сообщение AlexFisher »

kras писал(а):AlexFisher, а не получилось. Правда проект находится в папке с русским названием. Но в пустом окне открыл cof файл - все, он открылся, данные, а больше ничего.
Почитайте ветку про студию, там наверняка написано, как ей пользоваться ;)
[i]Да здравствует всё то, благодаря чему мы не смотря ни на что![/i]
Аватара пользователя
rs39
Открыл глаза
Сообщения: 53
Зарегистрирован: Сб май 07, 2011 14:35:24
Откуда: Россия

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

Сообщение rs39 »

within писал(а):Ребята, как установить разрешение в 9 бит для DS18b20 в стандартной библиотеке?
Произвести инициализацию датчика

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

ds18b20_init(0,0,0,DS18B20_9BIT_RES)
Реклама
Эиком - электронные компоненты и радиодетали
pokk
Вымогатель припоя
Сообщения: 574
Зарегистрирован: Вт ноя 02, 2010 17:46:37

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

Сообщение pokk »

Подскажите все ли регистры использует CodeVision AVR ? можно ли как-нибудь запретить использовать парочку ?=)
просто если делать вставку то что бы не получилось наложений. Блин пока писал вопрос уже почти придумал ответ (в ставке запихать этот регистр в стек а потом вытащить)
И ещё не большой вопросик char arrey[6]="HELLO!" где он хранит такой массив ?
Реклама
Аватара пользователя
U235
Встал на лапы
Сообщения: 135
Зарегистрирован: Вт фев 21, 2012 20:42:26
Откуда: Санкт-Петербург, Россия, Земля

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

Сообщение U235 »

pokk писал(а):...небольшой вопросик char arrey[6]="HELLO!" где он хранит такой массив ?
Если массив определён вне тела какой-нибудь функции - то в области глобальных переменных.
Если массив внутри функции - то при вызове функции этот массив копируется из памяти программ в стек данных.
А из наших труб идет необычный дым. Стой! Опасная зона! Работа мозга!...
Реклама
Аватара пользователя
avreal
Опытный кот
Сообщения: 842
Зарегистрирован: Чт дек 31, 2009 19:27:45
Откуда: Бровари, Україна
Контактная информация:

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

Сообщение avreal »

pokk писал(а):char arrey[6]="HELLO!"
Ответ на возможный будущий вопрос "а почему оно после моей строки разный мусор песатает".
В этом массиве нет места для завершающего нуля, который ограничивает длину С-шной строки.
Программа молча скомпилируется, всё по стандарту, но нуля в конце не будет. Будет он или так:

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

char str[]="HELLO!";
Тут компилятор сам орпеделит нужный размер массива в 7 элементов.
Или нужно зарезервировать больше (может, потом сюда другие строки будут писаться, через этот буфер вся печать).

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

char str[10]="HELLO!";
Тут будет после символов строки записано 4 нуля.
Лень в виде мании величия: «ты гений, зачем стараться?». В виде комплекса: «всё равно не выйдет, зачем упираться?». Как логика: «если достаточно, зачем знать и уметь больше?». Цель одна: остановить. Не любит тепло работающих мышц и шум работающего мозга.
pokk
Вымогатель припоя
Сообщения: 574
Зарегистрирован: Вт ноя 02, 2010 17:46:37

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

Сообщение pokk »

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

Если массив внутри функции - то при вызове функции этот массив копируется из памяти программ в стек данных.
Т.е во flash памяти МК ?
В этом массиве нет места для завершающего нуля, который ограничивает длину С-шной строки.
А как этот ноль ограничивает ?
Я просто сделал так, но видать можно как-то лучше.сравнивать не индекс а элемент массива на есть ли там нулевой? и как ноль выйти.Но ноль же может быть не обязательно последним.

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

interrupt [USART0_TXC] void USART_TXC(void)
{
UDR0 = arrey[index];
index++; 
if(index>4){index=0;} 
}
Аватара пользователя
avreal
Опытный кот
Сообщения: 842
Зарегистрирован: Чт дек 31, 2009 19:27:45
Откуда: Бровари, Україна
Контактная информация:

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

Сообщение avreal »

В тексте нули не встречаются. В С принято строку ограничивать нулём.
Если у Вас все строки по 4 символа, то можно и так, но для того, чтобы работать в С со строками произвольной длины, удобнее ориентироваться на 0-ограничитель. Вся строковая библиотека и стандартный ввод/вывод на этом стоит.

Хотя именно для буфера UART по прерываниям надо отдельно смотреть, там обычно лучше кольцевой буфер (FIFO). А вот уже функции, забрасывающие в него данные, пусть работают с 0-ограничителем.
Лень в виде мании величия: «ты гений, зачем стараться?». В виде комплекса: «всё равно не выйдет, зачем упираться?». Как логика: «если достаточно, зачем знать и уметь больше?». Цель одна: остановить. Не любит тепло работающих мышц и шум работающего мозга.
Аватара пользователя
AlexFisher
Мучитель микросхем
Сообщения: 493
Зарегистрирован: Вт апр 21, 2009 13:31:27
Откуда: Санкт-Петербург
Контактная информация:

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

Сообщение AlexFisher »

Не забывайте ставить в конце строки нулевой символ и избежите кучи проблем:

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

char[]="Messaga\0";
[i]Да здравствует всё то, благодаря чему мы не смотря ни на что![/i]
Аватара пользователя
avreal
Опытный кот
Сообщения: 842
Зарегистрирован: Чт дек 31, 2009 19:27:45
Откуда: Бровари, Україна
Контактная информация:

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

Сообщение avreal »

Зачем?
В конце строкового литерала завершающий 0 присутствует всегда. Его же добавляют и ассемблерные инструкции .string или .asciiz (в тех ассемблерах, где они есть).
Единственное место, когда он молча отбрасывается, это когда задан фиксированный размер массива и при инициализации массива использован литерал, у которого все символы влазят, а 0-терминатор не влазит.
Если размер массива не указан, то он будет включать терминатор, если указан, но большего размера, то терминатор тоже будет на месте.

Единственный случай, когда нужно вручную указывать в строке символ '\0', это работа с массвами строк, передаваемых как одна строка, через указатель char*
Например, так:

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

char str3[] = "Тут мы передаём\0три строки\0Это третья\0"
В конце литерала будет два нуля, один «наш», один автоматически добавляется. Именно два нуля подряд являются ограничителем массива.
Соответственно, если в такое место нужно передать массив, состоящий из одной строки, то надо в конце вручную добавить:

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

char str1[] = "Тут мы передаём одну строку\0"
Такая передеча параметров встречается в WinAPI, есть библиотечка для работы с такими массивами.

Но «чуть менее, чем везде» вручную вписывать \0 не нужно.
Лень в виде мании величия: «ты гений, зачем стараться?». В виде комплекса: «всё равно не выйдет, зачем упираться?». Как логика: «если достаточно, зачем знать и уметь больше?». Цель одна: остановить. Не любит тепло работающих мышц и шум работающего мозга.
Аватара пользователя
AlexFisher
Мучитель микросхем
Сообщения: 493
Зарегистрирован: Вт апр 21, 2009 13:31:27
Откуда: Санкт-Петербург
Контактная информация:

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

Сообщение AlexFisher »

Не поленился проверить. Был не прав. Действительно, компилятор добавляет нули сам. И для char[], и для char*.
[i]Да здравствует всё то, благодаря чему мы не смотря ни на что![/i]
Аватара пользователя
isx
Поставщик валерьянки для Кота
Сообщения: 2316
Зарегистрирован: Вс июн 26, 2011 20:03:21

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

Сообщение isx »

Вечер добрый :)
Как всегда , беда приходит оттуда, откуда её не ждёшь :)
Сидел писал довольно не простой код, дописал и решил проверить. Начал компилировать, а он мне "ФИГА!". Версия Evaluation в CVAVR 2.05 не даёт откомпилить. Подскажите пожалуйста, на какой более раней версии можно откомпилить код без несоответствия версиями и возможно ли это вообще?
Аватара пользователя
FreshMan
Друг Кота
Сообщения: 6296
Зарегистрирован: Пн ноя 22, 2010 00:57:15
Откуда: Ukraine

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

Сообщение FreshMan »

юзаю прогу версии 1.25.9 Professional т.к. она с таблеткой и подключает все библиотеки
но вот довольно часто, при стирании камня выскакивает такое сообщение
http://4put.ru/view-max-picture.php?id=1210764
следствием чего это может быть ?
Tell Me The Truth
Аватара пользователя
isx
Поставщик валерьянки для Кота
Сообщения: 2316
Зарегистрирован: Вс июн 26, 2011 20:03:21

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

Сообщение isx »

Поставил CodeVisionAVR V2.05.3 отсюда (http://www.torrentino.com/torrents/819706).
Всё работает и компилит без проблем :)
sergnestor
Родился
Сообщения: 8
Зарегистрирован: Пт фев 03, 2012 12:30:30

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

Сообщение sergnestor »

Доброе время суток. Не знал куда написать и решил что здесь подойдет. Помогите разрулить ситуацию. Есть две проги, с виду одинаковые, одна для TINY2313, вторая для MEGA16, контроллеры отвечают на запросы ПЛК тупо посылая принятые 4 байта по UART, среди которых попадаются 0x00, так вот в чем собственно дело - от тиньки ответ принимается правильно с нулями, а от меги вместо нулей принимаются 0xC0 (иногда редко 0xE0), отдельно все устройства работают как надо, проверял терминальными прогами на компе. Сперва столкнулся с этим на меге и тогда решил на удачу попробовать тиньку. Какие предположения?
sergnestor
Родился
Сообщения: 8
Зарегистрирован: Пт фев 03, 2012 12:30:30

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

Сообщение sergnestor »

Проблема решена, связь была на скорости 9600, поднял до 19200 и всё нормализовалось, однако интересно почему различия на одной скорости между мегой и тинькой.
pokk
Вымогатель припоя
Сообщения: 574
Зарегистрирован: Вт ноя 02, 2010 17:46:37

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

Сообщение pokk »

Вот к примеру такой код:

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

unsigned char x;
unsigned char y;
x=1;
y=3;
я так понимаю переменные x,y будут хранится в ОЗУ но как именно. Первая переменная x запишет в первую ячейку 1 а после 7 нулей а дальше переменная y пойдёт займёт 2 ячейки и 6 нулей ?
Аватара пользователя
Gudd-Head
Друг Кота
Сообщения: 20092
Зарегистрирован: Чт сен 18, 2008 12:27:21
Откуда: Столица Мира Санкт-Петербург

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

Сообщение Gudd-Head »

pokk писал(а):Первая переменная x запишет в первую ячейку 1 а после 7 нулей а дальше переменная y пойдёт займёт 2 ячейки и 6 нулей ?
Скорее 7 нулей и после одну "1" для х и 6 нулей и две "1" для у. Как это дело компилятор расположит в ОЗУ я не знаю.
[ Всё дело не столько в вашей глупости, сколько в моей гениальности ] [ Правильно заданный вопрос содержит в себе половину ответа ]
pokk
Вымогатель припоя
Сообщения: 574
Зарегистрирован: Вт ноя 02, 2010 17:46:37

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

Сообщение pokk »

И ещё не большой вопросик.
как можно работать отдельно с битами в регистрах настроек что бы другие биты не менялись
к примеру

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

ADCSRA=(0<<ADEN) | (0<<ADSC) | (0<<ADFR) | (0<<ADIF) | (1<<ADIE) | (1<<ADPS2) | (1<<ADPS1) | (1<<ADPS0);

мне тут только надо изменить ADEN а остальные оставить так как есть.
т.е так

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

ADCSRA=(1<<ADEN) | (0<<ADSC) | (0<<ADFR) | (0<<ADIF) | (1<<ADIE) | (1<<ADPS2) | (1<<ADPS1) | (1<<ADPS0);

но постоянное такую длинную строчку писать не удобно
как её сократить можно ?
сделал так не работает.

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

ADCSRA|=(0<<ADEN)
Ответить

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