Например TDA7294

Форум РадиоКот • Просмотр темы - Смысл "Dummy access to the .vectors section" в ARM7TDMI
Форум РадиоКот
Здесь можно немножко помяукать :)



Текущее время: Пн июл 15, 2019 23:14:56

Часовой пояс: UTC + 3 часа [ Летнее время ]


ПРЯМО СЕЙЧАС:



Начать новую тему Ответить на тему  [ Сообщений: 3 ] 
Автор Сообщение
Не в сети
 Заголовок сообщения: Смысл "Dummy access to the .vectors section" в ARM7TDMI
СообщениеДобавлено: Вс сен 09, 2012 21:00:41 
Родился
Аватар пользователя

Зарегистрирован: Пн авг 20, 2012 21:47:58
Сообщений: 7
Откуда: Самара
Рейтинг сообщения: 0
Доброго дня.

Изучаю в деталях программу инициализации для AT91SAM7S256. И первая же инструкция вызывает у меня вопрос.

Код:
    ...

resetHandler:

/* Dummy access to the .vectors section so it does not get optimized */
    ldr r0, =resetVector

/* Set pc to actual code location (i.e. not in remap zone) */
    ldr pc, =1f

/* Perform low-level initialization of the chip using LowLevelInit() */
1:
    ldr r4, =_sstack
    mov sp, r4
    ldr r0, =LowLevelInit
    mov lr, pc
    bx r0

    ...


Сразу после включения управление переходит в Remap зону на resetHandler. Псевдоинструкция (ldr pc, =1f) делает переход с 0x00000004 во Flash по адресу 0x00100008. Дальше - инициализация стека и вызов C-функции и так далее. Но смысл первой dummy-инструкции (ldr r0, =resetVector) мне непонятен. Теоретически, зачем она? Связано ли это как-нибудь с Instruction Pipeline процессора ARM7TDMI?


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Смысл "Dummy access to the .vectors section" в ARM7TDMI
СообщениеДобавлено: Чт сен 13, 2012 23:33:53 
Родился
Аватар пользователя

Зарегистрирован: Пн авг 20, 2012 21:47:58
Сообщений: 7
Откуда: Самара
Рейтинг сообщения: 0
Я разобрался в смысле этой инструкции :kill: Оказалось что дело не в конвейере процессора, а в линкере. В актуальном скрипте линкера в команде SECTIONS среди прочих располагается оператор определения секции .relocate:
Код:
...
.relocate : AT (_efixed)
{
    . = ALIGN(4);
    _srelocate = .;
    *(.vectors)
    *(.ramfunc)
    *(.data)
    . = ALIGN(4);
    _erelocate = .;
} >sram
...


При этом в Makefile проекта указаны следующие опции компоновки:
Код:
LDFLAGS = -g $(OPTIMIZATION) -nostartfiles -Wl,--gc-sections


Здесь, --gc-sections - это не что иное как опция Remove unused sections (on some targets). Если убрать из кода явное обращение к секции векторов, то после сборки проекта размер секции .relocate заметно легчает согласно выводу команды
Код:
$ arm-elf-readelf -S


Полученный результат меня удовлетворил, поэтому разбираться в том, что за ад происходит в чипе при выполнении переоптимизированной микропрограммы я не стал :tea: Поправьте меня, если я где-то наврал.


Вернуться наверх
 
JLCPCB, всего $2 за прототип печатной платы! Цвет - любой!

Отличное качество, подтвержденное более чем 600,000 пользователей! Более 10,000 заказов в день.

Зарегистрируйтесь и получите два купона по 5$ каждый:https://jlcpcb.com/quote

Не в сети
 Заголовок сообщения: Re: Смысл "Dummy access to the .vectors section" в ARM7TDMI
СообщениеДобавлено: Сб сен 15, 2012 20:47:31 
Опытный кот
Аватар пользователя

Карма: 7
Рейтинг сообщений: 52
Зарегистрирован: Чт дек 31, 2009 20:27:45
Сообщений: 842
Откуда: Бровари, Україна
Рейтинг сообщения: 0
По --gc-sections выбрасывается всё, к чему нет явного обращения.
Изменение на
Код:
KEEP( *(.vectors))
должно помочь (т.е. секция не будет выбрасываться и без холостого обращения к ней).

_________________
Лень в виде мании величия: «ты гений, зачем стараться?». В виде комплекса: «всё равно не выйдет, зачем упираться?». Как логика: «если достаточно, зачем знать и уметь больше?». Цель одна: остановить. Не любит тепло работающих мышц и шум работающего мозга.


Вернуться наверх
 
PCBWay - всего $5 за 10 печатных плат, первый заказ для новых клиентов БЕСПЛАТЕН

Сборка печатных плат от $88 + БЕСПЛАТНАЯ доставка по всему миру + трафарет

Онлайн просмотровщик Gerber-файлов от PCBWay
Показать сообщения за:  Сортировать по:  Вернуться наверх
Начать новую тему Ответить на тему  [ Сообщений: 3 ] 

Часовой пояс: UTC + 3 часа [ Летнее время ]


Кто сейчас на форуме

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 10


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  


Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB
Extended by Karma MOD © 2007—2012 m157y
Extended by Topic Tags MOD © 2012 m157y