ВходНаше всё Теги codebook 无线电组件 Поиск Опросы Закон Пятница
22 ноября
183551
fk0, легенда (02.03.2010 14:09, просмотров: 1390)
Внимание! Очередной баг в PICC-18 9.51pl2. Если что-то в секции const (или аналогичной) размещается по адресу 0xffff и значит считывается через инструкци TBLRD+, то в виду автоинкремента TBLPTRU устанавливается в 1. Но компилятор с ключём --cp=16 не следит за TBLPTRU и не (пере)устанавливает его никогда! Решение проблемы следующее: завести секцию из одного байта и насильно разместить её по адресу 0xffff (в программной памяти), что не даст секции const попадать в этот адрес. В исходнике пишем: asm("psect bugffff,global,class=CODE,delta=1"); asm("ds 1"); В компиляторе секция размещается по нужному адресу с помощью ключа -L-pbugffff=0ffffh (в MPLAB Project -> Build Options -> Project, далее выбираем вкладку Global в окне "Additional command line..." вводим ключ и нажимаем кнопку "Add...") Описываемая проблема актуальна для микроконтроллеров с объёмом программной памяти больше 64КБайта и реализованным регистром TBLPTRU. Вне зависимости от того сколько программной памяти используется (const может быть размещён как раз в конце памяти).
[ZX]