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

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

Сообщение ARV »

jazz393 писал(а):Хотелось бы ещё узнать как это 100 переменных инициилизировать только 1 раз
хоть и не совсем в тему :oops: , но: а вот WinAVR позволяет одним махом инициализировать одинаковым значением массивы любой размерности...

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

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

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

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

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

Сообщение Goodefine »

ARV писал(а):

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

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

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

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

Сообщение ARV »

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

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

int arr[1000] = {15}; // все элементы массива равны 15...
да так и работает, только инициализируется ПЕРВЫЙ элемент, а остальные равны нулю...
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

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

Сообщение Goodefine »

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

Сообщение ARV »

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

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

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

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

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

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

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

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

Сообщение 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;
}
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

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

Сообщение 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
Откуда: Москва

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

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

Сообщение Upgrader »

Мудрые люди! Помогите усыпить ATmega8 и пробудить по INT1, пожалуйста. В этой теме последний пост с исходником: http://radiokot.ru/forum/viewtopic.php? ... 0#p2110030
Не променяю медь на ржавую несгорайку!
Опытный кот
Аватара пользователя
Сообщения: 721
Зарегистрирован: Ср июн 11, 2014 09:43:13
Откуда: США

Сообщение 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
Контактная информация:
Друг Кота
Аватара пользователя
Сообщения: 26671
Зарегистрирован: Пт май 18, 2007 22:56:58

Сообщение Upgrader »

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

Сообщение Rtmip »

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

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

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

Сообщение eduardo »

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

Сообщение 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
Потрогал лапой паяльник
Аватара пользователя
Сообщения: 302
Зарегистрирован: Пн янв 07, 2008 16:56:28
Откуда: Минск

Сообщение levaclaus »

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

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

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

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

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