Микроконтролери и електроника
http://mcu-bg.com/mcu_site/

dspic33 проблем :-)
http://mcu-bg.com/mcu_site/viewtopic.php?f=3&t=10266
Страница 1 от 1

Автор:  Gogo [ Сря Юни 27, 2012 12:01 pm ]
Заглавие:  dspic33 проблем :-)

Компилатора е C30 - v3.31, а контролера dsPIC33FJ256MC710

syscou = 65535-500;
if(i) {while(syscou) continue;}

"syscou" е unsigned int, а "i" е signed int
syscou се увеличава на всеки 10мс в прекъсване от таймер. (syscou++;)
Т.е. ако е изпълнено условието, ще има 5 секунди изчакване.
Да, ама не!? Поне не и както е написано по-горе. Според контролера, syscou винаги е различен от 0 !?
Като го напиша така:

if(i) {while(syscou) printf("%d", syscou);}

заработва.

Автор:  michev [ Сря Юни 27, 2012 12:24 pm ]
Заглавие:  Re: dspic33 проблем :-)

Може компилатора да е оптимизирал мааалко в повече от колкото ти е нужно. Погледни асеблерския листинг дали всичко което си написал е там.
Като за проба - бих сложил един НОП - asm("nop"); в цикъла.
Код:
if (i) {
  while(syscou) {
    asm("nop");
  }
}

Автор:  ike [ Сря Юни 27, 2012 12:49 pm ]
Заглавие:  Re: dspic33 проблем :-)

Gogo написа:
"syscou" е unsigned int
syscou се увеличава на всеки 10мс в прекъсване от таймер. (syscou++;)

Освен, че е unsigned int, летлива ли е?

Автор:  rumen65 [ Сря Юни 27, 2012 12:51 pm ]
Заглавие:  Re: dspic33 проблем :-)

А има ли?

volatile syscou

PS писали сме едновременно.

Автор:  Цецо [ Сря Юни 27, 2012 12:59 pm ]
Заглавие:  Re: dspic33 проблем :-)

volatile... тая думичка трябва да ви винаги в главата като пишете ембедед код.

Автор:  Gogo [ Сря Юни 27, 2012 1:45 pm ]
Заглавие:  Re: dspic33 проблем :-)

Да... с volatile се оправиха нещата.

Автор:  [ Чет Юли 05, 2012 3:31 am ]
Заглавие:  Re: dspic33 проблем :-)

Gogo написа:
Да... с volatile се оправиха нещата.

Ако обаче е дефинирана като volatile в един файл, а в друг я използваш дефинирана само като extern, то мисля, че пак ще се спече.

Автор:  Gogo [ Чет Юли 05, 2012 8:14 am ]
Заглавие:  Re: dspic33 проблем :-)

Дефинирана е:
Код:
volatile unsigned int   syscou;

В другия, който е видим от всички, е:
Код:
extern volatile unsigned int   syscou;

Страница 1 от 1 Часовете са според зоната UTC + 2 часа [ DST ]
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
http://www.phpbb.com/