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

Обсуждаем контроллеры компании Atmel.
Аватара пользователя
Aheir
Модератор
Сообщения: 4517
Зарегистрирован: Пн апр 03, 2006 11:43:25
Откуда: Санкт - Петербург
Контактная информация:

Сообщение Aheir »

Например, можно сделать логическое "И" с числом 0b00010000 и проверить результат: если == 0 - бит сброшен, если != 0 - бит установлен.
Последний раз редактировалось Aheir Вс мар 15, 2009 01:03:01, всего редактировалось 1 раз.
Оптимизм х (Опыт + Знания) = const
Arlleex
Друг Кота
Сообщения: 4435
Зарегистрирован: Сб мар 07, 2009 20:44:36

Сообщение Arlleex »

Т.к. страницы долго грузятся, не смотрел все страницы.
В CodeVisionAVR пишется текст программы?
на каком языке, Ассемблер???
П.С. не надо смеяться, я только учусь...
Не умеешь - не берись, но не взявшись не научишься...
Аватара пользователя
ARV
Ум, честь и совесть. И скромность.
Сообщения: 18544
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск
Контактная информация:

Сообщение ARV »

Aheir писал(а):Например, можно сделать логическое или с числом 0b00010000 и проверить результат: если == 0 - бит сброшен, если != 0 - бит установлен.
категорически неверно!!! нужно делать логическое И!!!!

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

if(somebyte & 0b00010000){
   // обработка, если бит стоит
} else {
   // обработка, если бит сброшен
}
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!
Аватара пользователя
Alexeus
Вымогатель припоя
Сообщения: 690
Зарегистрирован: Вс мар 04, 2007 01:17:12

Сообщение Alexeus »

ARV: наверное еще условие нужно, равно, не равно...

т.е. так?

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


if ((BYTE[1] &= 0b00010000)!=0)
{PORTA.3=1;}
else {...}

Аватара пользователя
Aheir
Модератор
Сообщения: 4517
Зарегистрирован: Пн апр 03, 2006 11:43:25
Откуда: Санкт - Петербург
Контактная информация:

Сообщение Aheir »

УПС :oops: ARV, спасибо, что обратили внимание, руки что-то не то печатают.. Константу-то (0b00010000) я написал верно. :) Естественно, если сделать "ИЛИ" это приведет к установке интересующего нас бита (кстати это и есть способ установки бита), а вот "И" с "1" в интересующем разряде даст "1", если бит был установлен и "0", если нет.

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

Alexeus писал(а):наверное еще условие нужно, равно, не равно...


Нет, все верно. Результат "&" даст 0 или 0b00010000, этого достаточно для работы if'а
Оптимизм х (Опыт + Знания) = const
smac
Мучитель микросхем
Сообщения: 459
Зарегистрирован: Вс июн 01, 2008 12:16:38

Сообщение smac »

Alexeus писал(а):ARV: наверное еще условие нужно, равно, не равно...

т.е. так?

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


if ((BYTE[1] &= 0b00010000)!=0)
{PORTA.3=1;}
else {...}


Не обязательно. В С условие считается истинным, если выражение описывающее условие (т. е. находящееся в скобках) не 0, т. е.

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

if ((BYTE[1] & 0b00010000)!=0) 

и

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

if (BYTE[1] & 0b00010000) 
эквивалентны, впрочем в предыдущем посте Вам уже ответили.
Не знаю, что Вы хотели сделать, но на всякий случай напоминаю, этот оператор

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

if ((BYTE[1] &= 0b00010000)!=0)
, кроме проверки на 0 результата операции лог И элемента массива BYTE[1] и маски 0b00010000, еще и запишет этот результат в элемент BYTE[1], т. е. после выполнения оператора if, в BYTE[1] будет результат операции BYTE[1] & 0b00010000
Аватара пользователя
Alexeus
Вымогатель припоя
Сообщения: 690
Зарегистрирован: Вс мар 04, 2007 01:17:12

Сообщение Alexeus »

ээ.. мине не надо записывать :)
тогда уж сначала присвою temp=BYTE[1] а затем проверю темп, пусть перезаписывает...
Спасибо.
smac
Мучитель микросхем
Сообщения: 459
Зарегистрирован: Вс июн 01, 2008 12:16:38

