AVR Раздел по микроконтроллерам компании Atmel - AVR / ATtiny / ATmega / ATMega128 / ATxmega, вопросы по программированию в AVR studio и все, относящееся к AVR... |
22.05.2014, 10:39
|
|
Временная регистрация
Регистрация: 20.06.2009
Сообщений: 51
Сказал спасибо: 44
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
|
Как загрузить указатель стека в CVAVR
Когда я еще писал проекты на ASMe в начале каждой подпрограммы я вставлял на всякий случай следующее:
Код:
|
ldi r16,high(RAMEND) ;
out SPH,r16 ; Загружаем указатель стека
ldi r16,low(RAMEND) ;
out SPL,r16 ; Загружаем указатель стека
sei |
Сейчас возникла ситуация, что нужно передавать по UARTу пачки слов по 22 штуки и в некоторый момент времени (примерно через 20 циклов передачи) во время передачи с микроконтроллером начинают твориться "чудеса".
Раньше в ASMе я обошелся вышеприведенным кодом.
При увеличении размера стэка в настройках проекта в 2 раза число циклов передачи выросло в 2 раза, а затем снова ШВАХ. Из чего следует, что виноват точно стек.
Вообщем вопрос такой - как загрузить указатель стека в CVAVR наподобие как ASMе???
|
|
|
|
22.05.2014, 12:01
|
|
Гуру портала
Регистрация: 06.05.2005
Адрес: Краснодар, возле укротворного моря.
Сообщений: 18,861
Сказал спасибо: 2,532
Сказали Спасибо 11,773 раз(а) в 5,897 сообщении(ях)
|
Re: Как загрузить указатель стека в CVAVR
Про стек не скажу, а вот про работу с УАРТом - у Вас косяк.
И не надо править косяк перезагрузкой указателя стека, это до добра не доведет. Гораздо полезней найти косяк.
Как работаете с УАРТом?
__________________
Не бейте больно, ежели чо, ну не удержался... А вааще,
"Мы за все хорошее, против всей х..., По лугам некошеным чтобы шли ступни,
Чтобы миром правила правда, а не ложь, Мы за все хорошее, нас не на...!
..." (Ленинград)
Я не несу ответственности за свои действия в Вашей голове.
|
|
|
|
22.05.2014, 13:38
|
|
Временная регистрация
Регистрация: 20.06.2009
Сообщений: 51
Сказал спасибо: 44
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
|
Re: Как загрузить указатель стека в CVAVR
Сообщение от akegor
|
Про стек не скажу, а вот про работу с УАРТом - у Вас косяк.
И не надо править косяк перезагрузкой указателя стека, это до добра не доведет. Гораздо полезней найти косяк.
Как работаете с УАРТом?
|
Инициализация уарта:
Код:
|
// USART initialization
// Communication Parameters: 8 Data, 2 Stop, No Parity
// USART Receiver: On
// USART Transmitter: On
// USART0 Mode: Asynchronous
// USART Baud Rate: 19200
UCSR0A=0x00;
UCSR0B=0x98;
UCSR0C=0x0E;
UBRR0H=0x00;
UBRR0L=0x3B; |
функция отправки слова:
Код:
|
void USART_Transmit(char data)
{
while (!(UCSR0A & (1‹‹UDRE)));
UDR0 = data;
} |
соответственно вызов функции:
Код:
|
USART_Transmit(Start);
USART_Transmit(string11);
USART_Transmit(string12);
USART_Transmit(string21);
USART_Transmit(string22);
USART_Transmit(string31);
USART_Transmit(string32);
USART_Transmit(string41);
USART_Transmit(string42);
USART_Transmit(string51);
USART_Transmit(string52);
USART_Transmit(string61);
USART_Transmit(string62);
USART_Transmit(string71);
USART_Transmit(string72);
USART_Transmit(string81);
USART_Transmit(string82);
USART_Transmit(string91);
USART_Transmit(string92);
USART_Transmit(LOWperiod);
USART_Transmit(HIGHperiod);
USART_Transmit(Uab); |
|
|
|
|
22.05.2014, 13:48
|
|
Гуру портала
Регистрация: 06.05.2005
Адрес: Краснодар, возле укротворного моря.
Сообщений: 18,861
Сказал спасибо: 2,532
Сказали Спасибо 11,773 раз(а) в 5,897 сообщении(ях)
|
Re: Как загрузить указатель стека в CVAVR
Странно. Прерывания от УАРТа?
В ЦВ никогда не использую прямое обращение к УАРТу. Только через getchar() и putchar(). Вашего эффекта никогда не наблюдалось, хотя данные гоняются сутками, месяцами...
__________________
Не бейте больно, ежели чо, ну не удержался... А вааще,
"Мы за все хорошее, против всей х..., По лугам некошеным чтобы шли ступни,
Чтобы миром правила правда, а не ложь, Мы за все хорошее, нас не на...!
..." (Ленинград)
Я не несу ответственности за свои действия в Вашей голове.
|
|
|
|
22.05.2014, 14:01
|
|
Временная регистрация
Регистрация: 20.06.2009
Сообщений: 51
Сказал спасибо: 44
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
|
Re: Как загрузить указатель стека в CVAVR
Сообщение от akegor
|
Странно. Прерывания от УАРТа?
В ЦВ никогда не использую прямое обращение к УАРТу. Только через getchar() и putchar(). Вашего эффекта никогда не наблюдалось, хотя данные гоняются сутками, месяцами...
|
Я тоже посылал через прерывание по приему, буфер и putchar() - думал, что ошибки из-за такого применения и изменил на то, как написал выше - так все равно такой же эффект.
|
|
|
|
22.05.2014, 14:12
|
|
Гуру портала
Регистрация: 06.05.2005
Адрес: Краснодар, возле укротворного моря.
Сообщений: 18,861
Сказал спасибо: 2,532
Сказали Спасибо 11,773 раз(а) в 5,897 сообщении(ях)
|
Re: Как загрузить указатель стека в CVAVR
Собака, видимо, порылась в другом месте.
Исключайте куски программы.
Или в другом проекте с нуля наворачивайте постепенно, начав с УАРТа.
__________________
Не бейте больно, ежели чо, ну не удержался... А вааще,
"Мы за все хорошее, против всей х..., По лугам некошеным чтобы шли ступни,
Чтобы миром правила правда, а не ложь, Мы за все хорошее, нас не на...!
..." (Ленинград)
Я не несу ответственности за свои действия в Вашей голове.
|
|
|
|
22.05.2014, 14:32
|
|
Почётный гражданин KAZUS.RU
Регистрация: 08.06.2008
Сообщений: 1,394
Сказал спасибо: 4
Сказали Спасибо 183 раз(а) в 167 сообщении(ях)
|
Re: Как загрузить указатель стека в CVAVR
Если в программе вообще не используются прерывания,
то это чудеса!!! (Чудеса могут быть от приемника, особливо кривого USB - ишного )
Если используются, то надо смотреть не используются ли в них передаваемые переменные или этот же УАРТ. И хватает ли стека.
Чудес не бывает, как у маленьких детей.
|
|
|
Сказали "Спасибо" Boba_spb
|
|
|
22.05.2014, 14:50
|
|
Временная регистрация
Регистрация: 20.06.2009
Сообщений: 51
Сказал спасибо: 44
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
|
Re: Как загрузить указатель стека в CVAVR
Сообщение от Boba_spb
|
Если в программе вообще не используются прерывания,
то это чудеса!!! (Чудеса могут быть от приемника, особливо кривого USB - ишного )
Если используются, то надо смотреть не используются ли в них передаваемые переменные или этот же УАРТ. И хватает ли стека.
Чудес не бывает, как у маленьких детей.
|
а если и так, то что делать со стеком???
|
|
|
|
22.05.2014, 15:04
|
|
Гуру портала
Регистрация: 06.05.2005
Адрес: Краснодар, возле укротворного моря.
Сообщений: 18,861
Сказал спасибо: 2,532
Сказали Спасибо 11,773 раз(а) в 5,897 сообщении(ях)
|
Re: Как загрузить указатель стека в CVAVR
Сообщение от Boba_spb
|
И хватает ли стека.
|
Судя по первому посту, стек распухает с попытками передачи.
Кто-то где-то нахалюжно туда впендючивает невытаскиваемые данные.
Сколько имею дело с ЦВ - такое слышу в первый раз.
Потому и предложил в проект с нуля добавлять куски алгоритма, начав с передачи пакетов.
__________________
Не бейте больно, ежели чо, ну не удержался... А вааще,
"Мы за все хорошее, против всей х..., По лугам некошеным чтобы шли ступни,
Чтобы миром правила правда, а не ложь, Мы за все хорошее, нас не на...!
..." (Ленинград)
Я не несу ответственности за свои действия в Вашей голове.
|
|
|
|
22.05.2014, 15:36
|
|
Почётный гражданин KAZUS.RU
Регистрация: 08.06.2008
Сообщений: 1,394
Сказал спасибо: 4
Сказали Спасибо 183 раз(а) в 167 сообщении(ях)
|
Re: Как загрузить указатель стека в CVAVR
Прога то на С написана. Стек может распухать только на вложенных прерываниях или реентерабельности подпрограмм.
Или АСМовские вставки кидают в стек и не вытаскивают.
Прерывания на этот УАРТ случаем не заряжены? А то кинули туды байт а он исчо и в прерывания скачет никому не нужные .
|
|
|
Сказали "Спасибо" Boba_spb
|
|
|
Ваши права в разделе
|
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения
HTML код Выкл.
|
|
|
Часовой пояс GMT +4, время: 08:01.
|
|