Форум myROBOT.ru » Шаг за шагом » Программирование микроконтроллеров » stack in WinAVR

Страниц (1): [1]
 

1. Mozart - 31 Января, 2007 - 01:09:56 - перейти к сообщению
нужно ли инициализировать стек в Си??? и если да то как??? асмовской вставкой?
CODE:

ISR(ADC_vector)
{
SendByte(ADCL);
sei();
}
void InitADC() {
ADMUX = _BV(REFS1)|_BV(REFS0) /*2.56 INTERNAL REFERENCE VOLTAGE*/
|_BV(ADLAR) /*LEFT ADJUSTMENT*/
|_BV(MUX2)|_BV(MUX0); /*ADC5*/

//cbi(DDRC,ADC_DDR);

DDRC &= ~_BV(ADC_DDR); //0 - input ddc5
PORTC |= _BV(ADC_PORTC); //pull-up portc5

ADCSRA |= _BV(ADIE); //interrupt
}
void
main(void)
{
InitADC();
InitPort();
EnableADC();
sei();
while (1)
{
StartADC();
.
.
.
}

}


в этом коде, вместо того, чтобы прыгнуть на вектор прерывания, программа начинается сначала т.е. всё инициализируется...
2. Admin - 31 Января, 2007 - 13:12:46 - перейти к сообщению
Инициализация стека должна добавляться автоматически при линковании программы. Микроконтроллеры имеют различную организацию стека (например, at90s1200 имеет аппаратную реализацию). В зависимости от того, что написано в make-файле, стек будет проинициализирован тем или иным образом.

Как он проинициализировался, следует проверить по сгенерированному WinAVR листингу на ассемблере (генерация ассемблерного кода также прописывается в make-файле).
3. Mozart - 01 Февраля, 2007 - 00:15:26 - перейти к сообщению
а где в маке прописывать?

дело в том, что когда смотрю в студио и вызываю прерывание, оно соотвтетственно проимходит, но программа начинается сначала...

и стек не инициализируется по крайне мере в студио пишет stack disable
4. Admin - 02 Февраля, 2007 - 12:36:14 - перейти к сообщению
Используйте стандартный шаблон make-файла, который создает MFile.

После компиляции смотрите в файлах с расширением .lss и .lst