Сообщение smac »

Alexeus писал(а):ээ.. мине не надо записывать :)
тогда уж сначала присвою temp=BYTE[1] а затем проверю темп, пусть перезаписывает...
Спасибо.

Вы не поняли, можно проверять так

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

if (BYTE[1] &0b00010000) 

тогда ничего в BYTE[1] не запишется, просто будет произведена проверка
у Вас же вот так

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

if (BYTE[1] &= 0b00010000)

знак равно выполнит операцию присваивания и в BYTE[1] запишется новое значение.
Еще раз внимательно посмотрите в чем разница приведенных строчек.
Аватара пользователя
Alexeus
Вымогатель припоя
Сообщения: 690
Зарегистрирован: Вс мар 04, 2007 01:17:12

Сообщение Alexeus »

EEprom. AVR.

есть специальная команда в ЦвАВР записи eeprom а для чего "*"?:

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

eeprom int *peremennaya=0; 


Мне нужно что бы в прерывании происходил цикл записи массива в еепром. С каждым прерыванием происходило дозаписывание к предыдущей записи. т.е. инкреминировался адрес еепром. И после выключения и последующего включения так же происходило дозаписывание, а не с начального адреса писалось, затирая предыдущие данные. Как так можно сделать?
Аватара пользователя
ARV
Ум, честь и совесть. И скромность.
Сообщения: 18544
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск
Контактная информация:

Сообщение ARV »

так и делать - через указатель (та самая *). только вы уверены, что между прерываниями EEPROM успеет дописаться? это небыстрая операция...
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!
Аватара пользователя
Alexeus
Вымогатель припоя
Сообщения: 690
Зарегистрирован: Вс мар 04, 2007 01:17:12

Сообщение Alexeus »

в прерывании запрещу глобально прерывания, поставлю задержку по флагу окончания записи в еепром и после разрешу глобально прерывания, reti.

я понимаю что это инкременирование адреса "*", но как оно работает?

после выключения и включения мк будет дозаписывать или сначала начнет?

что будет когда до последнего адреса дойдет?
Arlleex
Друг Кота
Сообщения: 4435
Зарегистрирован: Сб мар 07, 2009 20:44:36

Сообщение Arlleex »

Как создать новый проект, когда я только зашел в программу?

А почему нельзя компилировать отдельный файл в отличие от нового проекта?
Не умеешь - не берись, но не взявшись не научишься...
Аватара пользователя
Aheir
Модератор
Сообщения: 4517
Зарегистрирован: Пн апр 03, 2006 11:43:25
Откуда: Санкт - Петербург
Контактная информация:

Сообщение Aheir »

Alexeus писал(а):после выключения и включения мк будет дозаписывать или сначала начнет?

что будет когда до последнего адреса дойдет?


Можно хранить в какой-нибудт дополнительной ячейке указатель на элемент массива (номер последнего обновленного элемента массива)

Stalker46 писал(а):Как создать новый проект, когда я только зашел в программу?


Через меню File->New->Project, например, или ткнуть на значек нового документа на панели инстркментов в левом верхнем углу.
Оптимизм х (Опыт + Знания) = const
Аватара пользователя
ARV
Ум, честь и совесть. И скромность.
Сообщения: 18544
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск
Контактная информация:

Сообщение ARV »

Alexeus писал(а):в прерывании запрещу глобально прерывания, поставлю задержку по флагу окончания записи в еепром и после разрешу глобально прерывания, reti.
во-первых, в обработчике прерывания и так глобально запрещены прерывания (извините за тавтологию), во-вторых, задержки в обработчике прерываний - очень порочная практика, напоритесь на вилы (не сейчас, так потом).

я понимаю что это инкременирование адреса "*", но как оно работает?
не хотите попробовать изучить основы языка Си, прежде чем браться за программирование? * - это символ указателя, т.е. ваша переменная будет хранить адрес тех данных, с которыми вы собрались работать. int *ptr - указатель ptr на данные типа int, char *pchar - указатель pchar на данные типа char и т.д. инкрементирование указателя делается так же, как инкрементирование переменной: ptr++ или pchar++. а когда указатель предваряется звездочкой - это означает, что мы работаем с теми данными, на которые он указует.
учтите, что если изначально ptr == pchar, то ptr++ уже не будет равно pchar++
когда и как вы будете этот указатель изменять - дело ваше, сама программа этого за вас делать не будет.

