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

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

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

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

unalex, Вы бы проверили для начала свой код, а потом бы уже утверждали. Не будет Ваш код работать.
Поясню.
Без макросов (которые, кстати, просто-напросто тупо заменяют текст), Ваш код будет выглядеть примерно так:

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

for(i=0;i<8;i++){
  x##i();
  y##i();
}
Как Вы думаете, что произойдёт ? :)
Реклама
Аватара пользователя
unalex
Мучитель микросхем
Сообщения: 424
Зарегистрирован: Сб авг 25, 2007 22:02:05
Откуда: Германия, Viernheim

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

Сообщение unalex »

Аlex писал(а):Как Вы думаете, что произойдёт

почитайте про конкатенацию(объединение строк)
Коктейль "Рекурсивный": 20% спирта, 30% воды, 50% коктейля "Рекурсивный"...
Реклама
Аватара пользователя
Аlex
Модератор
Сообщения: 4614
Зарегистрирован: Чт мар 18, 2010 23:09:57
Откуда: Планета Земля
Контактная информация:

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

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

Символом "##" строки объединяются на этапе компиляции препроцессором, а не на этапе выполнения программы :)
Этот код тупо превратится в этот :

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

for(i=0;i<8;i++){
  xi();
  yi();
}
И затем компилятор обматерит программера, что он забыл где-то в коде написать тела функций xi и yi :)
Аватара пользователя
unalex
Мучитель микросхем
Сообщения: 424
Зарегистрирован: Сб авг 25, 2007 22:02:05
Откуда: Германия, Viernheim

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

Сообщение unalex »

Аlex писал(а):Символом "##"строки объединяются на этапе компиляции препроцессором, а не на этапе выполнения программы


вот с этим полностью согласен, упустил из виду

но хоть с решетками разобрались
Коктейль "Рекурсивный": 20% спирта, 30% воды, 50% коктейля "Рекурсивный"...
Реклама
Эиком - электронные компоненты и радиодетали
Аватара пользователя
unalex
Мучитель микросхем
Сообщения: 424
Зарегистрирован: Сб авг 25, 2007 22:02:05
Откуда: Германия, Viernheim

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

Сообщение unalex »

тогда вижу наиболее подходящим ваш метод, с указателями на функции

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

void x0();
void x1();
//...

int main (void)
{
   void(*array[2])();

   array[0] = x0;
   array[1] = x1;

   for(unsigned char i = 0; i < 2; i++)
   {
      array[i]();
   }

   return 0;
}
Коктейль "Рекурсивный": 20% спирта, 30% воды, 50% коктейля "Рекурсивный"...
Реклама
Аватара пользователя
Аlex
Модератор
Сообщения: 4614
Зарегистрирован: Чт мар 18, 2010 23:09:57
Откуда: Планета Земля
Контактная информация:

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

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

Ну да, это пожалуй единственный способ. Можно ещё массив заполнить указателями при объявлении, тогда вообще получится всё в одну строку и компактно.

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

void x0(), x1(), x2(), x3(), x4(), x5(), x6(), x7(), x8();
void(*array[])() = {x0, x1, x2, x3, x4, x5, x6, x7, x8};

........
........

for( i = 0; i < 8; i++){
   array[i]();
}
вот как-то примерно так...
Реклама
Аватара пользователя
Сериг
Это не хвост, это антенна
Сообщения: 1451
Зарегистрирован: Пт фев 19, 2010 19:39:28
Откуда: Москва

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

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

День!
4-х лапые,подскажите пожалуйста!
Работаю с дисплеем wh2004,создал свои символы,записал их в память дисплея.
В чем проблема:
Формирую выводимый текст с помощью функции "sprintf();",как мне вывести в этой же функции символ,который я записал дисплей?
Спасибо!
Аватара пользователя
Аlex
Модератор
Сообщения: 4614
Зарегистрирован: Чт мар 18, 2010 23:09:57
Откуда: Планета Земля
Контактная информация:

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

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

Вопрос немного непонятен. Что означает фраза
символ,который я записал дисплей
?
Какой Вы символ хотите вывести ?
hubble
Родился
Сообщения: 13
Зарегистрирован: Вс июн 14, 2009 00:34:38

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

Сообщение hubble »

Здравствуйте.
Есть такая проблема.
Имеется проект для работы с SD-картой. Практически из хелпа к CodeVision. Main-файл простейший. Файл в том виде, который приложил во вложении, SD-карту открывает в режиме отладки в Proteus . Время читается и записывается на флешку. Как только раскомментировать строки инициализации порта А (строки 81-86), SD-карта открываться отказывается (в Proteus) и заходит в ошибку. В общем, если comment/uncomment строки 81-86, то станем ясно, что/когда не работает. Почему я привязался к инициализации порта? В моем проекте необходимо управлять направлением передачи в mcu/из mcu по одним и тем же пинам.

CodeVisionAVR 2.05.3 Standart

