Как решить проблему «Ближний сегмент данных больше 64 КБ» на Palm с помощью CodeWarrior9? - PullRequest
1 голос
/ 04 мая 2009

Я работаю над большим проектом, и теперь я нахожусь в стеке с этой ошибкой «Сегмент данных, близкий к 64 КБ».

Если я прокомментирую «FrmSetEventHandler (frm, DadosConstrutivos1HandleEvent);» на PrvAppHandleEvent в PilotMain программа компилирует это красиво. Если я пытаюсь использовать de call, я получаю сообщение об ошибке.

Я уже использую многосегментный режим и «Расширенный режим».

Как мне решить эту проблему?

Спасибо Родриго Лейтэ Гомиде

Ответы [ 2 ]

0 голосов
/ 14 июля 2009

Нет хорошего способа решить эту проблему. Код 68K в Palm OS может получить доступ только к небольшому количеству статических данных программы, так как набор инструкций 68K обеспечивает только смещение + -32K для адресации данных. Для поддержки дальнейшей работы потребуется значительное изменение компилятора, поскольку компилятору потребуется генерировать код для выполнения сложной арифметики с указателями, и ни CodeWarrior, ни prc-tools не поддерживают это.

Вот несколько советов:

  • Если у вас большие таблицы данных, попробуйте переместить их в свои собственные ресурсы, где вы будете загружать и блокировать их расположение во время выполнения. Это переместит их из раздела данных.
  • Включите функцию карты компоновщика и посмотрите, как распределяется ваш раздел данных, и посмотрите, есть ли большие объекты данных или массивы, которые вам не нужны.
  • Вместо того, чтобы объявлять глобальные переменные, используйте глобальные указатели для памяти, которую вы выделяете с помощью MemGluePtrNew.
0 голосов
/ 27 мая 2009

Я не использую CodeWarrior, но вместо этого я использую PocketStudio, и «та же проблема» часто случается со мной.

Каждый модуль представляет собой «сегмент кода», поэтому, когда ваш скомпилированный модуль становится больше 64 КБ кода, компилятор предупреждает вас и не связывает ваш код.

Попробуйте переместить один код из этого модуля в другой.

Или Вы можете использовать #pragma:

#pragma segment Seg1

... code ...

#pragma segment Seg2

... code ...

С уважением,

Christian.

...