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

 
 
> разместить эпилог и пролог в секции
megajohn
сообщение May 9 2012, 20:41
Сообщение #1


Профессионал
*****

Группа: Свой
Сообщений: 1 080
Регистрация: 16-11-04
Из: СПб
Пользователь №: 1 143



разместить эпилог и пролог в конкретной моей секции - собсвенно сабж, как функции и переменные знаю а как стантартные эпилоги и прологи разместить где мне надо не знаю

в хелпе иара и гугль не помогли



--------------------
Марс - единственная планета, полностью населенная роботами (около 7 штук).
Go to the top of the page
 
+Quote Post
2 страниц V   1 2 >  
Start new topic
Ответов (1 - 15)
_Артём_
сообщение May 9 2012, 20:52
Сообщение #2


Гуру
******

Группа: Свой
Сообщений: 2 128
Регистрация: 21-05-06
Пользователь №: 17 322



Цитата(megajohn @ May 9 2012, 23:41) *
разместить эпилог и пролог в конкретной моей секции

А зачем это делать?
Go to the top of the page
 
+Quote Post
megajohn
сообщение May 9 2012, 21:06
Сообщение #3


Профессионал
*****

Группа: Свой
Сообщений: 1 080
Регистрация: 16-11-04
Из: СПб
Пользователь №: 1 143



Цитата(_Артём_ @ May 10 2012, 00:52) *
А зачем это делать?


если скажу, то будет полемика на 100 страниц что "так не принято делать"

А вообще, в голову засела идея реализовать APP + BOOTLOADER в рамках одного проекта

все работает, пока очистка флеши не затирает операции по работе с стеком при вызове функций (эпилоги-прологи)

пока как вариант, попробовал фунции секции бутлодыря определять с __task и ручками прописывать сохранение в стек.

Но для портирования на разные AVRки ручной способ это не есть гуд


--------------------
Марс - единственная планета, полностью населенная роботами (около 7 штук).
Go to the top of the page
 
+Quote Post
_Артём_
сообщение May 9 2012, 21:44
Сообщение #4


Гуру
******

Группа: Свой
Сообщений: 2 128
Регистрация: 21-05-06
Пользователь №: 17 322



Цитата(megajohn @ May 10 2012, 00:06) *
и не затирает операции по работе с стеком при вызове функций (эпилоги-прологи)

А в каком сегменте находятся прологи-эпилоги?
Этот сегмент нужно поместить куда надо.

P.S. прологи-эпилоги у ИАРа как-то по другому называются. Как?


Цитата(megajohn @ May 10 2012, 00:06) *
если скажу, то будет полемика на 100 страниц что "так не принято делать"

А вообще, в голову засела идея реализовать APP + BOOTLOADER в рамках одного проекта


Почему бы не прописать все сегменты, как размещенные в boot-области,а всю программу размещать в (с том числе main ) в своих сегментах, которые расположить в application-области оп нужным адресам?
Go to the top of the page
 
+Quote Post
KRS
сообщение May 9 2012, 22:55
Сообщение #5


Профессионал
*****

Группа: Модераторы
Сообщений: 1 951
Регистрация: 27-08-04
Из: Санкт-Петербург
Пользователь №: 555



Цитата(megajohn @ May 10 2012, 01:06) *
А вообще, в голову засела идея реализовать APP + BOOTLOADER в рамках одного проекта

да не проблема - напишите свой стартап и размещайте где угодно!

Но только есть нюансы - если собирается как один проект сразу и бутлоадер и приложение то нельзя использовать библиотеку (ее можно отключить) потому что у бутлоадера и приложения должны быть свои копии библиотеки иначе при при последующей компиляции только приложения все съедет.

Go to the top of the page
 
+Quote Post
megajohn
сообщение May 10 2012, 07:03
Сообщение #6


Профессионал
*****

Группа: Свой
Сообщений: 1 080
Регистрация: 16-11-04
Из: СПб
Пользователь №: 1 143



Цитата(_Артём_ @ May 10 2012, 00:44) *
А в каком сегменте находятся прологи-эпилоги?


судя по дизасму в APP

Цитата(_Артём_ @ May 10 2012, 00:44) *
Этот сегмент нужно поместить куда надо.


логично, про это и был топик. Вопрос повторять надеюсь не надо

Цитата(_Артём_ @ May 10 2012, 00:44) *
P.S. прологи-эпилоги у ИАРа как-то по другому называются. Как?


так и называются EPILOGUE и PROLOGUE

Цитата(KRS @ May 10 2012, 01:55) *
да не проблема - напишите свой стартап и размещайте где угодно!

написал для сегмента лодыря свой стартап иннициализации стеков. Но при вызове вложенных функций вызывается стандартные иаровские эпилоги-прологи по сохранению в стек. Мне нужно РЕАЛИЗАЦИЮ этих эпилогово-прологов ПЕРЕНЕСТИ в секцию BOOTLOADER

