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

 
 
> Сохранение регистров в fies.asm IAR_AVR, Как указать компилятору на использование?
fmdost
сообщение Mar 10 2008, 01:06
Сообщение #1


Местный
***

Группа: Свой
Сообщений: 479
Регистрация: 8-05-07
Из: г. Ставрополь. Северный Кавказ. Россия
Пользователь №: 27 606



Доброго времени суток Уважаемые!
Прицепил к проэкту асм файл с програмкой проверки crc. Разъясните пожалуйста, как указать компилятору на неоюходимость сохранения используемых в асм файле регистров?
Спасибо.
Файл тут.Прикрепленный файл  crc.rar ( 889 байт ) Кол-во скачиваний: 124
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
Baser
сообщение Mar 10 2008, 10:37
Сообщение #2


Просто Che
*****

Группа: Свой
Сообщений: 1 567
Регистрация: 22-05-07
Из: ExUSSR
Пользователь №: 27 881



Цитата(Т.Достоевский @ Mar 10 2008, 03:06) *
Разъясните пожалуйста, как указать компилятору на неоюходимость сохранения используемых в асм файле регистров?

Попробую принять вашу телепатограмму smile.gif
У вас есть проект на Си и функция подсчета CRC на ассме. Вам их нужно подружить. Правильно?

Если ответ положительный, то для начала функция на ассме должна удовлетворять требованиям ИАР.
Для этого подробно изучаем один раз (я это сделал 8 лет назад и до сих пор пользуюсь) раздел руководства AVR® IAR C/C++ Compiler Reference Guide - "Assembler language interface". Мне помнится, у вас были проблемы с аглицким, но нужно попытаться.

Могу расписать и подробней, но сначала вы отпишите, правильно ли я понял ваш вопрос smile.gif
Go to the top of the page
 
+Quote Post
fmdost
сообщение Mar 10 2008, 15:05
Сообщение #3


Местный
***

Группа: Свой
Сообщений: 479
Регистрация: 8-05-07
Из: г. Ставрополь. Северный Кавказ. Россия
Пользователь №: 27 606



Цитата(Baser @ Mar 10 2008, 13:37) *
Попробую принять вашу телепатограмму smile.gif
У вас есть проект на Си и функция подсчета CRC на ассме. Вам их нужно подружить. Правильно?...

Наверное да. Файл прикручен. Только непонятно как сохранять регистры которые используютъся в функции С из которой вызывается АСМ вставка использующая те-же регистры. Компилятор есстественно сохраняет регистры, которые используются во вложенной С функции, но с АСМ функцией так не прокатило.
То-есть как указать компилятору, что в АСМ функции используются такие-то регистры?
Например:
Код
for(i=0;i>100;i++)
  crc_asm(* pointer); // <- вот сдесь может портится(и портится) i


Цитата(Rst7 @ Mar 10 2008, 14:18) *
Не пойму, какие проблемы это на Си написать?

Use it.
Go to the top of the page
 
+Quote Post
Baser
сообщение Mar 10 2008, 15:59
Сообщение #4


Просто Che
*****

Группа: Свой
Сообщений: 1 567
Регистрация: 22-05-07
Из: ExUSSR
Пользователь №: 27 881



Цитата(Т.Достоевский @ Mar 10 2008, 17:05) *
...из которой вызывается АСМ вставка...

Так вы все-таки определитесь, что используете: асм вставку или функцию на асме. Это разные вещи. В файле у вас подобие функции, но как вы передаете параметры, не понятно.
Код
EXTERN rx_buff
...
  ldi r30,rx_buff
Это вы так пытаетесь передать указатель??

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

Цитата(Т.Достоевский @ Mar 10 2008, 17:05) *
То-есть как указать компилятору, что в АСМ функции используются такие-то регистры?
Например:
Код
for(i=0;i>100;i++)
  crc_asm(* pointer); // <- вот сдесь может портится(и портится) i

Если функция, то нужно выполнять требования ИАР по передаче параметров: Calling convention.
Все регистры делятся на PRESERVED & SCRATCH.
SCRATCH (рабочие) R0–R3, R16–R23, and R30–R31 - их можно применять в подпрограммах без сохранения.
PRESERVED (сохраняемые) R4–R15 and R24–R27 - если их применяют в подпрограмме, они должны быть сохранены и потом восстановлены.

Параметры в/из функций передаются через регистры и через стек. Первый параметр передается через R19:R18:R17:R16. Второй параметр через R23:R22:R21:R20. Остальные (если есть) через стек.
Впрочем, это хорошо расписано в хелпе. Кстати, есть программы-переводчики, напр. наш PROMT, которые даже в Lite версии отлично переводят.

Вот вам рабочий пример функции на асме в си программе:
func.asm
Код
;===============================================================;
;   Delay 100 mks * time   (max: 6.55 sec;  Clock: 7.3728 MHz) ;
;   __version_1 void Wait100mks(unsigned int time);            ;
;===============================================================;
    PUBLIC  Wait100mks
Wait100mks:
        ldi     r18, 244

wait2:  dec     r18
        brne    wait2

        subi    r16, 1
        sbci    r17, 0
        mov     r18, r16
        or      r18, r17
        brne    Wait100mks
        ret

defines.h
Код
extern __version_1 void Wait100mks(unsigned int time);

code.c
Код
  while (1)                 // Wait Watchdog RESET
    {
    poGreenLED = 1;
    Wait100mks(1000);       // 100 ms
    poGreenLED = 0;
    Wait100mks(2000);       // 200 ms
    }


Двухбайтовый unsigned int time передается через R17:R16. Компилятор об этом знает, поскольку функция имеет один параметр. Это видно в тексте на си и компилятор эти регистры не применяет.
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- Т.Достоевский   Сохранение регистров в fies.asm IAR_AVR   Mar 10 2008, 01:06
- - Rst7   Не пойму, какие проблемы это на Си написать?   Mar 10 2008, 11:18
- - Т.Достоевский   Спасибо. По англицки читаю. Про согдлашение по пер...   Mar 10 2008, 16:23
|- - Baser   Цитата(Т.Достоевский @ Mar 10 2008, 18:23...   Mar 10 2008, 16:35
||- - Т.Достоевский   Вот что бывает если нет конкуренции Подымал сдес...   Mar 10 2008, 16:51
||- - Baser   Цитата(Т.Достоевский @ Mar 10 2008, 18:51...   Mar 10 2008, 17:25
|- - Сергей Борщ   Цитата(Т.Достоевский @ Mar 10 2008, 18:23...   Mar 10 2008, 17:12
|- - Т.Достоевский   Цитата(Сергей Борщ @ Mar 10 2008, 20:12) ...   Mar 10 2008, 17:31
|- - Baser   Цитата(Т.Достоевский @ Mar 10 2008, 19:31...   Mar 10 2008, 21:19
- - Rst7   ЦитатаUse it. Вот именно к Вам это и относится. Ч...   Mar 10 2008, 18:37
|- - Т.Достоевский   Цитата(Rst7 @ Mar 10 2008, 21:37) ...Спис...   Mar 10 2008, 19:31
- - Rst7   ЦитатаА разве в GCC не RTL? RTL это кажется станда...   Mar 11 2008, 06:43
|- - Т.Достоевский   Цитата(Rst7 @ Mar 11 2008, 09:43) Чем??? ...   Mar 11 2008, 13:30
- - Rst7   ЦитатаRTL. Это вы про язык распределения регистро...   Mar 11 2008, 14:27


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

 


RSS Текстовая версия Сейчас: 5th August 2025 - 08:32
Рейтинг@Mail.ru


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