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

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

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

Сообщение ARV »

jazz393 писал(а):Хотелось бы ещё узнать как это 100 переменных инициилизировать только 1 раз

хоть и не совсем в тему :oops: , но: а вот WinAVR позволяет одним махом инициализировать одинаковым значением массивы любой размерности...

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

int arr[1000] = {[0 ... 999] = 15}; // все элементы массива равны 15
ну и неодинаковыми тоже можно

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

int arr[1000] = {[0 ... 999] = 15, [500] = 10}; // все элементы массива равны 15, кроме 500-го, который равен 10
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!
Аватара пользователя
Goodefine
Держит паяльник хвостом
Сообщения: 906
Зарегистрирован: Ср апр 16, 2008 13:22:54
Откуда: Приднестровье, Тирасполь

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

Сообщение Goodefine »

ARV писал(а):

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

int arr[1000] = {[0 ... 999] = 15}; // все элементы массива равны 15...

Да и так всегда работало:

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

int arr[1000] = {15}; // все элементы массива равны 15...
Любой, заслуживающий внимания, опыт приобретается себе в убыток...
Аватара пользователя
ARV
Ум, честь и совесть. И скромность.
Сообщения: 18544
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск
Контактная информация:

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

Сообщение ARV »

Goodefine писал(а):Да и так всегда работало:

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

int arr[1000] = {15}; // все элементы массива равны 15...

да так и работает, только инициализируется ПЕРВЫЙ элемент, а остальные равны нулю...
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!
Аватара пользователя
Goodefine
Держит паяльник хвостом
Сообщения: 906
Зарегистрирован: Ср апр 16, 2008 13:22:54
Откуда: Приднестровье, Тирасполь

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

Сообщение Goodefine »

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

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

Сообщение ARV »

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

Мой уютный бложик... заходите!
Аватара пользователя
Сериг
Это не хвост, это антенна
Сообщения: 1451
Зарегистрирован: Пт фев 19, 2010 19:39:28
Откуда: Москва

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

Сообщение Сериг »

Добрый день! Прошу помощи в следующем:
Есть 24 бита, хранятся в переменной pack
pack = 0b000000000000000000001111; ( как пример)
В итоге надо получить запись, в зеркальном отражении:
pack = 0b111100000000000000000000;
Каким образом это осуществить?
Спасибо!
Аватара пользователя
Pink-Pank
Опытный кот
Сообщения: 721
Зарегистрирован: Ср июн 11, 2014 09:43:13
Откуда: США
Контактная информация:

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

Сообщение Pink-Pank »

побитовым сдвигом с сохранением вытесненного бита в новой переменной и дальнейшим сдвигом ее в обратном направлении.
Fucking static initialization order fiasco
Аватара пользователя
Сериг
Это не хвост, это антенна
Сообщения: 1451
Зарегистрирован: Пт фев 19, 2010 19:39:28
Откуда: Москва

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

Сообщение Сериг »

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

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

Сообщение ARV »

самый простой для понимания, но не самый оптимальный, вариант:

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

unsigned long revers(unsigned long pack){
   unsigned long result = 0;
   unsigned char i;

   for(i=0; i<32;i++){
      result <<=1;
      result |= pack & 1;
      pack >>= 1;
   }
   return result;
}
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!
Аватара пользователя
Pink-Pank
Опытный кот
Сообщения: 721
Зарегистрирован: Ср июн 11, 2014 09:43:13
Откуда: США
Контактная информация:

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

Сообщение Pink-Pank »

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

 union 
{
   unsigned long full : 24;
   unsigned char low : 8;
} result;

unsigned long pack = 0b1010101010110111011010110101;

usigned char i = 0;

.....

result.low |= (char) pack & 1;
pack >>= 1;

   for(i=1; i<=23;i++){
      result.full <<= 1;
      result.low |= (char) pack & 1;
      pack >>= 1;
   }
   pack = result.full;
}
Последний раз редактировалось Pink-Pank Вт авг 26, 2014 15:51:38, всего редактировалось 8 раз.
Fucking static initialization order fiasco
Аватара пользователя
Сериг
Это не хвост, это антенна
Сообщения: 1451
Зарегистрирован: Пт фев 19, 2010 19:39:28
Откуда: Москва

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

Сообщение Сериг »

Спасибо большое! Пойду пробовать :)
Аватара пользователя
Upgrader
Друг Кота
Сообщения: 26671
Зарегистрирован: Пт май 18, 2007 22:56:58

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

Сообщение Upgrader »

