Форум программистов, компьютерный форум, киберфорум
C++
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.50/4: Рейтинг темы: голосов - 4, средняя оценка - 4.50
Я в этом не шарю
 Аватар для Segaman
4 / 4 / 3
Регистрация: 03.09.2014
Сообщений: 191

Константные списки попадают в ram, а не в rom

20.04.2019, 22:47. Показов 893. Ответов 1
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
пишу код под m68k
так вот когда я пишу константный список и определяю его, он почему-то определяется и хранится в ОЗУ, а не в ПЗУ
выглядит так:
C++
1
2
3
4
5
6
7
static const GameMode _gm;
static const gmStartup _gms;
static const GameMode *const gamemodeList[] =
{
  &_gm,
  &_gms
};
думал проблема повсеместная и переместил секцию .data сразу за .text в ПЗУ
но в таком случае другие списки тоже стали ReadOnly
C++
1
2
3
4
static volatile u16 value[] =
{
  14, 15, 16, 17
};
они должны быть редактируемы и находиться в ОЗУ, а константный список - в ПЗУ.
подскажите, как переместить такой список в ПЗУ?

Добавлено через 20 минут
сами объекты спокойно определяются в ПЗУ
C++
1
2
static const GameMode _gm;
static const gmStartup _gms;
но только не списки с указателями на них, что максимально нелогично
я даже написал const перед определением типа указателя и перед названием, чтобы явно сказать компилятору, что это константа и её стоит поместить в ПЗУ, а не в ОЗУ, но получаем то что получаем.

Добавлено через 22 минуты
пробовал даже кастомную секцию определять
C++
1
2
3
4
5
6
__attribute__ ((section (".constdata")))
static const GameMode *const gamemodeList[] =
{
  &_gm,
  &_gms
};
и добавлять её в состав секции .text
.text 0x00000000:
{
KEEP(*(.text.keepboot)) *(.text.*) *(.text)
. = ALIGN(0x4);
__CTOR_LIST__ = .;
LONG((__CTOR_END__ - __CTOR_LIST__) / 4 - 2)
*(.ctors)
LONG(0)
__CTOR_END__ = .;
__DTOR_LIST__ = .;
LONG((__DTOR_END__ - __DTOR_LIST__) / 4 - 2)
*(.dtors)
LONG(0)
__DTOR_END__ = .;
*(.rodata .rodata.*)
*(.gcc_except_table .gcc_except_table.*)
*(.eh_frame_hdr)

. = ALIGN(0x4);
__INIT_SECTION__ = . ;
*(.init)
SHORT (0x4E75) /* rts */

__FINI_SECTION__ = . ;
*(.fini)
SHORT (0x4E75) /* rts */

_etext = .;
*(.lit)
*(.constdata)
} > rom
но результат тот же
вот если что определение класса
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
/*-------------------------------------------
 * CLASS
 *-----------------------------------------*/
class GameMode
{
  ///////////////////////////
  /// VIRTUAL CONSTRUCTOR/DESTRUCTOR
public:
  GameMode();
  virtual ~GameMode();
 
  ///////////////////////////
  /// VIRTUAL METHODS
  virtual void init() const;
  virtual void deinit() const;
  virtual void process() const;
  virtual void draw() const;
};
 
/*-----------------------------------------*/
в конструкторе ничего нет
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
20.04.2019, 22:47
Ответы с готовыми решениями:

Константные и не константные ссылки. Приведения типов. Нужно уточнение
Не очень понимаю в чем различие (2,3 строчки). int x = 10; double &y = x; const double &y = x; Почему для не...

Память RAM и ROM
Нужно записать в одну ячейку RAM любое значение и перенести его в память ROM. Все нужно сделать на Verilog. Очень нужна ваша помощь!

Мой dvd-rom стал работать как cd-rom
мой dvd-rom стал работать как cd-rom после того как я удалил из реестра запись с игрой в папке"mo-soft":help:

1
Я в этом не шарю
 Аватар для Segaman
