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

Обсуждаем контроллеры компании Atmel.
Аватара пользователя
IfoR
Поставщик валерьянки для Кота
Сообщения: 2029
Зарегистрирован: Сб ноя 15, 2008 10:09:56
Откуда: г. Тула
Контактная информация:

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

Сообщение IfoR »

Странно. Попробуте так, что ли...

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

...
      if (nNewSec==1)        //условие от таймера
      {                       
        d=1.0f/(em*3600);
        nNewSec=0;
        flZar-=d; //каждый раз нужно заново вычислить d и уменьшить на него flZar
      };                                 
...
Изображение
/dev/urandom - гигабайты информации.

OS: openSUSE 13.2 (x86_64)
Реклама
Аватара пользователя
alexx82
Открыл глаза
Сообщения: 64
Зарегистрирован: Ср июл 06, 2011 19:11:44
Откуда: В цветущих акациях город
Контактная информация:

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

Сообщение alexx82 »

Доброго всем времени суток.

Вопрос, возможно, идиотский, и не раз обсуждался, но все же...

Как в CVAVR поделить число на 2?

Очевидный способ (взять и поделить оператором /) не работает - компилятор генерит такую вот муть:

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

__DIVW21U:
   CLR  R0
   CLR  R1
   LDI  R25,16
__DIVW21U1:
   LSL  R26
   ROL  R27
   ROL  R0
   ROL  R1
   SUB  R0,R30
   SBC  R1,R31
   BRCC __DIVW21U2
   ADD  R0,R30
   ADC  R1,R31
   RJMP __DIVW21U3
__DIVW21U2:
   SBR  R26,1
__DIVW21U3:
   DEC  R25
   BRNE __DIVW21U1
   MOV  R30,R26
   MOV  R31,R27
   MOV  R26,R0
   MOV  R27,R1
   RET

__DIVW21:
   RCALL __CHKSIGNW
   RCALL __DIVW21U
   BRTC __DIVW211
   RCALL __ANEGW1
__DIVW211:
   RET
и вызывает ее при каждом делении.

Сдвиг вправо тоже не катит - вместо обычного логического сдвига долбаный компилятор использует циркулярный.

----------
Спустя 15 минут

Вопрос снят. Виновата включенная опция "Promote char to int". Сообщение не удаляю на тот случай, если сюда заглянет кто-нибудь столь же криворукий как я. :))
Реклама
Мастер Ломастер
Поставщик валерьянки для Кота
Сообщения: 1995
Зарегистрирован: Ср май 11, 2011 21:37:45
Откуда: Цветочный город
Контактная информация:

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

Сообщение Мастер Ломастер »

вообще-то деление на 2 это сдвиг вправо: var >>= 1; - хоть для char, хоть для int.
битва с дураками проиграна, победители торжествуют. слава победителям!
Аватара пользователя
alexx82
Открыл глаза
Сообщения: 64
Зарегистрирован: Ср июл 06, 2011 19:11:44
Откуда: В цветущих акациях город
Контактная информация:

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

Сообщение alexx82 »

Мастер Ломастер

Вообще-то int занимает 16 бит, и чтобы поделить ее на 2 в восьмибитном МК одним сдвигом не обойтись.

----------

Ковырял ассемблерный листинг прошивки, и заметил в нем такую фигню:

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

;GLOBAL VARIABLES INITIALIZATION
   LDI  R30,LOW(__GLOBAL_INI_TBL*2)
   LDI  R31,HIGH(__GLOBAL_INI_TBL*2)
__GLOBAL_INI_NEXT:
   LPM
   ADIW R30,1
   MOV  R24,R0
   LPM
   ADIW R30,1
   MOV  R25,R0
   SBIW R24,0
   BREQ __GLOBAL_INI_END
   LPM
   ADIW R30,1
   MOV  R26,R0
   LPM
   ADIW R30,1
   MOV  R27,R0
   LPM
   ADIW R30,1
   MOV  R1,R0
   LPM
   ADIW R30,1
   MOV  R22,R30
   MOV  R23,R31
   MOV  R31,R0
   MOV  R30,R1
