Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: atmega32 запутался в адресации
Форум разработчиков электроники ELECTRONIX.ru > Сайт и форум > В помощь начинающему > MCS51, AVR, PIC, STM8, 8bit
bi_max
Попробовал сваять прибор для замера параметров Акб
нашел мегу 32 почитал интернет
прилепил с помощью интернета (в основном чужие наработки) дисплей от нокии 3310
писать решил на ассемблере но за неимением опыта наделал кода больше 5к
проект встал не могу понять где то команды icall, ijmp работают где то нет
проект прилагаю
подскажите где я напортачил
меню почти работает скачет по экранчикам начинаешь код дописывать и начинаются проблемы с адресацией
kolobok0
Цитата(bi_max @ May 16 2012, 17:20) *
...не могу понять где то команды icall, ijmp работают где то нет...


1. не увлекайтесь макросами. их дебажить студия не даёт.
2. локализуйте функционал по файлам. отдельным. относитесь к написанию так, чтоб можно было потом воткнуть этот файл в другой проект, изменить в шапочке дефайны и всё чтоб заработало.
3. в шапочке каждой подпрограммы пишите вход, выход, какие регистры юзаются.
4. в обработчках прерываний вместо пуш-поп можно заюзать movw для регистровых пар. для этого надо выделить из общего массива рон = пары для сохранения регистров. можно даже без пересылки - сразу их юзать. исходя из правила, что в один момент времени может обрабатываться только одно прерывание. И ещё. в обработчиках прерываний необходимо так же сохранять флаги(регистр SREG)

_Артём_
Цитата(kolobok0 @ May 16 2012, 16:58) *
1. не увлекайтесь макросами. их дебажить студия не даёт.

Ну в Disassemler-е можно отлаживать.

Цитата(kolobok0 @ May 16 2012, 16:58) *
4. в обработчках прерываний вместо пуш-поп можно заюзать movw для регистровых пар.

Как это через movw?
st/ld заменяет push/pop, но выигрыша никакого.


P.S. Главное - бросайте писать на ассемблере без надобности. Переходите на Си.
zombi
У Вас регистры R26..R29 два раза обьявлены. Это так надо?
ILYAUL
А уж
Код
push temp
в зарядке больше чем достаточно, правда
Код
pop temp
нет ни одного. Интересно на каком шаге оперативка заканчивается.
В .include можно даже запутаться. Всё выбросить и переписать заново .
bi_max
Цитата(ILYAUL @ May 17 2012, 06:03) *
А уж
Код
push temp
в зарядке больше чем достаточно, правда
Код
pop temp
нет ни одного. Интересно на каком шаге оперативка заканчивается.
В .include можно даже запутаться. Всё выбросить и переписать заново .

до зарядки дело даже не дошло она не подключена еще начинает рушиться при подключении проверки из файла menu.asm

Цитата
У Вас регистры R26..R29 два раза обьявлены. Это так надо?

не нашел где еще раз объявил но я думаю это не криминал
я пользуюсь в проекте чужими наработками если интересно могу источники вспомнить

выбрал ассемблер чтоб поближе познакомиться с внутренним устройством avr
zombi
Цитата(bi_max @ May 17 2012, 00:01) *
не нашел где еще раз объявил но я думаю это не криминал
Они обьявлены и в m32def.inc и у вас в BC.INC
Цитата
.def XL = r26
...
.def Tl =r26 ; Temperature Low Byte
о чём вам компилятор с радостью сообщает:
Цитата
BC.INC(57): warning: Register r26 already defined by the .DEF directive
Nokia3310.asm(2): 'BC.INC' included form here
BC.INC(58): warning: Register r27 already defined by the .DEF directive
Nokia3310.asm(2): 'BC.INC' included form here
BC.INC(59): warning: Register r28 already defined by the .DEF directive
Nokia3310.asm(2): 'BC.INC' included form here
BC.INC(60): warning: Register r29 already defined by the .DEF directive

Может и не криминал, но я себе такой роскоши не позволяю, запутаться можно.
bi_max
Спасибо натолкнули а то в дебри улез
нашел косяк в проверке перепутал команды местами (push pop)
как говорится подвластно только дилетанту и забил всю оперативку в цикле

тему не закрывайте будут вопросы да и советы интересны

Цитата(zombi @ May 17 2012, 07:22) *
Они обьявлены и в m32def.inc и у вас в BC.INC
о чём вам компилятор с радостью сообщает:

Может и не криминал, но я себе такой роскоши не позволяю, запутаться можно.

bc.inc как и часть кода зарядника с апнота avr450 точно там на tiny надо будет поразмыслить
bi_max
Спасибо за совет с SREG и макросами точно после какого то предела макросы гнать начинают запихаешь их в код и работает и объем меньше
kolobok0
Цитата(_Артём_ @ May 16 2012, 18:09) *
Ну в Disassemler-е можно отлаживать.

можно. но речь идёт о дебаженье по исходным текстам, а не по самому коду. сам код (иногда) плохо читаем. посему падает скорость отладки.

Цитата(_Артём_ @ May 16 2012, 18:09) *
Как это через movw?st/ld заменяет push/pop, но выигрыша никакого.

вы только первые предложения читаете? как то поверхностный подход. цитата:

"для этого надо выделить из общего массива рон = пары для сохранения регистров. можно даже без пересылки - сразу их юзать."

надеюсь понятно.
а по скорости - посмотрите указанные команды. выигрыш очевиден.

Цитата(_Артём_ @ May 16 2012, 18:09) *
P.S. Главное - бросайте писать на ассемблере без надобности. Переходите на Си.

на одном плакате написано:
не говорите что мне делать и я не скажу куда вам идти.

предлагаю не разводить халевар. для вас Си - верх совершенства. ради бога. я лично отдыхаю, создавая программы на азме. Если для вас это проблемы - изучайте мат часть.
ILYAUL
Цитата(kolobok0 @ May 18 2012, 13:59) *
"для этого надо выделить из общего массива рон = пары для сохранения регистров. можно даже без пересылки - сразу их юзать."

А можно и в GPIORх - если они есть
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.