Перейти к содержанию
    

xc8 pic18f4525, странные глюки

Всем привет, имею очень странные глюки с компилятором XC8 1.32, глюки повторяются в платном и не платном режиме.

Глюк - неправильная работа функции sprintf,

 

 sprintf(text,"W %2dим %2d.%.2dл",counter,FORMAT_VOLUME_CL(counter_l));

 

при обработке формата %.2d, printf зависает, и забивает всю память пробелами.

раскопал dotprnt.c, ошибка происходит в куске

 

#ifdef	WIDTH
	if(width > c)
		width -= c;
	else
		width = 0;
#endif

 

условие (width > c) периодически срабатывает не правильно, полез дизассемблер. Вот кусок сравнения sint8 и sint16:

 

width = 0x1F0 (16 знак бит)

с = 0x1F2 (8 бит знак)

 

!#ifdef	WIDTH
!		if(width > c)
00 0xA3C: MOVLW 0x80   //   w=0x80
01 0xA3E: MOVLB 0x1     // bank = 1
02 0xA40: BTFSC 0xF2, 7, BANKED // если с < 0
03 0xA42: MOVLW 0x7F //w = 0x7f
04 0xA44: MOVWF 0xE7, BANKED  /// *(0x1E7) = w  запись временного значения
05 0xA46: MOVF 0xF0, W, BANKED // w = LOW(width)
06 0xA48: SUBWF 0xF2, W, BANKED // w = LOW(width) - c
07 0xA4A: MOVF 0xF1, W, BANKED // w = HIGH(width)
08 0xA4C: XORLW 0x80 // w = w ^ 0x80
09 0xA4E: MOVLB 0x0 // bank = 0
10 0xA50: SUBWFB 0xE7, W, BANKED // w = w - *(0x0E7)
11 0xA52: BC 0xA64 // переход если Сarry
!			width -= c;

 

Проблема с кодом, в том что промежуточная переменная пишется в банк 1 [строка 4], а читается из уже из банка 0 [строка 10]. соответсвенно результат сравнения зависит не от операндов, а от предыдущего состояния памяти.

Помогите разобраться, очень похоже на глюк компилятора.

 

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Похоже на глюк компилера, у других людей похожие проблемы : microchip forums

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...