Миландр

Ключевым подразделением нашей компании является Центр Проектирования интегральных микросхем
Текущее время: 2017-ноя-19 19:17

Часовой пояс: UTC + 3 часа




Начать новую тему Ответить на тему  [ Сообщений: 7 ] 
Автор Сообщение
СообщениеДобавлено: 2016-сен-14 09:40 
Не в сети

Зарегистрирован: 2009-июл-21 14:13
Сообщения: 1010
Откуда: Тула
Собственно сабж, как реализовать?
Как выравнять данные подсказывает интегрированная справка, а вот как выровнять функции - нет.
Может есть какой-либо менее очевидный способ?

_________________
сочувствующий…


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 2016-сен-14 15:01 
Не в сети

Зарегистрирован: 2010-авг-30 19:12
Сообщения: 379
насколько я понимаю адрес функции всегда выравнен - это обязанность компилятора, иначе исполнение кода будет невозможно.
В чем конкретно проблема?

_________________
О сколько нам открытий чудных
Готовит просвященья дух,
И опыт - сын ошибок трудных ... (Пушкин)

Пергаменты не утоляют жажду ("Фауст",Гете)


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 2016-сен-14 16:56 
Не в сети

Зарегистрирован: 2009-июл-21 14:13
Сообщения: 1010
Откуда: Тула
редактор писал(а):
насколько я понимаю адрес функции всегда выравнен - это обязанность компилятора, иначе исполнение кода будет невозможно.
В чем конкретно проблема?

Да, разумеется. Вопрос с том, как выровнять адрес ф-ции (обработчика прерывания) по ширине строки флеш-памяти (128 бит, 16 байт), дабы гарантировать, что следующие данные уже будут доступны тогда, когда понадобятся. Оптимизировать работу с флеш, короче. Сами АРМовцы рекомендуют выравнивать данные для оптимизации работы при наличии кэша данных.

_________________
сочувствующий…


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 2016-сен-15 15:45 
Не в сети

Зарегистрирован: 2010-авг-30 19:12
Сообщения: 379
директива __align() не помогает? Ейто не все ли равно что выравнивать, данные, константы, функции?

_________________
О сколько нам открытий чудных
Готовит просвященья дух,
И опыт - сын ошибок трудных ... (Пушкин)

Пергаменты не утоляют жажду ("Фауст",Гете)


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 2016-сен-15 16:19 
Не в сети

Зарегистрирован: 2009-июл-21 14:13
Сообщения: 1010
Откуда: Тула
редактор писал(а):
директива __align() не помогает? Ейто не все ли равно что выравнивать, данные, константы, функции?

Да вот в том то и дело, что не всё равно. Справка на armcc (Chapter 9 Compiler-specific Features) говорит что она применима только к переменным и к типам данных, а вот к коду нет. и __at тоже не подходит...
Открыть
9.28 Function attributes
The __attribute__ keyword enables you to specify special attributes of variables or structure fields, functions, and types.

The keyword format is either of the following:
__attribute__((attribute1, attribute2, ...))
__attribute__((__attribute1__, __attribute2__, ...))
For example:
void * Function_Attributes_malloc_0(int b) __attribute__((malloc));
static int b __attribute__((__unused__));
The following table summarizes the available function attributes.
Table 9-3 Function attributes that the compiler supports, and their equivalents

Function attribute Non-attribute equivalent
__attribute__((alias)) -
__attribute__((always_inline)) __forceinline
__attribute__((const)) __pure
__attribute__((constructor[(priority)])) -
__attribute__((deprecated)) -
__attribute__((destructor[(priority)])) -
__attribute__((format_arg(string-index))) -
__attribute__((malloc)) -
__attribute__((noinline)) __declspec(noinline)
__attribute__((nomerge)) -
__attribute__((nonnull)) -
__attribute__((noreturn)) __declspec(noreturn))
__attribute__((notailcall)) -
__attribute__((nothrow)) __declspec(nothrow))
__attribute__((pcs("calling_convention"))) -
__attribute__((pure)) -
__attribute__((section("name"))) -
__attribute__((unused)) -
__attribute__((used)) -
__attribute__((visibility("visibility_type"))) -
__attribute__((weak)) __weak
__attribute__((weakref("target"))) -

Usage
You can set these function attributes in the declaration, the definition, or both. For example:
void AddGlobals(void) __attribute__((always_inline));
__attribute__((always_inline)) void AddGlobals(void) {...}
When function attributes conflict, the compiler uses the safer or stronger one. For example, __attribute__((used)) is safer than __attribute__((unused)), and __attribute__((noinline)) is safer than __attribute__((always_inline)).
Non-Confidential PDF version ARM DUI0375G
Copyright © 2007, 2008, 2011, 2012, 2014, 2015 ARM. All rights reserved.
Home > Compiler-specific Features > Function attributes
Закрыть

_________________
сочувствующий…


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 2016-сен-16 10:47 
Не в сети

Зарегистрирован: 2010-авг-30 19:12
Сообщения: 379
тогда наверное единственный выход __attribute__((section("name"))), а размещение секции выравнивать линкером.

_________________
О сколько нам открытий чудных
Готовит просвященья дух,
И опыт - сын ошибок трудных ... (Пушкин)

Пергаменты не утоляют жажду ("Фауст",Гете)


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 2016-сен-26 01:19 
Не в сети
Аватара пользователя

Зарегистрирован: 2011-авг-21 18:55
Сообщения: 229
В закладке C/C++ есть галочка One ELF Section per Function
Цитата:
Generate one ELF section for each function in source file. Output sections are named with the same name as the function that generates the section. Allows you to optimize code or to locate each function on individual memory addresses. Sets the compiler command-line option --split_sections.


http://www.keil.com/support/man/docs/ar ... 490665.htm
Цитата:
Use __attribute__((section("name"))) to place functions and variables in a named section.


Вот ещё интересная инфа viewtopic.php?f=33&t=3484

_________________
Hack the Planet!


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

Часовой пояс: UTC + 3 часа


Кто сейчас на конференции

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


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

Найти:
Перейти:  
Powered by phpBB® Forum Software © phpBB Group
Русская поддержка phpBB