ВходНаше всё Теги codebook 无线电组件 Поиск Опросы Закон Суббота
6 июля
164438
fk0, легенда (24.08.2009 13:39 - 13:43, просмотров: 1489)
Внимание! Ошибка в Hitech-C 9.51pl2 (забывает переключать банки): Содержимое bigbss и bss оказывается в разных банках, а при генерации кода это НЕ УЧИТЫВАЕТСЯ. Но всё учитывается если переменные в секции param (movlb генерируется). Проблема, похоже (я листингов приводить не буду, немного исследовал) заключается в том, что bigbss и bss тут не различны с точки зрения компилятора почему-то, скорей потому, что это зависит от переменной, а не секции. А переменная static union, в нормальных условиях кладётся либо в param либо в bss. А в bigbss её кладёт только если static не в пределах модуля, а в пределах функции. Выводы примерно такие: static в теле функции лучше не использовать, всё выносить в модуль. И самое главное -- надо ЧИТАТЬ ЛИСТИНГИ и смотреть что попало в bigbss -- это не сложно. Туда могут попадать объекты типа char (у них доступ через movff, где надо movlb ставится корректно), либо что-то не вмещающееся в bss (большое, доступ через indf). Проблема, похоже, специфична для static struct и unions в теле функции.
[ZX]