__GLOBAL_INI_LOOP:
   LPM
   ADIW R30,1
   ST   X+,R0
   SBIW R24,1
   BRNE __GLOBAL_INI_LOOP
   MOV  R30,R22
   MOV  R31,R23
   RJMP __GLOBAL_INI_NEXT
__GLOBAL_INI_END:

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

Вопрос. Что делает данный код, и какие будут последствия если удалить его?
И еще - можно ли избавиться от этого кода при помощи настроек проекта, или без внешнего файла инициализации не обойтись?
Реклама
Эиком - электронные компоненты и радиодетали
Мастер Ломастер
Поставщик валерьянки для Кота
Сообщения: 1995
Зарегистрирован: Ср май 11, 2011 21:37:45
Откуда: Цветочный город
Контактная информация:

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

Сообщение Мастер Ломастер »

alexx82 писал(а):Вообще-то int занимает 16 бит, и чтобы поделить ее на 2 в восьмибитном МК одним сдвигом не обойтись.
я в курсе. однако, для любых целочисленных типов деление на 2 есть сдвиг вправо на 1 бит. однй командой сдвига это делается или десятком - сути не меняет: сдвиг он и в африке сдвиг. в отличие от целочисленного деления.

alexx82 писал(а):Что делает данный код, и какие будут последствия если удалить его?
скорее всего этот код обнуляет глобальные статические переменные, а так же инициализирует нужные переменные начальными значениями. что будет, если его исключить - догадайтесь сами.
битва с дураками проиграна, победители торжествуют. слава победителям!
Реклама
юрик Воронеж
Собутыльник Кота
Сообщения: 2513
Зарегистрирован: Вс дек 26, 2010 14:30:04
Откуда: Воронеж, пгт Рамонь

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

Сообщение юрик Воронеж »

Привет всем. Конечно, вопрос глупый, но почему CodeVision AVR ругается на такую строку
;delay_ms (1000)?
Ничто из ниоткуда ни появляется и ничто вникуда не пропадает!
Реклама
Аватара пользователя
Apparatchik
Держит паяльник хвостом
Сообщения: 908
Зарегистрирован: Вс май 23, 2010 13:55:42
Откуда: Украина, Александрия

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

Сообщение Apparatchik »

юрик Воронеж писал(а):Привет всем. Конечно, вопрос глупый, но почему CodeVision AVR ругается на такую строку
;delay_ms (1000)?
Правильно так

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

delay_ms(1000);
«И всё-таки она вертится!»
юрик Воронеж
Собутыльник Кота
Сообщения: 2513
Зарегистрирован: Вс дек 26, 2010 14:30:04
Откуда: Воронеж, пгт Рамонь

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

Сообщение юрик Воронеж »

:oops: :oops:

Благодарю :beer:
Ничто из ниоткуда ни появляется и ничто вникуда не пропадает!
юрик Воронеж
Собутыльник Кота
Сообщения: 2513
Зарегистрирован: Вс дек 26, 2010 14:30:04
Откуда: Воронеж, пгт Рамонь

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

Сообщение юрик Воронеж »

Продолжает ругаться - написал так :
delay_ms(1000);
говорит - вы забыли ; :shock:
Ничто из ниоткуда ни появляется и ничто вникуда не пропадает!
Аватара пользователя
alexx82
Открыл глаза
Сообщения: 64
Зарегистрирован: Ср июл 06, 2011 19:11:44
Откуда: В цветущих акациях город
Контактная информация:

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

Сообщение alexx82 »

юрик Воронеж писал(а):Продолжает ругаться - написал так :
delay_ms(1000);
говорит - вы забыли ; :shock:
Значит в предыдущей строке пропущена.
юрик Воронеж
Собутыльник Кота
Сообщения: 2513
Зарегистрирован: Вс дек 26, 2010 14:30:04
Откуда: Воронеж, пгт Рамонь

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

Сообщение юрик Воронеж »

Стоит и в предыдущей строке, и в следующей. :shock: я в :shock:
Ничто из ниоткуда ни появляется и ничто вникуда не пропадает!
Аватара пользователя
Apparatchik
Держит паяльник хвостом
Сообщения: 908
Зарегистрирован: Вс май 23, 2010 13:55:42
Откуда: Украина, Александрия

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

