реклама на сайте
подробности

 
 
 
Reply to this topicStart new topic
> Асмовые процедуры, Для EW AVR 5.11
SasaVitebsk
сообщение Nov 1 2008, 22:39
Сообщение #1


Гуру
******

Группа: Свой
Сообщений: 2 712
Регистрация: 28-11-05
Из: Беларусь, Витебск, Строителей 18-4-220
Пользователь №: 11 521



Доброго времени суток.

Вожусь с bootload для малых камней 8/88 и т.п. Перепробовал различные фирменные - написал полностью сам. В исследованом мной MegaLoad имеются просто ошибки прямые. Не представляю как он может работать. Ну да ладно.

Пришёл к оптимизации. При исследованиях обнаружил прикольную вещь. IAR не использует ~8 регистров. 2,3 и с 10 по 15. Если компилятору указываешь не использовать с 10 по 15, то код становится короче байт на 20. Причину не выяснил. smile.gif

Написал 2 п/п на асме CRC и декодер (на Си - не влазило ~102 байта). Теперь вроде влезло. Правда ещё отлаживать придётся (В смысле только декодер. Так как всё остальное полностью проверил).

При написании возникли вопросы непонятные (по асму).
1) Почему-то компилятор ругается на использование регистровой пары X. Предлагает её заменить на Y или Z. В другом проекте (я проверил) он позволял мне это делать. Почему?
2) Надо ли мне сохранять использованые в п/п регистры самому? Или аналогичный ... Какие из регистров я могу безболезненно использовать (компилятор опознает и по другому сгенерит прогу)?

Ну кроме тех (естественно) которые я блокирнул (r10-r15) и тех которые используются под вызов (r16,r17). Это я могу однозначно использовать. smile.gif

Непонятно и с регистровой парой Y. Компилятор же её под стек использует (хотя просматривая листинг нашёл только одно место на 1 байт).
Go to the top of the page
 
+Quote Post
IgorKossak
сообщение Nov 2 2008, 09:39
Сообщение #2


Шаман
******

Группа: Модераторы
Сообщений: 3 064
Регистрация: 30-06-04
Из: Киев, Украина
Пользователь №: 221



Цитата(SasaVitebsk @ Nov 2 2008, 00:39) *
При написании возникли вопросы непонятные (по асму).
1) Почему-то компилятор ругается на использование регистровой пары X. Предлагает её заменить на Y или Z. В другом проекте (я проверил) он позволял мне это делать. Почему?

Подробно об отличиях этих регистровых пар было, в частности, здесь.
Цитата(SasaVitebsk @ Nov 2 2008, 00:39) *
2) Надо ли мне сохранять использованые в п/п регистры самому? Или аналогичный ... Какие из регистров я могу безболезненно использовать (компилятор опознает и по другому сгенерит прогу)?

Если Вы работаете в asm, то не следует употреблять слово "компилятор". Что же касается ассемблера, то он не делает ничего, что Вы ему не говорите делать, а только строка в строку переводит ассемблерный текст в код. Поэтому предполагать, что он будет вместо Вас сохранять\восстанавливать регистры несколько некорректно.
Go to the top of the page
 
+Quote Post
Artem_Petrik
сообщение Nov 2 2008, 13:45
Сообщение #3


Местный
***

Группа: Свой
Сообщений: 443
Регистрация: 22-07-06
Из: Украина, г. Харьков
Пользователь №: 19 006



Цитата
2) Надо ли мне сохранять использованые в п/п регистры самому? Или аналогичный ... Какие из регистров я могу безболезненно использовать (компилятор опознает и по другому сгенерит прогу)?


Для работы соместно с кодом написанным на си, нужно соблюдать соглашения, используемые данным компилятором си. IAR позволяет процедуре не сохранять регистры r0-r1, r16-r23 и пару Z. Это так называемые scratch регистры. Если при вызове из C процедура обьявлена как __x, то также не сохраняется пара X. Более подробно это все расписано в compiler reference в разделе "чето типа ASM interworking или чтото типа того." smile.gif
Go to the top of the page
 
+Quote Post
SasaVitebsk
сообщение Nov 3 2008, 19:36
Сообщение #4


Гуру
******

Группа: Свой
Сообщений: 2 712
Регистрация: 28-11-05
Из: Беларусь, Витебск, Строителей 18-4-220
Пользователь №: 11 521



Спасибо. Правда всё уже работает, но всё равно ваша информация очень полезна.
После вашего поста, всё прояснилось.
Естественно, я читал мануал. Причём неоднократно. Правда знание языка... sad.gif
Я сделал выводы что через scratch регистры передаётся инфа. И заведомо неиспользуются только те, ч/з которые передаётся. Если int, то 16/17 к примеру. smile.gif

Теперь понял. А так - установил опытным путём. Про r0-r1 - тоже догадывался, но проверять не стал. smile.gif

Очень хороший компилятор. Особенно для AVR. Особенно если ему немного помогать.

1к для м88/м8. Протокол WakeUp, вместе с выдачей инфо по плате и софту, дешифратором простеньким 128 бит, индикацией режима "boot", всякими контрольными суммами, WDT.
Go to the top of the page
 
+Quote Post

Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 9th July 2025 - 15:43
Рейтинг@Mail.ru


Страница сгенерированна за 0.01384 секунд с 7
ELECTRONIX ©2004-2016