-
- Потому, что одной маленькой секции, может не хватить на все данные,
к которым хотелся быстрый доступ (ко всем!). Поэтому предложено
объединять данные в свои сегменты. - Nikolay_Po(05.07.2026 09:41)
- это сложный ответ, потому что в этой теме мы очень удачно обошли
вопрос управления содержимым $gp по ходу выполнения кода. тут бы я
декларировал бы следующий принцып "в собранном коде - каждой
реальной секции маленьких данных, свое значение $gp ". и тут
рождается новая тема - возможность использовать внешний
подгруженный бинарно-совместистимый код, оверлеи, самомодификацию и
рефлексию(!!!), но это выходит за рамки школьного образования :) - klen(05.07.2026 10:36)
- А как переназначение $gp в принципе совместимо с прерываниями? Его
тогда нужно добавлять в сохраняемый контекст. - =AlexD=(06.07.2026 10:52)
- УГУ. И в переключалку контекста ОСРВ, если используется. - Nikolay_Po(06.07.2026 10:57)
- Главное для меня то, что в таком случае, придётся добавить gp в набор сохраняемых регистров при переключении контекста ОСРВ. - Nikolay_Po(05.07.2026 10:38)
- А как переназначение $gp в принципе совместимо с прерываниями? Его
тогда нужно добавлять в сохраняемый контекст. - =AlexD=(06.07.2026 10:52)
- это сложный ответ, потому что в этой теме мы очень удачно обошли
вопрос управления содержимым $gp по ходу выполнения кода. тут бы я
декларировал бы следующий принцып "в собранном коде - каждой
реальной секции маленьких данных, свое значение $gp ". и тут
рождается новая тема - возможность использовать внешний
подгруженный бинарно-совместистимый код, оверлеи, самомодификацию и
рефлексию(!!!), но это выходит за рамки школьного образования :) - klen(05.07.2026 10:36)
- Данные случайным образом попадают в .sdata .sbss. Чтоб можно было
бы управлять порядком прижатия нужных мне кусочков данных. - klen(05.07.2026 09:38)
- А чем вам не нравится стандартный линк файл от WCH который есть во
всех примерах - там порядок сегментов .data / .sdata / .sbss / .bss
и $gp инициализируется на начало сегмента .sdata + 0x800. И так как
.sbss = .bss то при релаксации (-Wl,--relax включена по умолчанию)
всё .bss доступно сразу по $gp (естественно в пределах +-2K
смещения). А для использования .sdata надо задать как раз параметр
-msmall-data-limit. Сегменты .sdata и .sbss рядом вместе. Zikon(664 знак., 05.07.2026 11:38)
- А вот в известной библиотеке ch32fun очень странный линк файл по поводу $gp. Инициализация $gp - адрес сегмента .data + 0x3fc. И как это понимать? Компилятор/линкер всё равно не будут работать с данными в .data через $gp. А если хотите всё же .data прихватить - задирайте значение -msmall-data-limit, но потом не удивляйтесь что 4К быстро закончились для $gp. Стандартный вариант от WCH - более оптимальный. - Zikon(05.07.2026 11:47)
- А чем вам не нравится стандартный линк файл от WCH который есть во
всех примерах - там порядок сегментов .data / .sdata / .sbss / .bss
и $gp инициализируется на начало сегмента .sdata + 0x800. И так как
.sbss = .bss то при релаксации (-Wl,--relax включена по умолчанию)
всё .bss доступно сразу по $gp (естественно в пределах +-2K
смещения). А для использования .sdata надо задать как раз параметр
-msmall-data-limit. Сегменты .sdata и .sbss рядом вместе. Zikon(664 знак., 05.07.2026 11:38)
- Потому, что одной маленькой секции, может не хватить на все данные,
к которым хотелся быстрый доступ (ко всем!). Поэтому предложено
объединять данные в свои сегменты. - Nikolay_Po(05.07.2026 09:41)