Сообщение Apparatchik »

юрик Воронеж писал(а):Стоит и в предыдущей строке, и в следующей. :shock: я в :shock:
Тогда код давайте
«И всё-таки она вертится!»
юрик Воронеж
Собутыльник Кота
Сообщения: 2513
Зарегистрирован: Вс дек 26, 2010 14:30:04
Откуда: Воронеж, пгт Рамонь

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

Сообщение юрик Воронеж »

Бегущий огонь :oops: :oops: Горе программер :cry:

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

      
       PORTB.0=1
       delay_ms (1000);
       PORTB.0=0
      delay_ms (1000);
       PORTB.1=1
      delay_ms (1000);
       PORTB.1=0
      delay_ms (1000);
       PORTB.2=1
      delay_ms (1000);
       PORTB.2=0
      delay_ms (1000);
       PORTB.3=1
      delay_ms (1000);
       PORTB.3=0
      delay_ms (1000);
       PORTB.4=1
      delay_ms (1000);
       PORTB.4=0
      delay_ms (1000);
       PORTB.5=1
      delay_ms (1000);
       PORTB.5=0
      delay_ms (1000);
       PORTB.6=1
      delay_ms (1000);
       PORTB.6=0
      delay_ms (1000);
       PORTB.7=1
      delay_ms (1000);
       PORTB.7=0

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

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

Сообщение ARV »

вот уж и вправду - горе :))) точка с запятой в вашем случае должна быть ПОСЛЕ КАЖДОЙ СТРОКИ :)))
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!
юрик Воронеж
Собутыльник Кота
Сообщения: 2513
Зарегистрирован: Вс дек 26, 2010 14:30:04
Откуда: Воронеж, пгт Рамонь

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

Сообщение юрик Воронеж »

ох &@#$% :cry: :cry: :cry:


Спасибо :beer:

Снова ругается :evil: Теперь ему задержка не нравиться. Вот исправленная прошивка
PORTB.0=1;
delay_ms (1000);
PORTB.0=0;
delay_ms (1000);
PORTB.1=1;
delay_ms (1000);
PORTB.1=0;
delay_ms (1000);
PORTB.2=1;
delay_ms (1000);
PORTB.2=0;
delay_ms (1000);
PORTB.3=1;
delay_ms (1000);
PORTB.3=0;
delay_ms (1000);
PORTB.4=1;
delay_ms (1000);
PORTB.4=0;
delay_ms (1000);
PORTB.5=1;
delay_ms (1000);
PORTB.5=0;
delay_ms (1000);
PORTB.6=1;
delay_ms (1000);
PORTB.6=0;
delay_ms (1000);
PORTB.7=1;
delay_ms (1000);
PORTB.7=0;
:cry: :cry:
Ничто из ниоткуда ни появляется и ничто вникуда не пропадает!
Аватара пользователя
ARV
Ум, честь и совесть. И скромность.
Сообщения: 18544
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск
Контактная информация:

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

Сообщение ARV »

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

Мой уютный бложик... заходите!
Аватара пользователя
Apparatchik
Держит паяльник хвостом
Сообщения: 908
Зарегистрирован: Вс май 23, 2010 13:55:42
Откуда: Украина, Александрия

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

Сообщение Apparatchik »

Может в начале кода забыли

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

#include <delay.h>
«И всё-таки она вертится!»
юрик Воронеж
Собутыльник Кота
Сообщения: 2513
Зарегистрирован: Вс дек 26, 2010 14:30:04
Откуда: Воронеж, пгт Рамонь

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

Сообщение юрик Воронеж »

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


Написал банальное ВКЛ-ВЫКЛ порта - не пашет.
Весь код

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

#include <tiny2313.h>

// Declare your global variables here