4 / 4 / 3
Регистрация: 03.09.2014
Сообщений: 191
21.04.2019, 13:51  [ТС]
судя по всему список заключенный в скобки хранится в ОЗУ
C++
1
2
3
4
{
  &_gm,
  &_gms
};
а в ПЗУ сохраняются указатели на них в ОЗУ

т.е. в ПЗУ список указателей на ОЗУ, где хранятся указатели на объекты, которые находятся в ПЗУ.
что нужно написать, чтобы назначение списка внутри скобок тоже хранилось в ПЗУ?

Добавлено через 58 секунд
как переместить содержимое заключенные в скобки в секцию .text ?

Добавлено через 9 минут
для наглядности бинарник с адресами:
Code
1
2
ROM 00000DF0: 0x00FF0004, 0x00FF0008
RAM 00FF0004: 0x00000E1C, 0x00000E20
Добавлено через 1 час 2 минуты
порыскав немного в местах схожими по смыслу с тем, чего я пытаюсь добиться
https://stackoverflow.com/ques... arm-device
https://stackoverflow.com/ques... ash-memory
пришёл к выводу, что гиблое это дело, определять классы с виртуальными методами, как константы.
как бы я не выкручивался, указатели на объекты этих классов равны нулю.
компилятор на отрез отказывается писать в ПЗУ указатели виртуальных методов.

вообщем решил переопределить класс в структуру и в её теле хранить указатели на функции, тем самым отказавшись от прелестей С++, которыми так жаждал воспользоваться, почему и полез в сие дебри.

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
// DEFS
typedef void (*proc)();
 
/*-------------------------------------------
 * CLASS
 *-----------------------------------------*/
//class GameMode
//{
//  ///////////////////////////
//  /// VIRTUAL CONSTRUCTOR/DESTRUCTOR
//public:
//  GameMode();
//  virtual ~GameMode();
 
//  ///////////////////////////
//  /// VIRTUAL METHODS
//  virtual void init() const;
//  virtual void deinit() const;
//  virtual void process() const;
//  virtual void draw() const;
//};
 
/*-------------------------------------------
 * STRUCT
 *-----------------------------------------*/
struct GameMode
{
  proc init;
  proc deinit;
  proc process;
  proc draw;
};
 
/*-------------------------------------------
 * FORWARD
 *-----------------------------------------*/
extern const GameMode gmNull;
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
21.04.2019, 13:51
Помогаю со студенческими работами здесь

При смене DVD ROM на CD ROM не грузится Windows
винда грузиться и комп работает отлично если подключен дивиди ром сата , а при замене на сдром обычный винда вообще не грузиться если...

Открываю cd-rom, кладу туда диск, закрываю cd-rom, и потом он отрывается сам на половину и закрывается
Такая проблема: открываю cd-rom, кладу туда диск, закрываю cd-rom, и потом он отрывается сам на половину и закрывается в чём проблема? ...

RAM, чтение и запись в RAM, Pointer ы
Так! Начну сразу с проблемы. :) Допустим есть приложение "какая-то хрень.exe", а в нем есть переменная допустим "32" с типом...

Lenovo 110-15IBR / WDC WD5000LPCX-24VHAT0 / RAM 2Gb: заменять на SSD или увеличить RAM, или разом это всё?
Что первое заменить на ноуте - 1) HDD заменить на SSD 2) RAM купить планку на 4 Gb ? Хочется чтоб быстрее работал....

Asus P5PQL-am без RAM пищит, с RAM тоже пищит
Asus P5PQL-am без оперативка пишит (это понятно что нет оперативка) а с оперативка тоже пишит.... Все напряжение оперативки присутствует,...


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

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
Новые блоги и статьи
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение: В этой книге («Подход, основанный на вариантах использования») Ивар утверждает, что архитектура программного обеспечения — это структуры,. . .
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip На первой гифке отладочные линии отключены, а на второй включены:. . .
SDL3 для Web (WebAssembly): Идентификация объектов на Box2D v3 - использование userData и событий коллизий
8Observer8 02.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-collision-events-sdl3-c. zip Сканируйте QR-код на мобильном и вы увидите, что появится джойстик для управления главным героем. . . .
Реалии
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 позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru