|
0 / 0 / 0
Регистрация: 20.06.2011
Сообщений: 269
|
|
Адреса переменных попорядку, как?05.02.2014, 13:02. Показов 4541. Ответов 15
Метки нет (Все метки)
Здраствуйте.
Вопрос достаточно простой, но что то не могу догнать как это сделать в С++. Есть файл *.с с переменными (инициализация) и *.h с объявлениями (в нём прописаны переменные как внешнии). Мне нужно грузить эти переменные в dataftosh, потом выгружать их оттуда, переменных около 7000. Записывать по одной потом выгружать по одной долго, да и сбоит иногда. Загонять все скопом можно, но для простоты нужно чтобы все они распологались подряд в памяти, в отладчике смотрю вроде попорядку но не все и не в таком как прописаны в *.с порядке. Как указать компилятору что переменные в некотором куске *.с файла должны идти попорядку адреса. Все переменные занести в одну структуру тоже не вариант сильно много переделок получиться.
0
|
|
| 05.02.2014, 13:02 | |
|
Ответы с готовыми решениями:
15
Как вывести адреса переменных? Как заменить определенный символ на номера попорядку? Адреса переменных |
|
0 / 0 / 0
Регистрация: 06.12.2016
Сообщений: 1,864
|
||||||
| 05.02.2014, 13:10 | ||||||
|
Всё-таки запихайте все переменные в struct. А дальше можете указатель на этот struct преобразовать к char * (а размер - как sizeof(структуры) и сливать себе во флеш...
Оставить отдельными переменными, без struct - не вариант: компилятор имеет право их переупорядочивать, а то и соптимизирует какую нафиг. Да, если вам неудобно к ним обращаться через структуру - не вопрос, на то есть #defyme в Си и ссылки в C++. Т.е. переделать вам достаточно будет только то место, где переменные определяются. Например
0
|
||||||
|
0 / 0 / 0
Регистрация: 11.12.2011
Сообщений: 789
|
|
| 05.02.2014, 13:15 | |
|
Если переменные однотипные - можно запихать их в массив.
0
|
|
|
0 / 0 / 0
Регистрация: 21.08.2011
Сообщений: 1,057
|
|
| 05.02.2014, 13:46 | |
|
7000 переменных наводит на нехорошие мысли о квалификации программиста. Тем более 7000 глобальных переменных.
Начните с пересмотра кода и упаковки самых нужных переменных в массивы или структуры.
0
|
|
|
0 / 0 / 0
Регистрация: 20.06.2011
Сообщений: 269
|
|
| 05.02.2014, 14:34 | |
|
Ну началось. Некоторые переменные особняком стоят (штук 30), остальные в массивах это 32 массива. всё в куче около той цифры что я написал, это все настроечные данные, поэтому никакого пересмотра не может быть. Фактически нужно склеить 30+32 = 62 адреса чтобы шли по порядку.
soumt_imobti, ну можно сделать не глобальные а локальные static ну так этож не поменяет ситуации. Переформулирую: как объявить секцию с набором переменных (думаю компилятор в этом случае сделает всё по порядку)?
0
|
|
|
0 / 0 / 0
Регистрация: 20.07.2012
Сообщений: 620
|
|
| 05.02.2014, 14:58 | |
|
Голосую за структуру... Практика показала, что убирать конфигурационные данные в структуры, записывать и читать их как один объект - очень удобно.
Проблема с упорядочиванием глобальных данных довольно фундаментальна. Насколько мне опыт подсказывает, без необходимости данные не переставляются. В основном, компилятор раскидывает данные между .data и .bss секциями, но внутри них можно надеяться на сохранение порядка. (Хотя, это на усмотрение компилятора) Действительно, интересно, есть ли ключи, регламентирующие этот процесс..
0
|
|
|
0 / 0 / 0
Регистрация: 20.06.2011
Сообщений: 269
|
|
| 05.02.2014, 15:02 | |
|
Делаю структуру, видимо то, что пришло на ум первое и оказалось наиболее возможным.
0
|
|
|
0 / 0 / 0
Регистрация: 21.08.2011
Сообщений: 1,057
|
|
| 05.02.2014, 15:02 | |
|
Что за проц и какой компилятор? Обычно декларация статиком привязывает переменную к определенному адресу. Для GCC есть атрибуты, они говорят линкеру конкретно в какую секцию.
Начали из 7к переменных, а закончили на 62 адресах. Уже неплохо. Массивы идут подряд в памяти, на то они и массивы. Надо только адрес начала обьявить.
0
|
|
|
0 / 0 / 0
Регистрация: 07.03.2010
Сообщений: 918
|
|
| 05.02.2014, 15:12 | |
|
__attribute__((section(".shit")))
конечно, если это GCC
0
|
|
|
0 / 0 / 0
Регистрация: 20.06.2011
Сообщений: 269
|
|
| 05.02.2014, 15:42 | |
|
компилятор CCS v5, контроллер - TMS, серия - C2000.
0
|
|
|
0 / 0 / 0
Регистрация: 06.06.2011
Сообщений: 2,514
|
|
| 05.02.2014, 16:21 | |
|
правильно конечно конфигурационные данные хранить в структурах.
можно прагмами заставить линкер разложить переменные в строго отведённой для этого области памяти и потом её целым куском во флэш писать/читать. но если не хочется перепахивать тонны говнокода, определяя куче переменных секции, или распихивая их по структурам, если флэша не жалко и переменные более менее одинакового размера можно просто сделать массив указателей const void * p[7000] = {&var_a, &var_b, ...}; ну и массив размеров, если данные по размерам разные. const int s[7000] = {sizeof(var_a), sizeof(var_b), ...}; а чтобы тупых ошибок копипаста избежать можно еще в макросы как-нибудь обернуть это безобразие, чтобы не получилось так что у какой-нибудь переменной размер соседа оказался. ну и сохранять/загружать используя этот массив указателей. с постраничной записью флэша костыли знатные получатся :) так что решение, пожалуй, самое некрасивое, но, возможно, самое простое.
0
|
|
|
0 / 0 / 0
Регистрация: 07.03.2010
Сообщений: 918
|
||
| 05.02.2014, 18:25 | ||
0
|
||
|
0 / 0 / 0
Регистрация: 06.12.2016
Сообщений: 1,864
|
|
| 05.02.2014, 18:36 | |
|
... а лучше - сделать способом, не привязанным к конкретному компилятору и не ломающим мозг тому, кто будет потом читать этот код.
Т.е. struct на 62 элемента (ну и если при этом много править там, где данные используются - то 62 строчки вида int &myVar = myBigStruct.myVar; ).
0
|
|
|
0 / 0 / 0
Регистрация: 26.04.2010
Сообщений: 1,445
|
|
| 05.02.2014, 22:06 | |
|
не забываем, что в структуре переменные могут быть выровнены по границе машинного слова. И тоже гуглить настройки компилятора, чтобы это отключить.
0
|
|
|
0 / 0 / 0
Регистрация: 06.12.2016
Сообщений: 1,864
|
|
| 05.02.2014, 22:09 | |
|
Это да, но я об этом даже упоминать не стал, т.к. автору не надо таскать структуры между девайсами с разной архитектурой, значит, в худшем случае он потеряет сколько-то байт на выравнивание, и всё.
0
|
|
|
0 / 0 / 0
Регистрация: 20.06.2011
Сообщений: 269
|
|
| 06.02.2014, 10:38 | |
|
Всё сделанно, всё работает, не так уж и много исправлять пришлось. Память 16 бит, переменные такие же, поэтому всё нормально в структуре по порядку получилось.
0
|
|
| 06.02.2014, 10:38 | |
|
Помогаю со студенческими работами здесь
16
Адреса переменных, показать их
Адреса переменных в моем ноуте
Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Реалии
Hrethgir 01.03.2026
Нет, я не закончил до сих пор симулятор. Эта задача сложнее. Не получилось уйти в плавсостав, но оно и к лучшему, возможно. Точнее получалось - но сварщиком в палубную команду, а это значит, в моём. . .
|
Ритм жизни
kumehtar 27.02.2026
Иногда приходится жить в ритме, где дел становится всё больше, а вовлечения в происходящее — всё меньше. Плотный график не даёт вниманию закрепиться ни на одном событии. Утро начинается с быстрых,. . .
|
SDL3 для Web (WebAssembly): Сборка библиотек: SDL3, Box2D, FreeType, SDL3_ttf, SDL3_mixer и SDL3_image из исходников с помощью CMake и Emscripten
8Observer8 27.02.2026
Недавно вышла версия 3. 4. 2 библиотеки SDL3. На странице официальной релиза доступны исходники, готовые DLL (для x86, x64, arm64), а также библиотеки для разработки под Android, MinGW и Visual Studio. . . .
|
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога
Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
|
|
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование
. \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json>
Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом.
# Check if. . .
|
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так:
https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347
Основана на STM32F303RBT6.
На борту пять. . .
|
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
|
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу,
и светлой Луне.
В мире
покоя нет
и люди
не могут жить в тишине.
А жить им немного лет.
|