void main(void)
{
// Declare your local variables here

// Crystal Oscillator division factor: 1
#pragma optsize-
CLKPR=0x80;
CLKPR=0x00;
#ifdef _OPTIMIZE_SIZE_
#pragma optsize+
#endif

// Input/Output Ports initialization
// Port A initialization
// Func2=In Func1=In Func0=In
// State2=T State1=T State0=T
PORTA=0x00;
DDRA=0x00;

// Port B initialization
// Func7=Out Func6=Out Func5=Out Func4=Out Func3=Out Func2=Out Func1=Out Func0=Out
// State7=0 State6=0 State5=0 State4=0 State3=0 State2=0 State1=0 State0=0
PORTB=0x00;
DDRB=0xFF;

// Port D initialization
// Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In
// State6=T State5=T State4=T State3=T State2=T State1=T State0=T
PORTD=0x00;
DDRD=0x00;

// Timer/Counter 0 initialization
// Clock source: System Clock
// Clock value: Timer 0 Stopped
// Mode: Normal top=FFh
// OC0A output: Disconnected
// OC0B output: Disconnected
TCCR0A=0x00;
TCCR0B=0x00;
TCNT0=0x00;
OCR0A=0x00;
OCR0B=0x00;

// Timer/Counter 1 initialization
// Clock source: System Clock
// Clock value: Timer 1 Stopped
// Mode: Normal top=FFFFh
// OC1A output: Discon.
// OC1B output: Discon.
// Noise Canceler: Off
// Input Capture on Falling Edge
// Timer 1 Overflow Interrupt: Off
// Input Capture Interrupt: Off
// Compare A Match Interrupt: Off
// Compare B Match Interrupt: Off
TCCR1A=0x00;
TCCR1B=0x00;
TCNT1H=0x00;
TCNT1L=0x00;
ICR1H=0x00;
ICR1L=0x00;
OCR1AH=0x00;
OCR1AL=0x00;
OCR1BH=0x00;
OCR1BL=0x00;

// External Interrupt(s) initialization
// INT0: Off
// INT1: Off
// Interrupt on any change on pins PCINT0-7: Off
GIMSK=0x00;
MCUCR=0x00;

// Timer(s)/Counter(s) Interrupt(s) initialization
TIMSK=0x00;

// Universal Serial Interface initialization
// Mode: Disabled
// Clock source: Register & Counter=no clk.
// USI Counter Overflow Interrupt: Off
USICR=0x00;

// Analog Comparator initialization
// Analog Comparator: Off
// Analog Comparator Input Capture by Timer/Counter 1: Off
ACSR=0x80;

while (1)
      {
       
       PORTB.0=1;
      delay_ms (1000);
       PORTB.0=0;
      delay_ms (1000);
       PORTB.1=1;
      delay_ms (1000);
       PORTB.1=0;
      delay_ms (1000);
       PORTB.2=1;
      delay_ms (1000);
       PORTB.2=0;
      delay_ms (1000);
       PORTB.3=1;
      delay_ms (1000);
       PORTB.3=0;
      delay_ms (1000);
       PORTB.4=1;
      delay_ms (1000);
       PORTB.4=0;
      delay_ms (1000);
       PORTB.5=1;
      delay_ms (1000);
       PORTB.5=0;
      delay_ms (1000);
       PORTB.6=1;
      delay_ms (1000);
       PORTB.6=0;
      delay_ms (1000);
       PORTB.7=1;
      delay_ms (1000);
       PORTB.7=0;
      };
}

Инклюде тини аш есть
Ничто из ниоткуда ни появляется и ничто вникуда не пропадает!
Аватара пользователя
Apparatchik
Держит паяльник хвостом
Сообщения: 908
Зарегистрирован: Вс май 23, 2010 13:55:42
Откуда: Украина, Александрия

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

Сообщение Apparatchik »

Точно забыли :)
«И всё-таки она вертится!»
юрик Воронеж
Собутыльник Кота
Сообщения: 2513
Зарегистрирован: Вс дек 26, 2010 14:30:04
Откуда: Воронеж, пгт Рамонь

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

Сообщение юрик Воронеж »

Тооочна! А как же так - вроде программа сама это ставит :shock:
Ничто из ниоткуда ни появляется и ничто вникуда не пропадает!
Ответить

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