[an error occurred while processing this directive]
Приколы продолжаются... (CCS C compiler)
(«Телесистемы»: Конференция «Цифровые сигнальные процессоры (DSP) и их применение»)

миниатюрный аудио-видеорекордер mAVR

Отправлено Jolik 06 декабря 2004 г. 00:26

Работавший код вдруг перестал работать - перестал записывать данные в массив. после получаса нетрадиционного секса полез в асм, что наплодил сабж.

Исходник:

for (i=0;i<44;i++) {
s1 = irq_buf[i*2];
s2 = irq_buf[i*2+1];
s3 = ((s1>>10)&0xF)|((s2>>6)&0xF0);
irq_buf[i] = s3;
}

Вот что сохранил компилер:
.line 62
MOV #0, *(#_i) ; |156|
MOV #44, AR2 ; |156|
MOV *(#_i), AR1 ; |156|

CMP AR1 >= AR2, TC1 ; |156|
|| NOP ; avoids Silicon Exception CPU_24

BCC L4,TC1 ; |156|
; branch occurs ; |156|
L3:
.line 63
MOV AR1, T0 ; |157|
SFTL T0, #1 ; |157|
AMOV #_irq_buf, XAR3 ; |157|
MOV *AR3(T0), AR1 ; |157|
MOV AR1, *(#_s1) ; |157|
.line 64
MOV *(#_i), T0 ; |158|
SFTL T0, #1 ; |158|
ADD #1, T0 ; |158|
MOV *AR3(T0), AR1 ; |158|
MOV AR1, *(#_s2) ; |158|
.line 65

Здесь видно, что в Т0 вычисляется индекс для каждой итерации и считывается память в MOV *AR3(T0), AR1

Вот что показывает окно дизассемблера (и View -> Mixed Source/ASM)
0150BA e631000148c9 MOV #0,*(#148c9h)
0150C0 76002ca8 MOV #44,AR2
0150C4 a9310148c9 MOV *(#148c9h),AR1
0150C9 1298a0_21 CMP AR1 >= AR2, TC1 || NOP
0150CD 04645d BCC L4,TC1
0150D0 L3:
0150D0 2294 MOV AR1,T0
0150D2 5040 SFTL T0,#1
0150D4 ec31be01270b AMAR *(#1270bh),XAR3
0150DA a96b MOV *AR3(AR0),AR1
0150DC c9310148cb MOV AR1,*(#148cbh)
0150E1 a4310148c9 MOV *(#148c9h),T0
0150E6 5040 SFTL T0,#1
0150E8 4014 ADD #1,T0
0150EA a96b MOV *AR3(AR0),AR1
0150EC c9310148cc MOV AR1,*(#148cch)
0150F1 a0310148cb MOV *(#148cbh),AC0

Здесь тоже Т0 выполняет туже функцию, но считывается MOV *AR3(AR0),AR1. При этом AR0 при трассировании имеет значение далеко отличное от Т0 - естественно считывается не пойми что....

Не буду резюмировать - пусть гуру скажут, может я не прав?
Почему код в окне дизасемблера отличается от сгенерированного компилером? Который реально грузится в проц?

Спасибо

Составить ответ  |||  Конференция  |||  Архив

Ответы


Отправка ответа

Имя (обязательно): 
Пароль: 
E-mail: 

Тема (обязательно):
Сообщение:

Ссылка на URL: 
Название ссылки: 

URL изображения: 


Перейти к списку ответов  |||  Конференция  |||  Архив  |||  Главная страница  |||  Содержание  |||  Без кадра

E-mail: info@telesys.ru