Цитата(KRS @ May 10 2012, 01:55) *
Но только есть нюансы - если собирается как один проект сразу и бутлоадер и приложение то нельзя использовать библиотеку (ее можно отключить) потому что у бутлоадера и приложения должны быть свои копии библиотеки иначе при при последующей компиляции только приложения все съедет.


что подразумевается под стадндартными библиотеками ? в секторе BOOTLOADER не используются memcpy, strcmp и прочее-прочее


--------------------
Марс - единственная планета, полностью населенная роботами (около 7 штук).
Go to the top of the page
 
+Quote Post
scifi
сообщение May 10 2012, 07:19
Сообщение #7


Гуру
******

Группа: Свой
Сообщений: 3 020
Регистрация: 7-02-07
Пользователь №: 25 136



Цитата(megajohn @ May 10 2012, 01:06) *
если скажу, то будет полемика на 100 страниц что "так не принято делать"

Так не принято делать :-) И на это есть хорошие причины.

Цитата(megajohn @ May 10 2012, 01:06) *
А вообще, в голову засела идея реализовать APP + BOOTLOADER в рамках одного проекта

Зачем? Чисто для заполнения досуга - могу понять. А для работы - лучше не надо.
Go to the top of the page
 
+Quote Post
KRS
сообщение May 10 2012, 07:19
Сообщение #8


Профессионал
*****

Группа: Модераторы
Сообщений: 1 951
Регистрация: 27-08-04
Из: Санкт-Петербург
Пользователь №: 555



Цитата(megajohn @ May 10 2012, 11:03) *
написал для сегмента лодыря свой стартап иннициализации стеков. Но при вызове вложенных функций вызывается стандартные иаровские эпилоги-прологи по сохранению в стек. Мне нужно РЕАЛИЗАЦИЮ этих эпилогово-прологов ПЕРЕНЕСТИ в секцию BOOTLOADER

у вас оптимизация по размеру что ли стоит?
поставьте для бутлоадера по скорости, никаких прологов и эпилогов для функций быть не должно! (по крайней мере я для AVR этого не наблюдал в своих проектах)

Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение May 10 2012, 08:03
Сообщение #9


Гуру
******

Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095



QUOTE (megajohn @ May 10 2012, 10:03) *
что подразумевается под стадндартными библиотеками ? в секторе BOOTLOADER не используются memcpy, strcmp и прочее-прочее
Вы не используете. А компилятор может присваивать структуры через memcopy, выполнять switch() через библиотечные функции, и прочее и прочее и прочее.

QUOTE (KRS @ May 10 2012, 10:19) *
поставьте для бутлоадера по скорости
В общем создайте программу, которая будет то собираться, то не собираться, то работать, то не работать в зависимости от ключей компилятора, версии компилятора, положения звезд на небе и прочего. Это главная причина, почему никто не делает то, что задумал megajohn. Многие пытались, каждый получил граблями в лоб, я не исключение. Вы рискуете получить новый загрузчик изменив что-то в приложении. Хотите писать обе части в кристалл за один раз - слейте вместе два хекса или вкомпилите образ загрузчика в приложение в виде массива или просто прилинкуйте к приложению двоичный образ загрузчика. Хотите отлаживать обе части одновременно - надо шаманить с объектным файлом загрузчика (что-то добавлять ко всем именам символов чтобы не было одинаковых имен в обоих частях) и прилинковывать к приложению конечный объектный файл загрузчика со всей отладочной информацией, но не нужно пытаться совместить на уровне исходников то, что не должно совмещаться по условию.

А потом у компилятора появится что-то вроде link-time optimization и он сделает такой винегрет из обоих частей вашей программы...


--------------------
На любой вопрос даю любой ответ
"Write code that is guaranteed to work, not code that doesn’t seem to break" (C++ FAQ)
Go to the top of the page
 
+Quote Post
_Артём_
сообщение May 10 2012, 09:29
Сообщение #10


Гуру
******

Группа: Свой
Сообщений: 2 128
Регистрация: 21-05-06
Пользователь №: 17 322



Цитата(megajohn @ May 10 2012, 10:03) *
так и называются EPILOGUE и PROLOGUE

В каком документе такие названия?
Не могу найти таких...
Go to the top of the page
 
+Quote Post
megajohn
сообщение May 10 2012, 10:00
Сообщение #11


Профессионал
*****

Группа: Свой
Сообщений: 1 080
Регистрация: 16-11-04
Из: СПб
Пользователь №: 1 143



Цитата(_Артём_ @ May 10 2012, 12:29) *
В каком документе такие названия?
Не могу найти таких...


в доках нет описания. Это надо в дизасме смотреть. Как выглядит - картинку приаттачил

суть - перемесить текущие занятые регистры в стек, выполнить вычисления в освобожденных, и по выходу из функции вернуть из стека

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

Далее, по метке самого большой глубины можно в маp-файле увидеть те самы жирные функции
Эскизы прикрепленных изображений
Прикрепленное изображение
 


--------------------
Марс - единственная планета, полностью населенная роботами (около 7 штук).
Go to the top of the page
 
