С Новым годом! Форум программистов, компьютерный форум, киберфорум
Наши страницы

__attribute__(section) - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Скачать библиотеку Intel Integrated Performance Primitives for Windows http://www.cyberforum.ru/cpp/thread1659099.html
Начал разбираться со звуком в C++ и мне посоветовали хорошую библиотеку Intel IPP. Но в инете не могу ее найти и скачать. Есть 30ти дневная версия на офф сайте Intel, но нужна "нормальная". Помогите,...
C++ [дизайн и эволюция] перегрузка макросов Часть 0. Вместо предисловия. всем привет. недавно, для одной из моих задач, мне потребовалось иметь возможность перегрузить макрос под разное количество аргументов. и хотя на самом деле... http://www.cyberforum.ru/cpp/thread1658956.html
Передача данных между программами C++
Здравствуйте, Уважаемые! Предо мною встала проблема. Есть две программы, которые должны связываться между собой. Точнее одна программа должна посылать другой программе данные. Раньше всё...
Как считывать значение строки на экране и записывать её в переменную? C++
Здравствуйте. Есть программа прикасаться к которой нельзя. То есть она работает сама по себе. В определённой области данной программы отображается значение(цифры) нужно считать эти цифры и записать...
C++ Аргументы при запуске из терминала http://www.cyberforum.ru/cpp/thread1657635.html
Доброго времени суток! Подскажите как реализовать с наименьшими изменениями. Есть программа на C++ с switch те можно выбирать что именно выполнять, где аргумент для switch вводится через cin. Как...
C++ Ffmpeg выдает moov atom not found если прервать процесс кодирования имеется код выполняющий кодирование и запись видео в файл (через avio_open2 / avformat_write_header / av_interleaved_write_frame / av_write_trailer / avio_close) extern "C" { #include... подробнее

Показать сообщение отдельно
Hans_
0 / 0 / 0
Регистрация: 11.02.2016
Сообщений: 4
12.02.2016, 08:02  [ТС]
Ну во первых это не 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
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.