Форум РадиоКот • Просмотр темы - ATmega64 проблема с выходом из подпрограммы
Сообщения без ответов | Активные темы
Страница 1 из 1
[ Сообщений: 18 ]
Автор
Сообщение
Александр А.
Заголовок сообщения: ATmega64 проблема с выходом из подпрограммы
Добавлено: Ср апр 23, 2008 20:09:23
Зарегистрирован: Ср апр 23, 2008 19:52:30Сообщений: 6
Рейтинг сообщения: 0
При отладке программы в симуляторе AVR Studio 4, программа работает нормально, но при работе на микроконтроллере не записывает адрес возврата в стек и следовательно возвращается не по тому адресу. В чем может быть проблема?
.include "C:\Program Files\Atmel\AVR Tools\AvrAssembler\Appnotes\m64def.inc"
.def Temp1=R16
.def Temp2=R17
.def Temp3=R18
.cseg
.org 0
rjmp reset
.org 0x46
reset:
; init
cli
ldi Temp1,low(ramend)
out SPL,Temp1
ldi Temp1,high(ramend)
out SPH,Temp1
ser temp1
out ddrb,Temp1
clr temp1
out portb,temp1
cycle:
out portb,temp2
sbi portb,6
rcall wait
cbi portb,6
rcall wait
inc temp2
jmp cycle
ret
wait:
ldi Del1, 1
ldi Del2, 25
ldi Del3, 10
ddl1:
dec Del1
brne ddl1
dec Del2
brne ddl1
dec Del3
brne ddl1
ret
Вернуться наверх
Реклама
ARV
Заголовок сообщения:
Добавлено: Ср апр 23, 2008 20:38:24
Ум, честь и совесть. И скромность.
Карма: 98
Рейтинг сообщений: 2116
Зарегистрирован: Чт дек 28, 2006 08:19:56Сообщений: 18395Откуда: Новочеркасск
Рейтинг сообщения: 0
Медали: 2
это провокация: приведенный код не может быть скомпилирован без ошибок!
_________________если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе при взгляде на многих сверху ничего не меняется...Мой уютный бложик ... заходите!
Вернуться наверх
Реклама
Александр А.
Заголовок сообщения:
Добавлено: Ср апр 23, 2008 20:43:21
Зарегистрирован: Ср апр 23, 2008 19:52:30Сообщений: 6
Рейтинг сообщения: 0
Извинияюсь, убрал лишнее.
Хотел покомпактнее сделать.
.include "C:\Program Files\Atmel\AVR Tools\AvrAssembler\Appnotes\m64def.inc"
.def Temp1=R16
.def Temp2=R17
.def Temp3=R18
.def Rsaddr=R19; working rs address
.def Lcd=R20; data to or from LCD
.def T1=R21
.def T2=R22
.def Del1=R23
.def Del2=R24
.def Del3=R25
.cseg
.org 0
rjmp reset
.org 0x46
reset:
; init
cli
ldi Temp1,low(ramend)
out SPL,Temp1
ldi Temp1,high(ramend)
out SPH,Temp1
ser temp1
out ddrb,Temp1
clr temp1
out portb,temp1
cycle:
; out portb,temp2
sbi portb,6
rcall wait
cbi portb,6
rcall wait
inc temp2
jmp cycle
ret
wait:
ldi Del1, 1
ldi Del2, 25
ldi Del3, 10
ddl1:
dec Del1
brne ddl1
dec Del2
brne ddl1
dec Del3
brne ddl1
ret
Вернуться наверх
Tohey
Заголовок сообщения:
Добавлено: Ср апр 23, 2008 21:04:55
Грызет канифоль
Зарегистрирован: Сб сен 09, 2006 19:00:18Сообщений: 257Откуда: СССР
Рейтинг сообщения: 0
Адрес возврата от куда?
jmp cycle
ret
Отсюда?
Вернуться наверх
Реклама
В продаже новые LED-драйверы XLC компании MEAN WELL с диммингом нового поколения
Компания MEAN WELL пополнила ассортимент своей широкой линейки светодиодных драйверов новым семейством XLC для внутреннего освещения. Главное отличие – поддержка широкого спектра проводных и беспроводных технологий диммирования. Новинки представлены в MEANWELL.market моделями с мощностями 25 Вт, 40 Вт и 60 Вт. В линейке есть модели, работающие как в режиме стабилизации тока (СС), так и в режиме стабилизации напряжения (CV) значением 12, 24 и 48 В.
Подробнее>>
Александр А.
Заголовок сообщения:
Добавлено: Чт апр 24, 2008 06:00:19
Зарегистрирован: Ср апр 23, 2008 19:52:30Сообщений: 6
Рейтинг сообщения: 0
из функции wait
wait:
ldi Del1, 1
ldi Del2, 25
ldi Del3, 10
ddl1:
dec Del1
brne ddl1
dec Del2
brne ddl1
dec Del3
brne ddl1
ret
Вернуться наверх
Реклама
__Alexander
Заголовок сообщения:
Добавлено: Чт апр 24, 2008 08:52:43
Потрогал лапой паяльник
Зарегистрирован: Вт сен 11, 2007 10:27:08Сообщений: 335Откуда: Киев
Рейтинг сообщения: 0
А почему ты захотел вместо call использовать rcall, а вместо jmp -> rjmp не захотел?
Вернуться наверх
Реклама
ARV
Заголовок сообщения:
Добавлено: Чт апр 24, 2008 09:41:56
Ум, честь и совесть. И скромность.
Карма: 98
Рейтинг сообщений: 2116
Зарегистрирован: Чт дек 28, 2006 08:19:56Сообщений: 18395Откуда: Новочеркасск
Рейтинг сообщения: 0
Медали: 2
не может этого быть! такая программа никуда не денется - выйдет как миленькая. может, просто тактовая МК слишком маленькая (или он вообще не тактируется - благодаря фьюзикам разлюбезным) - вот и вся проблема?
_________________если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе при взгляде на многих сверху ничего не меняется...Мой уютный бложик ... заходите!
Вернуться наверх
Александр А.
Заголовок сообщения:
Добавлено: Чт апр 24, 2008 20:54:14
Зарегистрирован: Ср апр 23, 2008 19:52:30Сообщений: 6
Рейтинг сообщения: 0
Проблема не решена.
Дополнительные данные:
Программатор JTAG ICE.
Включены фьюзы:
CompMode
OCDEN
JTAGEN
SPIEN
BOOTSZ - Boot Flash size = 4096 words Boot Address=$7000
BODLEVEL - VCC = 2.7
SUT_CKSEL - ext. crystal/resonator high freq; start up time 1K CK+64ms
EXTENDED=0xFD
HIGH=19
LOW=0xCF
По отладчику и появлению сигнала на порту видно, что схема тактируется.
Вернуться наверх
__Alexander
Заголовок сообщения:
Добавлено: Пт апр 25, 2008 09:08:49
Потрогал лапой паяльник
Зарегистрирован: Вт сен 11, 2007 10:27:08Сообщений: 335Откуда: Киев
Рейтинг сообщения: 0
Может деться, попробывал, не работает, а если вместо jmp поставить rjmp то все ОК. Незнаю даже где грабли.
Вернуться наверх
Реклама
Artem333
Заголовок сообщения:
Добавлено: Пт апр 25, 2008 09:44:03
Карма: -1
Рейтинг сообщений: -1
Зарегистрирован: Вт апр 17, 2007 15:24:47Сообщений: 119Откуда: Новосиб
Рейтинг сообщения: 0
ты команды push-pop не юзаешь? Такое бывает если неверно использовать стек.
_________________ Всё просто как самогонный аппарат
Вернуться наверх
__Alexander
Заголовок сообщения:
Добавлено: Пт апр 25, 2008 23:59:08
Потрогал лапой паяльник
Зарегистрирован: Вт сен 11, 2007 10:27:08Сообщений: 335Откуда: Киев
Рейтинг сообщения: 0
Думаю тут дело в этих загадочных .org 0x46, по памяти было сталкивался что авр студио на них не особо оказывает влияние, поэтому и компилирует и отлаживает отлично, и команды переходов и вызовов отрабатывает корректно. Но в проце на это нельзя забивать.
Вернуться наверх
Artem333
Заголовок сообщения:
Добавлено: Сб апр 26, 2008 04:47:07
Карма: -1
Рейтинг сообщений: -1
Зарегистрирован: Вт апр 17, 2007 15:24:47Сообщений: 119Откуда: Новосиб
Рейтинг сообщения: 0
а зачем тебе вообще ORG нужен??? Я его использую только если надо разместить бинарник в какомто особом месте. Компилятор всё сам сделает.
_________________ Всё просто как самогонный аппарат
Вернуться наверх
Александр А.
Заголовок сообщения:
Добавлено: Сб апр 26, 2008 08:19:32
Зарегистрирован: Ср апр 23, 2008 19:52:30Сообщений: 6
Рейтинг сообщения: 0
org использую чтобы пропустить адреса прерываний
это не влияет на глюк, также как и rjmp и jmp, rcall и call.
pop и push не использую
Вернуться наверх
Tohey
Заголовок сообщения:
Добавлено: Сб апр 26, 2008 08:37:06
Грызет канифоль
Зарегистрирован: Сб сен 09, 2006 19:00:18Сообщений: 257Откуда: СССР
Рейтинг сообщения: 0
А разве компилятор это делать не умеет? Попробуй без .ОРГ.
rjmp и jmp в документации описаны, и они отличаются, так же как и call rcall icall...
Вернуться наверх
Artem333
Заголовок сообщения:
Добавлено: Сб апр 26, 2008 09:40:10
Карма: -1
Рейтинг сообщений: -1
Зарегистрирован: Вт апр 17, 2007 15:24:47Сообщений: 119Откуда: Новосиб
Рейтинг сообщения: 0
для конечного пользователя они не отличаются. А прерывания по дефолту отключены, такчто можешь смело писать прогу с нулевого адреса.
_________________ Всё просто как самогонный аппарат
Вернуться наверх
__Alexander
Заголовок сообщения:
Добавлено: Сб апр 26, 2008 12:06:00
Потрогал лапой паяльник
Зарегистрирован: Вт сен 11, 2007 10:27:08Сообщений: 335Откуда: Киев
Рейтинг сообщения: 0
Скорее всего, как сказал ARV что-то с фьюзами или подключением или со схемой. А так все работет, лично проверил. Не полениля светодиод к ноге припаять, мигает с частотой ~2-3 Гц.
Вернуться наверх
Александр А.
Заголовок сообщения:
Добавлено: Вс апр 27, 2008 19:11:20
Зарегистрирован: Ср апр 23, 2008 19:52:30Сообщений: 6
Рейтинг сообщения: 0
Проблема решилась.
Дело и правдо было в неверно выставленных фъюзах.
Был включен режим совместимости ATmega103. А в этом режиме память распределяется немного подругому. И то что компилятор считает последним адресом сегмента данных SRAM, на самом деле оказывается адресом сегмента External SRAM.
Вернуться наверх
murashh
Заголовок сообщения: Re: ATmega64 проблема с выходом из подпрограммы
Добавлено: Ср окт 17, 2012 04:17:25
Открыл глаза
Карма: 1
Рейтинг сообщений: 2
Зарегистрирован: Пт апр 04, 2008 22:51:33Сообщений: 44
Рейтинг сообщения: 0
ЯХУУУУУ! Вот где засада сидела. Хвала автору проблемы. Дурацкий бит, а сколько проблем.
Вернуться наверх
Страница 1 из 1
[ Сообщений: 18 ]
Кто сейчас на форуме
Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 3
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете добавлять вложения