CodeVision AVR в вопросах и ответах
Re: CodeVision AVR в вопросах и ответах
AlexFisher, а не получилось. Правда проект находится в папке с русским названием. Но в пустом окне открыл cof файл - все, он открылся, данные, а больше ничего.
На практике можно не успеть сделать того, что можно хорошо обосновать в теории. Но без практики теория может отдаляться от нее, и когда они встретятся снова - не узнает даже неприкосновенное шампанское профессора в лаборатории. Моя практика: robofeya.ru
- Реклама
- vitalik_1984
- Поставщик валерьянки для Кота
- Сообщения: 2482
- Зарегистрирован: Пт авг 27, 2010 05:57:06
- Откуда: Тюмень
- Контактная информация:
Re: CodeVision AVR в вопросах и ответах
Студия нормально принимает русские названия файлов при симуляции, я пробовал все запускается после code vision AVR.Что конкретно не получилось?Запуск нажимали?
И что значит данные и все?
И что значит данные и все?
В поисках истины человек развивается.
- AlexFisher
- Мучитель микросхем
- Сообщения: 493
- Зарегистрирован: Вт апр 21, 2009 13:31:27
- Откуда: Санкт-Петербург
- Контактная информация:
Re: CodeVision AVR в вопросах и ответах
Почитайте ветку про студию, там наверняка написано, как ей пользоватьсяkras писал(а):AlexFisher, а не получилось. Правда проект находится в папке с русским названием. Но в пустом окне открыл cof файл - все, он открылся, данные, а больше ничего.
[i]Да здравствует всё то, благодаря чему мы не смотря ни на что![/i]
Re: CodeVision AVR в вопросах и ответах
Произвести инициализацию датчикаwithin писал(а):Ребята, как установить разрешение в 9 бит для DS18b20 в стандартной библиотеке?
Код: Выделить всё
ds18b20_init(0,0,0,DS18B20_9BIT_RES)Re: CodeVision AVR в вопросах и ответах
Подскажите все ли регистры использует CodeVision AVR ? можно ли как-нибудь запретить использовать парочку ?=)
просто если делать вставку то что бы не получилось наложений. Блин пока писал вопрос уже почти придумал ответ (в ставке запихать этот регистр в стек а потом вытащить)
И ещё не большой вопросик char arrey[6]="HELLO!" где он хранит такой массив ?
просто если делать вставку то что бы не получилось наложений. Блин пока писал вопрос уже почти придумал ответ (в ставке запихать этот регистр в стек а потом вытащить)
И ещё не большой вопросик char arrey[6]="HELLO!" где он хранит такой массив ?
- Реклама
- U235
- Встал на лапы
- Сообщения: 135
- Зарегистрирован: Вт фев 21, 2012 20:42:26
- Откуда: Санкт-Петербург, Россия, Земля
Re: CodeVision AVR в вопросах и ответах
Если массив определён вне тела какой-нибудь функции - то в области глобальных переменных.pokk писал(а):...небольшой вопросик char arrey[6]="HELLO!" где он хранит такой массив ?
Если массив внутри функции - то при вызове функции этот массив копируется из памяти программ в стек данных.
А из наших труб идет необычный дым. Стой! Опасная зона! Работа мозга!...
- avreal
- Опытный кот
- Сообщения: 842
- Зарегистрирован: Чт дек 31, 2009 19:27:45
- Откуда: Бровари, Україна
- Контактная информация:
Re: CodeVision AVR в вопросах и ответах
Ответ на возможный будущий вопрос "а почему оно после моей строки разный мусор песатает".pokk писал(а):char arrey[6]="HELLO!"
В этом массиве нет места для завершающего нуля, который ограничивает длину С-шной строки.
Программа молча скомпилируется, всё по стандарту, но нуля в конце не будет. Будет он или так:
Код: Выделить всё
char str[]="HELLO!";Или нужно зарезервировать больше (может, потом сюда другие строки будут писаться, через этот буфер вся печать).
Код: Выделить всё
char str[10]="HELLO!";Лень в виде мании величия: «ты гений, зачем стараться?». В виде комплекса: «всё равно не выйдет, зачем упираться?». Как логика: «если достаточно, зачем знать и уметь больше?». Цель одна: остановить. Не любит тепло работающих мышц и шум работающего мозга.
Re: CodeVision AVR в вопросах и ответах
Код: Выделить всё
Если массив внутри функции - то при вызове функции этот массив копируется из памяти программ в стек данных.А как этот ноль ограничивает ?В этом массиве нет места для завершающего нуля, который ограничивает длину С-шной строки.
Я просто сделал так, но видать можно как-то лучше.сравнивать не индекс а элемент массива на есть ли там нулевой? и как ноль выйти.Но ноль же может быть не обязательно последним.
Код: Выделить всё
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 в вопросах и ответах
В тексте нули не встречаются. В С принято строку ограничивать нулём.
Если у Вас все строки по 4 символа, то можно и так, но для того, чтобы работать в С со строками произвольной длины, удобнее ориентироваться на 0-ограничитель. Вся строковая библиотека и стандартный ввод/вывод на этом стоит.
Хотя именно для буфера UART по прерываниям надо отдельно смотреть, там обычно лучше кольцевой буфер (FIFO). А вот уже функции, забрасывающие в него данные, пусть работают с 0-ограничителем.
Если у Вас все строки по 4 символа, то можно и так, но для того, чтобы работать в С со строками произвольной длины, удобнее ориентироваться на 0-ограничитель. Вся строковая библиотека и стандартный ввод/вывод на этом стоит.
Хотя именно для буфера UART по прерываниям надо отдельно смотреть, там обычно лучше кольцевой буфер (FIFO). А вот уже функции, забрасывающие в него данные, пусть работают с 0-ограничителем.
Лень в виде мании величия: «ты гений, зачем стараться?». В виде комплекса: «всё равно не выйдет, зачем упираться?». Как логика: «если достаточно, зачем знать и уметь больше?». Цель одна: остановить. Не любит тепло работающих мышц и шум работающего мозга.
- AlexFisher
- Мучитель микросхем
- Сообщения: 493
- Зарегистрирован: Вт апр 21, 2009 13:31:27
- Откуда: Санкт-Петербург
- Контактная информация:
Re: CodeVision AVR в вопросах и ответах
Не забывайте ставить в конце строки нулевой символ и избежите кучи проблем:
Код: Выделить всё
char[]="Messaga\0";[i]Да здравствует всё то, благодаря чему мы не смотря ни на что![/i]
- avreal
- Опытный кот
- Сообщения: 842
- Зарегистрирован: Чт дек 31, 2009 19:27:45
- Откуда: Бровари, Україна
- Контактная информация:
Re: CodeVision AVR в вопросах и ответах
Зачем?
В конце строкового литерала завершающий 0 присутствует всегда. Его же добавляют и ассемблерные инструкции .string или .asciiz (в тех ассемблерах, где они есть).
Единственное место, когда он молча отбрасывается, это когда задан фиксированный размер массива и при инициализации массива использован литерал, у которого все символы влазят, а 0-терминатор не влазит.
Если размер массива не указан, то он будет включать терминатор, если указан, но большего размера, то терминатор тоже будет на месте.
Единственный случай, когда нужно вручную указывать в строке символ '\0', это работа с массвами строк, передаваемых как одна строка, через указатель char*
Например, так:В конце литерала будет два нуля, один «наш», один автоматически добавляется. Именно два нуля подряд являются ограничителем массива.
Соответственно, если в такое место нужно передать массив, состоящий из одной строки, то надо в конце вручную добавить:Такая передеча параметров встречается в WinAPI, есть библиотечка для работы с такими массивами.
Но «чуть менее, чем везде» вручную вписывать \0 не нужно.
В конце строкового литерала завершающий 0 присутствует всегда. Его же добавляют и ассемблерные инструкции .string или .asciiz (в тех ассемблерах, где они есть).
Единственное место, когда он молча отбрасывается, это когда задан фиксированный размер массива и при инициализации массива использован литерал, у которого все символы влазят, а 0-терминатор не влазит.
Если размер массива не указан, то он будет включать терминатор, если указан, но большего размера, то терминатор тоже будет на месте.
Единственный случай, когда нужно вручную указывать в строке символ '\0', это работа с массвами строк, передаваемых как одна строка, через указатель char*
Например, так:
Код: Выделить всё
char str3[] = "Тут мы передаём\0три строки\0Это третья\0"Соответственно, если в такое место нужно передать массив, состоящий из одной строки, то надо в конце вручную добавить:
Код: Выделить всё
char str1[] = "Тут мы передаём одну строку\0"Но «чуть менее, чем везде» вручную вписывать \0 не нужно.
Лень в виде мании величия: «ты гений, зачем стараться?». В виде комплекса: «всё равно не выйдет, зачем упираться?». Как логика: «если достаточно, зачем знать и уметь больше?». Цель одна: остановить. Не любит тепло работающих мышц и шум работающего мозга.
- AlexFisher
- Мучитель микросхем
- Сообщения: 493
- Зарегистрирован: Вт апр 21, 2009 13:31:27
- Откуда: Санкт-Петербург
- Контактная информация:
Re: CodeVision AVR в вопросах и ответах
Не поленился проверить. Был не прав. Действительно, компилятор добавляет нули сам. И для char[], и для char*.
[i]Да здравствует всё то, благодаря чему мы не смотря ни на что![/i]
Re: CodeVision AVR в вопросах и ответах
Вечер добрый
Как всегда , беда приходит оттуда, откуда её не ждёшь
Сидел писал довольно не простой код, дописал и решил проверить. Начал компилировать, а он мне "ФИГА!". Версия Evaluation в CVAVR 2.05 не даёт откомпилить. Подскажите пожалуйста, на какой более раней версии можно откомпилить код без несоответствия версиями и возможно ли это вообще?
Как всегда , беда приходит оттуда, откуда её не ждёшь
Сидел писал довольно не простой код, дописал и решил проверить. Начал компилировать, а он мне "ФИГА!". Версия Evaluation в CVAVR 2.05 не даёт откомпилить. Подскажите пожалуйста, на какой более раней версии можно откомпилить код без несоответствия версиями и возможно ли это вообще?
Re: CodeVision AVR в вопросах и ответах
юзаю прогу версии 1.25.9 Professional т.к. она с таблеткой и подключает все библиотеки
но вот довольно часто, при стирании камня выскакивает такое сообщение
http://4put.ru/view-max-picture.php?id=1210764
следствием чего это может быть ?
но вот довольно часто, при стирании камня выскакивает такое сообщение
http://4put.ru/view-max-picture.php?id=1210764
следствием чего это может быть ?
Tell Me The Truth
Re: CodeVision AVR в вопросах и ответах
Поставил CodeVisionAVR V2.05.3 отсюда (http://www.torrentino.com/torrents/819706).
Всё работает и компилит без проблем
Всё работает и компилит без проблем
-
sergnestor
- Родился
- Сообщения: 8
- Зарегистрирован: Пт фев 03, 2012 12:30:30
Re: CodeVision AVR в вопросах и ответах
Доброе время суток. Не знал куда написать и решил что здесь подойдет. Помогите разрулить ситуацию. Есть две проги, с виду одинаковые, одна для TINY2313, вторая для MEGA16, контроллеры отвечают на запросы ПЛК тупо посылая принятые 4 байта по UART, среди которых попадаются 0x00, так вот в чем собственно дело - от тиньки ответ принимается правильно с нулями, а от меги вместо нулей принимаются 0xC0 (иногда редко 0xE0), отдельно все устройства работают как надо, проверял терминальными прогами на компе. Сперва столкнулся с этим на меге и тогда решил на удачу попробовать тиньку. Какие предположения?
-
sergnestor
- Родился
- Сообщения: 8
- Зарегистрирован: Пт фев 03, 2012 12:30:30
Re: CodeVision AVR в вопросах и ответах
Проблема решена, связь была на скорости 9600, поднял до 19200 и всё нормализовалось, однако интересно почему различия на одной скорости между мегой и тинькой.
Re: CodeVision AVR в вопросах и ответах
Вот к примеру такой код:
я так понимаю переменные x,y будут хранится в ОЗУ но как именно. Первая переменная x запишет в первую ячейку 1 а после 7 нулей а дальше переменная y пойдёт займёт 2 ячейки и 6 нулей ?
Код: Выделить всё
unsigned char x;
unsigned char y;
x=1;
y=3;- Gudd-Head
- Друг Кота
- Сообщения: 20092
- Зарегистрирован: Чт сен 18, 2008 12:27:21
- Откуда: Столица Мира Санкт-Петербург
Re: CodeVision AVR в вопросах и ответах
Скорее 7 нулей и после одну "1" для х и 6 нулей и две "1" для у. Как это дело компилятор расположит в ОЗУ я не знаю.pokk писал(а):Первая переменная x запишет в первую ячейку 1 а после 7 нулей а дальше переменная y пойдёт займёт 2 ячейки и 6 нулей ?
[ Всё дело не столько в вашей глупости, сколько в моей гениальности ] [ Правильно заданный вопрос содержит в себе половину ответа ]
Re: CodeVision AVR в вопросах и ответах
И ещё не большой вопросик.
как можно работать отдельно с битами в регистрах настроек что бы другие биты не менялись
к примеру
мне тут только надо изменить ADEN а остальные оставить так как есть.
т.е так
но постоянное такую длинную строчку писать не удобно
как её сократить можно ?
сделал так не работает.
как можно работать отдельно с битами в регистрах настроек что бы другие биты не менялись
к примеру
Код: Выделить всё
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)