Не могу разобраться, в чем дело.
Прошу помощи.
Вложения
err.rar
(226.52 КБ) 146 скачиваний
Аватара пользователя
oleg110592
Друг Кота
Сообщения: 3832
Зарегистрирован: Сб сен 10, 2011 17:46:25

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

Сообщение oleg110592 »

закоротите PA0 на землю (логический "0") и будет вам счастье
hubble
Родился
Сообщения: 13
Зарегистрирован: Вс июн 14, 2009 00:34:38

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

Сообщение hubble »

Спасибо. Это помогло.
Но в моем схеме (не тестовой) будет задействован этот pin (вернее, весь порт А) на вход. Посадил PA0 через резистор 1к на землю.

P.S. Поднял datasheet. Не смог найти, почему необходимо сделать так? Подскажите, пожалуйста.
Последний раз редактировалось hubble Пт авг 16, 2013 09:15:23, всего редактировалось 2 раза.
Аватара пользователя
oleg110592
Друг Кота
Сообщения: 3832
Зарегистрирован: Сб сен 10, 2011 17:46:25

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

Сообщение oleg110592 »

У вас там в настройках проекта этот пин использован для сигнала /CD (card detect). Этот пин проверяется в прерывании таймера с частотой 100 Гц (если не ошибаюсь), если там "1" (должен быть подтянут к +U резистором, в хэлпе схема ) - значит карты нет в картоприемнике. Еще обратите внимание на сигнал WP.
Аватара пользователя
Сериг
Это не хвост, это антенна
Сообщения: 1451
Зарегистрирован: Пт фев 19, 2010 19:39:28
Откуда: Москва

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

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

Аlex писал(а):Вопрос немного непонятен. Что означает фраза
символ,который я записал дисплей
?
Какой Вы символ хотите вывести ?

Тот,который я записал в память дисплей,ему в память. Что бы вывести мне один символ в простом режиме,я посылаю команду вывести на позицию содержимое ечейки памяти под номером 9 : lcd_putchar(9);
Я могу в функции sprintf() вывести содержимое ячейки 9?
Aмstroн
Встал на лапы
Сообщения: 107
Зарегистрирован: Сб июл 27, 2013 10:52:37
Откуда: Украина

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

Сообщение Aмstroн »

Сериг писал(а):Я могу в функции sprintf() вывести содержимое ячейки 9?

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

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

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

Ок,спасибо! Каким образом выводить символы хотя бы до 8?
hubble
Родился
Сообщения: 13
Зарегистрирован: Вс июн 14, 2009 00:34:38

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

Сообщение hubble »

Здравствуйте.
Есть проблема по SD-карте.
Условие if ((res = f_write(&file, byte, sizeof(byte), &nbytes)) == FR_OK) каждый 64 раз (count = 64) выполняется не десятки микросекунд, а пару миллисекунд. Первая проверка условия также занимает миллисекунды ?????. В моем проекте это НЕ ПРИЕМЛЕМО!!!. Понял только то, что это начинается новый сектор (64 * 8 = 512 байт). Все, что смог себе предложить, так это принудительно переходить на следующий сектор (в программе закомментировано). Это не помогло.
Прошу помощи в решении этого вопроса.
Заранее благодарен.
Вложения
err2.rar
(227.39 КБ) 149 скачиваний
Vov123
Опытный кот
Сообщения: 804
Зарегистрирован: Чт мар 12, 2009 16:31:05

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

Сообщение Vov123 »

А может попробовать карту классом повыше?
Аватара пользователя
urry
Сверлит текстолит когтями
Сообщения: 1262
Зарегистрирован: Пн дек 08, 2008 10:58:48
Откуда: Винница
Контактная информация:

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

Сообщение urry »

не, ну все правильно - между секторами происходит поиск готовности и считывание 2 байт кс, не 2 миллисекунды, правда, а микросекунд 150 -200 набегало. Буфер спасет. Кольцевой который.
fan2005
Первый раз сказал Мяу!
Сообщения: 39
Зарегистрирован: Вт авг 26, 2008 00:38:28
Откуда: г. Бобруйск

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

Сообщение fan2005 »

Добрый день, котаны!
Написал прогу в CVAVR 1.25.9 для ATmega8, управляет двумя релюшками в зависимости от положения 4-х датчиков (оптопары по входу МК). Программа почти работает так как нужно, но периодически включает, то не ту релюшку, то датчика не видит.... Начал тестировать в VMlab'е и появились ошибки типа:" SBIC instruction: bit in I/O=X (unknown)". Я так понимаю что жалуется на то что я в программе часто использую PIN_X.n.... Как можно исправить баг?
все мы учились - чему-нибудь и как-нибудь
demiurg301
Опытный кот
Сообщения: 812
Зарегистрирован: Ср мар 18, 2009 21:14:33

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

Сообщение demiurg301 »

Здраствуйте.
У кого нибудь есть кряк на CV, чтобы открыть 64 битные типы данных?

Или подскажите как реализовать на ASM или С эти форматы. Перерыд тырнеты. Ничего конкретного нету.
Ответить

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