+Quote Post
scifi
сообщение May 10 2012, 10:19
Сообщение #12


Гуру
******

Группа: Свой
Сообщений: 3 020
Регистрация: 7-02-07
Пользователь №: 25 136



Цитата(megajohn @ May 10 2012, 14:00) *
в доках нет описания. Это надо в дизасме смотреть. Как выглядит - картинку приаттачил

Дык о том и речь: вы уже принялись за reverse engineering применительно к компилятору. Занятие это довольно бессмысленное, и я бы даже сказал вредное.
Go to the top of the page
 
+Quote Post
KRS
сообщение May 10 2012, 19:11
Сообщение #13


Профессионал
*****

Группа: Модераторы
Сообщений: 1 951
Регистрация: 27-08-04
Из: Санкт-Петербург
Пользователь №: 555



Цитата(scifi @ May 10 2012, 14:19) *
Занятие это довольно бессмысленное, и я бы даже сказал вредное.

это как раз очень полезно! потому что помогает правильно написать критические по времени куски кода.
и иногда разобраться с собственными ошибками.



megajohn,
эти прологи и эпилоги появляются только при оптимизации по размеру! (по крайней мере так было раньше)
у АВР регистров много и вызывая эти функции с нужной точки входа можно здорово сэкономить место если есть много функций которые много локальных переменных в регистрах используют!

А вообще у вас данная конфигурация будет корректно собираться только в том случае если вы не используете библиотеку вообще! В настройках ИАР это можно сделать. В других случаях надо делать две конфигурации, это кстати можно сделать и в одном проекте!
Go to the top of the page
 
+Quote Post
_Артём_
сообщение May 10 2012, 19:30
Сообщение #14


Гуру
******

Группа: Свой
Сообщений: 2 128
Регистрация: 21-05-06
Пользователь №: 17 322



Цитата(KRS @ May 10 2012, 22:11) *
эти прологи и эпилоги появляются только при оптимизации по размеру! (по крайней мере так было раньше)

Может так раньше и было, но в map-файле такое вижу:
Код
======================
CODE
  Relative segment, address: CODE 000006F8 - 000006F9 (0x2 bytes), align: 1
  Segment part 8.
           ENTRY                   ADDRESS         REF BY
           =====                   =======         ======
           ?PROLOGUE8_L09          000006F8        __call_ctors (?cppinit)
    -------------------------------------------------------------------------
CODE
  Relative segment, address: CODE 000006FA - 000006FB (0x2 bytes), align: 1
  Segment part 9.             Intra module refs:   ?PROLOGUE8_L09
           ENTRY                   ADDRESS         REF BY
           =====                   =======         ======
           ?PROLOGUE7_L09          000006FA
    -------------------------------------------------------------------------

Оптимизация по скорости.
Go to the top of the page
 
+Quote Post
KRS
сообщение May 10 2012, 19:47
Сообщение #15


Профессионал
*****

Группа: Модераторы
Сообщений: 1 951
Регистрация: 27-08-04
Из: Санкт-Петербург
Пользователь №: 555



Цитата(_Артём_ @ May 10 2012, 23:30) *
Может так раньше и было, но в map-файле такое вижу:

Оптимизация по скорости.

так это из библиотеки ссылки на эти функции! а с какими опциями и как она скомпилирована кто знает...
Go to the top of the page
 
+Quote Post
megajohn
сообщение May 11 2012, 07:15
Сообщение #16


Профессионал
*****

Группа: Свой
Сообщений: 1 080
Регистрация: 16-11-04
Из: СПб
Пользователь №: 1 143



Цитата(KRS @ May 10 2012, 22:47) *
так это из библиотеки ссылки на эти функции! а с какими опциями и как она скомпилирована кто знает...


стоп-стоп. Считаю что вы глубоко заблуждаетесь.
все эти прологи-эпилоги нужны и используются, если в процессе вычислений не хватает регистров R0-R31 (за исключением неприкасаемых) чтобы держать все актуальные результаты вычислений. Ну не резиновые регистры что тут поделать.

Если вы раньше не наблюдали, то видать вам хватало и существующих и не было раздутых алгоритмов и вычислений.

update: сделал тестовый проект - получил следующие результаты

при оптимизации по скорости ( как и говорит KRS ) нет эпилогов. А при оптимизации по коду (как у меня) есть эпилоги.

То есть при оптимизации по скорости охранения в стек тупо инлайнятся, хотя это конечно быстро. А вот по размеру появлся так называемые эпилоги, общие для всех функций проекта.

Но для меня скорость по оптимизации не катит - для бутлодыря раздувание кода не допустимо.

Вчера плюнул на всю идею совмещения и сделал отдельный проект. Работает да и ладно, хотя жаль что не как хотел. Но чуть чего можно попробовать postlink сделать


--------------------
Марс - единственная планета, полностью населенная роботами (около 7 штук).
Go to the top of the page
 
+Quote Post

2 страниц V   1 2 >
Closed TopicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


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


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