Мудрые люди! Помогите усыпить ATmega8 и пробудить по INT1, пожалуйста. В этой теме последний пост с исходником: viewtopic.php?p=2110030#p2110030
Не променяю медь на ржавую несгорайку!
Аватара пользователя
Pink-Pank
Опытный кот
Сообщения: 721
Зарегистрирован: Ср июн 11, 2014 09:43:13
Откуда: США
Контактная информация:

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

Сообщение Pink-Pank »

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

MCUCR = 0; // все прерывания по нижнему уровню.
GICR |= (1<<INT1); // включаем прерывание 1.
GIFR = 0xFF; // сбрасываем флаги.
#asm
   sei
#endasm

// Засыпаем
MCUCR |= (1<<SE); // Idle + разрешить засыпание
#asm
   sleep
#endasm
MCUCR &=~(1<<SE); // Убираем разрешающий бит.
Fucking static initialization order fiasco
Аватара пользователя
Upgrader
Друг Кота
Сообщения: 26671
Зарегистрирован: Пт май 18, 2007 22:56:58

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

Сообщение Upgrader »

Pink-Pank,
Проблема в том что он тут-же просыпается самостоятельно. С чем это может быть связано, нужно еще какой-нибудь таймер отключить, а при пробуждении включить?
Up
Отключал всё! Не спит зараза. Блин, что делать... :?
Вложения
38_wattmeter_Spidometr.zip
Исходник cvavr
(339.61 КБ) 169 скачиваний
Не променяю медь на ржавую несгорайку!
Rtmip
Держит паяльник хвостом
Сообщения: 963
Зарегистрирован: Чт апр 03, 2014 23:16:55
Откуда: Россия

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

Сообщение Rtmip »

он у Вас тут же просыпается из-за асинхронного таймера...
Аватара пользователя
Pink-Pank
Опытный кот
Сообщения: 721
Зарегистрирован: Ср июн 11, 2014 09:43:13
Откуда: США
Контактная информация:

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

Сообщение Pink-Pank »

отключать нужно все таймеры, если не хотите, чтобы он просыпался. Проснутся он также может по прерыванию от АЦП и по внешнему прерыванию. Еще SPI по моему будит его.. В общем, курите даташит! ;)
Fucking static initialization order fiasco
eduardo
Нашел транзистор. Понюхал.
Сообщения: 171
Зарегистрирован: Вс июн 17, 2012 16:32:42

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

Сообщение eduardo »

Здрасьте.Кто-нибудь знает почему при написании:
PORTF.7=1 или PORTG.3=1
компилятор(CV AVR) выдаёт ошибку? При побитовом обращении к другим портам ошибки нету.МК АТмега 64.Подскажите,в чём причина?
Спасибо...
Аватара пользователя
oleg110592
Друг Кота
Сообщения: 3832
Зарегистрирован: Сб сен 10, 2011 17:46:25

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

Сообщение oleg110592 »

из хэлпа кодевижена:
The bit level access to the I/O registers can be also accomplished by using bit selectors appended after the name of the I/O register.
Because bit level access to I/O registers is done using the CBI, SBI, SBIC and SBIS instructions, the register address must be in the 0 to 1Fh range for sfrb and in the 0 to 1Eh range for sfrw.

Т.е. на портах, которые находятся в адресах 0 to 1Fh, например PORTB.1=1; будет работать.
Порты, адрес который находится в RAM, например PORTF.1=1; не будет работать.
Note: Bit selector access to I/O registers located in internal RAM above address 5Fh (like PORTF for the ATmega128 for example) will not work, because the CBI, SBI, SBIC and SBIS instructions can't be used for RAM access.

Есть в CV хидер iobits.h там макросы для работы с битами:
SETBIT(port,b) - sets bit b of port to logic 1 state, CLRBIT(port,b) - sets bit b of port to logic 0 state и т.д.
Или же писать стандартно:
PORTF |= 1<<1; //установить бит 1 в порту F
PORTF &= ~(1<<1); //сбросить бит 1 в порту F
Аватара пользователя
levaclaus
Потрогал лапой паяльник
Сообщения: 302
Зарегистрирован: Пн янв 07, 2008 16:56:28
Откуда: Минск

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

Сообщение levaclaus »

есть напряжение "a", которое меняется в диапазоне 0 - -79db
есть число "б", которое прямо пропорционально зависит от "а"

задача - как рассчитать коэффициент, чтобы "б" не было зависимо от "а"
Аватара пользователя
Аlex
Модератор
Сообщения: 4614
Зарегистрирован: Чт мар 18, 2010 23:09:57
Откуда: Планета Земля
Контактная информация:

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

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

levaclaus писал(а):есть число "б", которое прямо пропорционально зависит от "а"
levaclaus писал(а): чтобы "б" не было зависимо от "а"
Это как ? Одно противоречит другому :))
Ответить

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