Форум программистов, компьютерный форум CyberForum.ru
Наши страницы

C++

Войти
Регистрация
Восстановить пароль
 
Hans_
0 / 0 / 0
Регистрация: 11.02.2016
Сообщений: 4
#1

__attribute__(section) - C++

11.02.2016, 08:28. Просмотров 543. Ответов 5
Метки нет (Все метки)

Здравствуйте.
Есть интересная идея - объединение разрозненных данных в одну кучку.
Например, в разных местах кода я объявляю переменные с указанием в какой секции они должны расположиться. тем самым я получаю массив данных лежащих рядом дуг с другом.
Вопрос, как получить указатель на начало этой секции и ее размер?
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
11.02.2016, 08:28
Здравствуйте! Я подобрал для вас темы с ответами на вопрос __attribute__(section) (C++):

Как хранить переменную типа char* в named shared memory section? - C++
Во общем есть код: extern "C" __declspec(dllexport) void SetOptions(char* string); #pragma data_seg("sms") char* viewString =...

Как можно просмотреть все зарегистрированные имена SharedMemory Section в Windows? - C++
Вот есть несколько моих программ, которые общаются через шаред мемори, созданную по средствам CreateFileMapping с определёнными именами (в...

Ошибка - Attribute 'onchange' is not a valid attribute of element - C# ASP.NET
Взято из книги: <asp:DropDownList ID="lstRegions" Runat="server" onchange="GetTerritories(this.value);" /> Появляется Message: ...

Как убрать вывод компонента catalog.section.list в компоненте catalog.section - 1С Битрикс
Если нажать на первый уровень каталога рис 1 появляется весь товары этого уровня. Но и выводятся ссылки второго уровня рис 2. Как можно...

Attribute и Reflection - C#
Здравствуйте. Сейчас вроде освоил темы атрибутов и рефлексии. Только вот, не хватает примеров этих тем в интернете. Или даже каких нибудь...

read-only attribute - Windows 7
Проблема в том, что для всех папок (но не для фалов) в системе установлен атрибут "только для чтения". И даже при создании новой папки,...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Убежденный
Системный программист
Эксперт С++
15550 / 7058 / 1114
Регистрация: 02.05.2013
Сообщений: 11,468
Завершенные тесты: 1
11.02.2016, 08:49 #2
Цитата Сообщение от Hans_ Посмотреть сообщение
тем самым я получаю массив данных лежащих рядом дуг с другом.
И в чем выгода?
Данные с общими атрибутами, кстати, и так размещаются компоновщиком в одной секции.
0
Hans_
0 / 0 / 0
Регистрация: 11.02.2016
Сообщений: 4
11.02.2016, 09:41  [ТС] #3
В таких секциях я планирую хранить описание класса (description). для каждого класса определяется одноименная секция, а внутри этого класса описываются поля в произвольном порядке, description-ы которых автоматически попадают в этот массив.
Порядок размещения description-ов внутри массива мне не важен. данные имеют однотипный формат и легко парсятся какой то вспомогательной функцией, главное узнать начало и конец этого массива.
У меня сейчас есть подобное решение, но мне приходится в конкретном месте прописывать имена полей, которые должны попасть в этот массив, а я хочу, чтобы помеченные поля автоматически попадали в DescriptionList при их объявлении.
Пример:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
DESCRIPTION_LIST(Diesel); //Макрос объявления секции
struct Diesel {
    constexpr Diesel(const Valve &valve):
        valve(valve)
    {}
private:
    SAVED_FIELD(Frequency, "Обороты двигателя", frequency) = 1800_rpm; //Макрос описания сохраняемого поля, Тип поля, Описание поля, Имя поля
    SAVED_FIELD(Valve, "Актуатор газа", valve);
public:
    DESCRIPTION_PTR(); //Макрос создания массива description-а в кодовой памяти
};
template<const char* CAPTION>
using DieselVariable = Variable<Diesel, VarInfo<CAPTION> >;
В итоге получается умная система, умеющая сохранять и загружать все помеченные параметры, автоматически генерировать меню параметров, протоколы взаимодействия и т.д. и все это генерировать на этапе компиляции и помещать в кодовую память.
При создании сложной системы с тысячами параметров очень легко ошибиться или что нибудь забыть, а при таком подходе компилятор сам все сгенерирует и не даст программисту допустить глупые ошибки.
0
Убежденный
Системный программист
Эксперт С++
15550 / 7058 / 1114
Регистрация: 02.05.2013
Сообщений: 11,468
Завершенные тесты: 1
11.02.2016, 10:29 #4
Я так и не понял, какую этот подход решает задачу.
Генерировать описание классов и документацию можно банально doxygen-ом.
Можно его вообще сделать частью процесса сборки.

А иметь в exe кучу секций на каждый класс только ради описания -
это мне кажется нерационально. При этом еще и код усложняется и
теряет такое качество, как переносимость.
0
Hans_
0 / 0 / 0
Регистрация: 11.02.2016
Сообщений: 4
12.02.2016, 08:02  [ТС] #5
Ну во первых это не exe, а hex для микроконтроллера, объем памяти которого очень ограничен 4к RAM и 128к TEXT, в которую едва влезают сами переменные, а тут еще нужно разместить их описание для возможности сохранения, журналирования, доступа через экран и протоколы связи. для этого и построена такая сложная система генерации описания всех переменных.
Во вторых, что можно сгенерировать doxygen-ом. Система сложная дереровидная, возможно даже с замкнутыми ветвями.
Второй пример для чего это нужно
Если несколько модулей:
- Боард, у которого есть параметры, которые он хочет сохранять (яркость экрана, журналирование включения и выключения устройства и т.п)
- Апликейшин, у которого если свои, важные для него параметры (сетевой адрес, пароли доступа и т.п.)
- Хал, со своими параметрами (Подключенные модули, калибровочные значения и т.п.)
- Система с параметрами (типы датчиков, контролируемые параметры, события и т.п.)
Каждый такой модуль создает свой DescriptionList и помещает указатель на него в общий List путем размещения указателя в заранее известную секцию, а программа при работе видя этот массив знает как с ним взаимодействовать.
Допустим, нужно подключить новый модуль, например протокол общения с сервером или панелью оператора. присоединенный модуль автоматически пропишет свой интерфейс в DescriptionList.
А с учетом вышеописанных ограничений это все должно компактно укладываться в память контроллера, а значит все должен выполнять компилятор (C++11 в это очень помог со своим constexpression и прочими фишками).
Наверное размещение такой сложной системы в маленький контроллер выглядит глупо, но такава судьба.
А самая главная задача - уменьшить вероятность ошибок программиста переложив часть рутины на компилятор.

Добавлено через 4 часа 4 минуты
с помощью ассемблерной вставки смог достать указатель на секцию
C++
1
2
3
4
5
6
7
8
const char data1[] __attribute__((section("MyData"))) __attribute__((used)) = "0000";
const char data2[] __attribute__((section("MyData"))) __attribute__((used)) = "1111";
int main(){
    asm volatile (
        "LDI r24, lo8(MyData) \n"
        "LDI r25, hi8(MyData) \n"
    );
};
Остается вопрос как получить размер?

Добавлено через 16 часов 37 минут
или такой способ
C++
1
extern "C" const void* MyData;
Но здесь также невозможно вычислить размер секции
0
castaway
Эксперт С++
4884 / 3020 / 370
Регистрация: 10.11.2010
Сообщений: 11,078
Записей в блоге: 10
Завершенные тесты: 1
19.02.2016, 07:10 #6
Цитата Сообщение от Hans_ Посмотреть сообщение
Остается вопрос как получить размер?
Вы можете "распарсить" исполняемый файл.
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
19.02.2016, 07:10
Привет! Вот еще темы с ответами:

Class instance has no attribute - Python
Приветствую. В питоне не особо шарю, поэтому нужна ваша помощь. Есть чужой, якобы когда-то точно рабочий скрипт обрабатывающий некие...

Ошибка AttributeError (object has no attribute) - Python
Уважаемые форумчане, подскажите, пожалуйста, в чём суть такой ошибки. Уже второй день бьюсь. Вроде пишу всё правильно. models.py ...

AttributeError: 'NoneType' object has no attribute 'get' - Python
Всем привет. Решил написать скрипт для поиска музеев в СПб. Взял за основу рабочий скрипт, написанный вчера, удалил ненужное и получилось...

Ошибка missing = in XML attribute - ExtJS
Здравствуйте, появилась проблема с EXT.AJAX, ни в какую не хочет создавать новый combobox с определенными данными из store делаю так:...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
19.02.2016, 07:10
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru