CodeVision AVR в вопросах и ответах
- Aheir
- Модератор
- Сообщения: 4517
- Зарегистрирован: Пн апр 03, 2006 11:43:25
- Откуда: Санкт - Петербург
- Контактная информация:
Например, можно сделать логическое "И" с числом 0b00010000 и проверить результат: если == 0 - бит сброшен, если != 0 - бит установлен.
Последний раз редактировалось Aheir Вс мар 15, 2009 01:03:01, всего редактировалось 1 раз.
Оптимизм х (Опыт + Знания) = const
- ARV
- Ум, честь и совесть. И скромность.
- Сообщения: 18544
- Зарегистрирован: Чт дек 28, 2006 08:19:56
- Откуда: Новочеркасск
- Контактная информация:
категорически неверно!!! нужно делать логическое И!!!!Aheir писал(а):Например, можно сделать логическое или с числом 0b00010000 и проверить результат: если == 0 - бит сброшен, если != 0 - бит установлен.
Код: Выделить всё
if(somebyte & 0b00010000){
// обработка, если бит стоит
} else {
// обработка, если бит сброшен
}если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
ARV: наверное еще условие нужно, равно, не равно...
т.е. так?
т.е. так?
Код: Выделить всё
if ((BYTE[1] &= 0b00010000)!=0)
{PORTA.3=1;}
else {...}
- Aheir
- Модератор
- Сообщения: 4517
- Зарегистрирован: Пн апр 03, 2006 11:43:25
- Откуда: Санкт - Петербург
- Контактная информация:
УПС
ARV, спасибо, что обратили внимание, руки что-то не то печатают.. Константу-то (0b00010000) я написал верно.
Естественно, если сделать "ИЛИ" это приведет к установке интересующего нас бита (кстати это и есть способ установки бита), а вот "И" с "1" в интересующем разряде даст "1", если бит был установлен и "0", если нет.
У себя в посте тоже поправил, чтобы не смущать никого.
Нет, все верно. Результат "&" даст 0 или 0b00010000, этого достаточно для работы if'а
У себя в посте тоже поправил, чтобы не смущать никого.
Alexeus писал(а):наверное еще условие нужно, равно, не равно...
Нет, все верно. Результат "&" даст 0 или 0b00010000, этого достаточно для работы if'а
Оптимизм х (Опыт + Знания) = const
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)Alexeus писал(а):ээ.. мине не надо записывать
тогда уж сначала присвою temp=BYTE[1] а затем проверю темп, пусть перезаписывает...
Спасибо.
Вы не поняли, можно проверять так
Код: Выделить всё
if (BYTE[1] &0b00010000) тогда ничего в BYTE[1] не запишется, просто будет произведена проверка
у Вас же вот так
Код: Выделить всё
if (BYTE[1] &= 0b00010000)знак равно выполнит операцию присваивания и в BYTE[1] запишется новое значение.
Еще раз внимательно посмотрите в чем разница приведенных строчек.
EEprom. AVR.
есть специальная команда в ЦвАВР записи eeprom а для чего "*"?:
Мне нужно что бы в прерывании происходил цикл записи массива в еепром. С каждым прерыванием происходило дозаписывание к предыдущей записи. т.е. инкреминировался адрес еепром. И после выключения и последующего включения так же происходило дозаписывание, а не с начального адреса писалось, затирая предыдущие данные. Как так можно сделать?
есть специальная команда в ЦвАВР записи eeprom а для чего "*"?:
Код: Выделить всё
eeprom int *peremennaya=0; Мне нужно что бы в прерывании происходил цикл записи массива в еепром. С каждым прерыванием происходило дозаписывание к предыдущей записи. т.е. инкреминировался адрес еепром. И после выключения и последующего включения так же происходило дозаписывание, а не с начального адреса писалось, затирая предыдущие данные. Как так можно сделать?
- ARV
- Ум, честь и совесть. И скромность.
- Сообщения: 18544
- Зарегистрирован: Чт дек 28, 2006 08:19:56
- Откуда: Новочеркасск
- Контактная информация:
так и делать - через указатель (та самая *). только вы уверены, что между прерываниями EEPROM успеет дописаться? это небыстрая операция...
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
в прерывании запрещу глобально прерывания, поставлю задержку по флагу окончания записи в еепром и после разрешу глобально прерывания, reti.
я понимаю что это инкременирование адреса "*", но как оно работает?
после выключения и включения мк будет дозаписывать или сначала начнет?
что будет когда до последнего адреса дойдет?
я понимаю что это инкременирование адреса "*", но как оно работает?
после выключения и включения мк будет дозаписывать или сначала начнет?
что будет когда до последнего адреса дойдет?
- Aheir
- Модератор
- Сообщения: 4517
- Зарегистрирован: Пн апр 03, 2006 11:43:25
- Откуда: Санкт - Петербург
- Контактная информация:
Alexeus писал(а):после выключения и включения мк будет дозаписывать или сначала начнет?
что будет когда до последнего адреса дойдет?
Можно хранить в какой-нибудт дополнительной ячейке указатель на элемент массива (номер последнего обновленного элемента массива)
Stalker46 писал(а):Как создать новый проект, когда я только зашел в программу?
Через меню File->New->Project, например, или ткнуть на значек нового документа на панели инстркментов в левом верхнем углу.
Оптимизм х (Опыт + Знания) = const
- ARV
- Ум, честь и совесть. И скромность.
- Сообщения: 18544
- Зарегистрирован: Чт дек 28, 2006 08:19:56
- Откуда: Новочеркасск
- Контактная информация:
во-первых, в обработчике прерывания и так глобально запрещены прерывания (извините за тавтологию), во-вторых, задержки в обработчике прерываний - очень порочная практика, напоритесь на вилы (не сейчас, так потом).Alexeus писал(а):в прерывании запрещу глобально прерывания, поставлю задержку по флагу окончания записи в еепром и после разрешу глобально прерывания, reti.
не хотите попробовать изучить основы языка Си, прежде чем браться за программирование? * - это символ указателя, т.е. ваша переменная будет хранить адрес тех данных, с которыми вы собрались работать. int *ptr - указатель ptr на данные типа int, char *pchar - указатель pchar на данные типа char и т.д. инкрементирование указателя делается так же, как инкрементирование переменной: ptr++ или pchar++. а когда указатель предваряется звездочкой - это означает, что мы работаем с теми данными, на которые он указует.я понимаю что это инкременирование адреса "*", но как оно работает?
учтите, что если изначально ptr == pchar, то ptr++ уже не будет равно pchar++
когда и как вы будете этот указатель изменять - дело ваше, сама программа этого за вас делать не будет.
МК за вас ничего делать не будет - что вы напишите в программе, то и будет делаться по включениюпосле выключения и включения мк будет дозаписывать или сначала начнет?
и в третий раз скажу: будет то, что вы напишите. а если ничего не напишите - то пойдет запись с начала памяти.что будет когда до последнего адреса дойдет?
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
Подскажите где скачать CVAVR полный ? Где почитать как с ним работать ? Есть 2 недели свободного времени, хочу поучится программировать AVR.
На обложке даташита указана не очень большая цифра перезаписей ЕЕПРОМ. На долго ее вам хватит ?
Alexeus писал(а):Мне нужно что бы в прерывании происходил цикл записи массива в еепром. С каждым прерыванием происходило дозаписывание к предыдущей записи.
На обложке даташита указана не очень большая цифра перезаписей ЕЕПРОМ. На долго ее вам хватит ?
- ARV
- Ум, честь и совесть. И скромность.
- Сообщения: 18544
- Зарегистрирован: Чт дек 28, 2006 08:19:56
- Откуда: Новочеркасск
- Контактная информация:
это может происходить как раз если прерывания разрешать в обработчике (для AVR-архитектуры). а для других архитектур это нормальное явление...Alexeus писал(а):где то видел, что в прерывании срабатывало прерывание, в том еще... пока не переполнялся стек. отсюда и подумал, что запрещать нужно.
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
Ну вот появилось окно, в котором я ничего не могу вписать!
И что это еще за штука слева, сам параметры МК, частота кварца и т.д.???
Как мне в это окно вписать чтонибудь?
Под каждый компилятор свой программатор?
Как скомпилировать программу в Хекс файл? или в Хекс не компилирует?
Прошу сильно не царапать, если что то не так, я просто недопонимаю и учусь на своих ошибках.
И что это еще за штука слева, сам параметры МК, частота кварца и т.д.???
Как мне в это окно вписать чтонибудь?
Под каждый компилятор свой программатор?
Как скомпилировать программу в Хекс файл? или в Хекс не компилирует?
Прошу сильно не царапать, если что то не так, я просто недопонимаю и учусь на своих ошибках.
Не умеешь - не берись, но не взявшись не научишься...
ikarab писал(а):Подскажите где скачать CVAVR полный ? Где почитать как с ним работать ?
На обложке даташита указана не очень большая цифра перезаписей ЕЕПРОМ. На долго ее вам хватит ?
http://easyelectronics.ru/category/knigi тут есть офигенная книженция по CvAVR, но страницы многие в зеркальном отображении
по ЕЕПРОМ- 100 000 перезаписей не такая уж и маленькая цифра, хотя если случайно попадет в цикл под полную частоту кварца... ее хватит на несколько секунд.
... погорячился. минут на 15 хватит при идеальных условиях, при повышенной температуре, пониженной хватит на еще меньшее кол-во циклов перезаписи.
Последний раз редактировалось Alexeus Вт мар 17, 2009 00:26:47, всего редактировалось 1 раз.