На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
! Правила раздела "Программирование под PalmOS"
Правила раздела просты:
1. Будьте вежливыми.
2. Задавате вопросы только по теме. Пользовательские вопросы (у меня не работает пальм) являются оффтопиком. Пользуйтесь конференциями palmz.in, hpc.ru, ihand.ru .
3. Поиск вареза запрещен.
4. Пользуйтесь поиском. Не надейтесь, что кому-то доставляет удовольствие отвечать в сотый раз на один и тот же вопрос.
  
> 16-bit code reference to 'MyFarMethod' is out of range
    Link Error : MyFile.c: 'TodoSomething()' 16-bit code reference to 'MyFarMethod' is out of range.
    В одном файле возникла такая ситуация, что при добавлении нескольких строк кода, любых и в любое место (например в какой-нить метод), то линковщик начинает выдавать одну и ту же ошибку, что метод TodoSomething() ссылается на блаблабла и т.д.
    Code Model у меня сейчас small, и менять я ее конечно не хочу.
    Подскажите из-за чего вообще проблема. Во время сборки исполняемого файла линковщику не удается уместить весь мой код в сегментах заданного размера (т.е. small)? Причем текст ошибки никак не зависит от того, какой код и в какое место файла я добавляю.
    Будет ли здесь оптимальным решением, сделать переходный метод в каком-нить более 'близком' файле, основное назначение которого будет только лишь в том чтобы перенаправлять запрос, поступивший от TodoSomething() в MyFarMethod(). Т.е. идея в том, что если для прыжка из TodoSomething() в MyFarMethod() линковщик не находит достаточного места в сегментах памяти, то решением будет перенести вызываемый метод в файл, с которым происходит частое взаимодействие.
    Если не прав, то подскажите, как решить проблему правильно.
    Спасибо.
      Цитата debugx @
      Code Model у меня сейчас small, и менять я ее конечно не хочу.


      А в чём проблема? Поставьте smart или large и проблем не будет.

      small - все прыжки ближние (jsr и иже с ними), вылезают проблемы при прыжке выходящем за пределы минимального и максимального значения Int16

      large - все прыжки дальние, вычисляется адрес функции, кладётся в стэк, затем делается rts - типа выход из процедуры с загрузкой адреса возврата из стэка в pc

      smart - комбинация указанных выше - где можно обойтись ближним прыжком - используется small, где дальний - large.


      Цитата debugx @
      Будет ли здесь оптимальным решением, сделать переходный метод в каком-нить более 'близком' файле


      Можно попробовать перетасовать .с/.сpp файлы в сегменте (вкладка Segments, не Files!!!), при этом порядок линковки изменится и может получиться, что нужная функция "допрыгнет" до другой нужной функции коротким прыжком.
        Цитата
        Поставьте smart или large и проблем не будет.

        Прочитал вот эту переписку: http://www.mail-archive.com/palm-dev-forum@news.palmos.com/msg07110.html
        Правильно ли я понял, если перейти с модели памяти small на smart, то межсегментные прыжки все станут дальними, но при этом часть внутрисегментных прыжков также станет дальними. Если это так, не повлечет ли это за собой некоторую потерю в производительности. Ведь в этом случае есть смысл всё таки стараться использовать small model пока есть возможность, верно?
          Цитата debugx @
          Правильно ли я понял, если перейти с модели памяти small на smart, то межсегментные прыжки все станут дальними


          Межсегментные прыжки при любой модели памяти всегда дальние, т.к. каждый сегмент кода находится в отдельном 'code' ресурсе, а ресурсы могут лежать в сторидже в разных местах.

          Цитата debugx @
          но при этом часть внутрисегментных прыжков также станет дальними.


          Да, какая-то часть прыжков станет дальними.

          Цитата debugx @
          Если это так, не повлечет ли это за собой некоторую потерю в производительности.


          Теоретически затраты на дальний прыжок, естественно, выше, т.к. количество asm-инструкций больше. На деле этого вообще не заметно.
          Сообщение отредактировано: Thunder -
          1 пользователей читают эту тему (1 гостей и 0 скрытых пользователей)
          0 пользователей:


          Рейтинг@Mail.ru
          [ Script execution time: 0,0407 ]   [ 14 queries used ]   [ Generated: 9.07.25, 05:29 GMT ]