[an error occurred while processing this directive]
Ответ:
(«Телесистемы»: Конференция «Цифровые сигнальные процессоры (DSP) и их применение»)

миниатюрный аудио-видеорекордер mAVR

Отправлено ВН 07 октября 2002 г. 13:13
В ответ на: Все обрамление по поводу label и global и section - все это понятно, а вот ... отправлено _Нуждающийся 07 октября 2002 г. 12:23

Верно, линковщик рассчитывает. Но я в предыдущем ответе кое-что пропустил. В unione. Там перед строчками file1.obj(PLLP),
file2.obj(PLLCT) надо вставить file1.obj(.text), file2.obj(.text) соответственно. Т.е.:
UNION: run=IPMRAM
{
PLLP: load=IPMRAT
{
PLLP_start=.;
file1.obj(.text)
file1.obj(PLLP)
PLLP_length=.-PLLP_start;
}
PLLCT: load=IPMRAR
{
PLLCT_start=.;
file2.obj(.text)
file2.obj(PLLCT)
PLLCT_length=.-PLLCT_start;
}
Иначе asm(" .label") дадут не те значения.
Торопился, блин. В воскресенье у нас только до 20 можно на работе быть.
Охрана над душой висела, когда писал.
Если интересно, еще одно замечание по поводу определения размера С функции. Правда не очень красиво. Если известен ее начальный адрес, то конец можно определить, вставив asm(" .label") перед закрывающей скобкой для void ф-ии, или перед return для не void.
Т.е.:
void func()
{
.....
asm(" .label funcend");
}
Недостаток - funcend не обязательно будет указывать на ret, только если уж ф-ия простая до страсти. Скорее всего будет указывать на frame, после которого могут быть popm'ы или еще что-нибудь, а потом уже ret или retd. Т.е. на первую инструкцию после всех "полезных" операций в ф-ии.
Но, поскольку, оставшийся кусок небольшой и ret(retd) там только раз, то можно после funcend (включая ее) отыскать код к-ды ret или retd. В случае ret - это и будет концом ф-ии, в случае retd - 2 надо прибавить.

Составить ответ  |||  Конференция  |||  Архив

Ответы


Отправка ответа

Имя (обязательно): 
Пароль: 
E-mail: 

Тема (обязательно):
Сообщение:

Ссылка на URL: 
Название ссылки: 

URL изображения: 


Перейти к списку ответов  |||  Конференция  |||  Архив  |||  Главная страница  |||  Содержание  |||  Без кадра

E-mail: info@telesys.ru