после выключения и включения мк будет дозаписывать или сначала начнет?
МК за вас ничего делать не будет - что вы напишите в программе, то и будет делаться по включению

что будет когда до последнего адреса дойдет?
и в третий раз скажу: будет то, что вы напишите. а если ничего не напишите - то пойдет запись с начала памяти.
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!
Аватара пользователя
Alexeus
Вымогатель припоя
Сообщения: 690
Зарегистрирован: Вс мар 04, 2007 01:17:12

Сообщение Alexeus »

ух, лучше чем в книжке объяснили :) пасиб

/где то видел, что в прерывании срабатывало прерывание, в том еще... пока не переполнялся стек. отсюда и подумал, что запрещать нужно.
Аватара пользователя
ikarab
Опытный кот
Сообщения: 828
Зарегистрирован: Пн мар 16, 2009 21:40:57
Контактная информация:

Сообщение ikarab »

Подскажите где скачать CVAVR полный ? Где почитать как с ним работать ? Есть 2 недели свободного времени, хочу поучится программировать AVR.

Alexeus писал(а):Мне нужно что бы в прерывании происходил цикл записи массива в еепром. С каждым прерыванием происходило дозаписывание к предыдущей записи.


На обложке даташита указана не очень большая цифра перезаписей ЕЕПРОМ. На долго ее вам хватит ?
Аватара пользователя
ARV
Ум, честь и совесть. И скромность.
Сообщения: 18544
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск
Контактная информация:

Сообщение ARV »

Alexeus писал(а):где то видел, что в прерывании срабатывало прерывание, в том еще... пока не переполнялся стек. отсюда и подумал, что запрещать нужно.
это может происходить как раз если прерывания разрешать в обработчике (для AVR-архитектуры). а для других архитектур это нормальное явление...
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!
Arlleex
Друг Кота
Сообщения: 4435
Зарегистрирован: Сб мар 07, 2009 20:44:36

Сообщение Arlleex »

Ну вот появилось окно, в котором я ничего не могу вписать!
И что это еще за штука слева, сам параметры МК, частота кварца и т.д.???

Как мне в это окно вписать чтонибудь?
Под каждый компилятор свой программатор?
Как скомпилировать программу в Хекс файл? или в Хекс не компилирует?
Прошу сильно не царапать, если что то не так, я просто недопонимаю и учусь на своих ошибках.
Не умеешь - не берись, но не взявшись не научишься...
Аватара пользователя
Alexeus
Вымогатель припоя
Сообщения: 690
Зарегистрирован: Вс мар 04, 2007 01:17:12

Сообщение Alexeus »

ikarab писал(а):Подскажите где скачать CVAVR полный ? Где почитать как с ним работать ?

На обложке даташита указана не очень большая цифра перезаписей ЕЕПРОМ. На долго ее вам хватит ?


http://easyelectronics.ru/category/knigi тут есть офигенная книженция по CvAVR, но страницы многие в зеркальном отображении :D

по ЕЕПРОМ- 100 000 перезаписей не такая уж и маленькая цифра, хотя если случайно попадет в цикл под полную частоту кварца... ее хватит на несколько секунд.

... погорячился. минут на 15 хватит при идеальных условиях, при повышенной температуре, пониженной хватит на еще меньшее кол-во циклов перезаписи.
Последний раз редактировалось Alexeus Вт мар 17, 2009 00:26:47, всего редактировалось 1 раз.
smac
Мучитель микросхем
Сообщения: 459
Зарегистрирован: Вс июн 01, 2008 12:16:38

Сообщение smac »

Alexeus писал(а):по ЕЕПРОМ- 100 000 перезаписей не такая уж и маленькая цифра, хотя если случайно попадет в цикл под полную частоту кварца... ее хватит на несколько секунд.

Вообще-то запись еепром в AVR длится несколько милисекунд, и Ваши расчеты вряд-ли верны.
Ответить

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