вот такой текст:
Код
unsigned int Adc[4], adcSum, indexAdc;
static void AdcISR(void) __attribute__ ((interrupt ("IRQ")));
static void AdcISR(void)
{
unsigned int tmp;
unsigned int adc;
tmp = AD0GDR; // считали показания АЦП
adc = (tmp >> 6) & 0x03FF; // только результат преобразования
adcSum -= Adc[indexAdc]; // вычитаем самый старый семпл
Adc[indexAdc] = adc; // сохранили последнее
adcSum += adc; // обновили скользящее среднее
if (++indexAdc >= 4) indexAdc = 0;
IO0PIN = (adcSum >> 2) & 0x03FF; // вывели в порт скользящее среднее
if (tmp & 0x01000000) IO0SET = 0x0400; // диагностика
VICVectAddr = 0;
}
static void AdcISR(void) __attribute__ ((interrupt ("IRQ")));
static void AdcISR(void)
{
unsigned int tmp;
unsigned int adc;
tmp = AD0GDR; // считали показания АЦП
adc = (tmp >> 6) & 0x03FF; // только результат преобразования
adcSum -= Adc[indexAdc]; // вычитаем самый старый семпл
Adc[indexAdc] = adc; // сохранили последнее
adcSum += adc; // обновили скользящее среднее
if (++indexAdc >= 4) indexAdc = 0;
IO0PIN = (adcSum >> 2) & 0x03FF; // вывели в порт скользящее среднее
if (tmp & 0x01000000) IO0SET = 0x0400; // диагностика
VICVectAddr = 0;
}
дает багу(варнинг) при компиляции на любых уровнях оптимизации кроме "none".
ругаетца так:
Compiling main.c — 1 error
D:/Work/LpcAdc/ARM Flash Release/\s3nk.7: Assembler messages:
Warning: writeback of base register is UNPREDICTABLE
после этого прога нормально не работает конечно,
никакие танцы с бубном не помагают,
может кто-нить проверить такое поведение ?
вот результат компиляции:
Код
000002c0 <AdcISR>:
2c0: e24ee004 sub lr, lr, #4; 0x4
2c4: e92d500f stmdb sp!, {r0, r1, r2, r3, ip, lr}
2c8: e59f0090 ldr r0, [pc, #144]; 360 <.text+0xa0>
2cc: e59fc090 ldr ip, [pc, #144]; 364 <.text+0xa4>
2d0: e59f3090 ldr r3, [pc, #144]; 368 <.text+0xa8>
2d4: e59f1090 ldr r1, [pc, #144]; 36c <.text+0xac>
2d8: e593e004 ldr lr, [r3, #4]
2dc: e59c3000 ldr r3, [ip]
2e0: e5902000 ldr r2, [r0]
2e4: e7912102 ldr r2, [r1, r2, lsl #2]
2e8: e0623003 rsb r3, r2, r3
2ec: e58c3000 str r3, [ip]
2f0: e1a0232e mov r2, lr, lsr #6
2f4: e5903000 ldr r3, [r0]
2f8: e1a02b02 mov r2, r2, lsl #22
2fc: e1a02b22 mov r2, r2, lsr #22
300: e7812103 str r2, [r1, r3, lsl #2]
304: e59c3000 ldr r3, [ip]
308: e0833002 add r3, r3, r2
30c: e58c3000 str r3, [ip]
310: e5903000 ldr r3, [r0]
314: e2833001 add r3, r3, #1; 0x1
318: e5803000 str r3, [r0]
31c: e5903000 ldr r3, [r0]
320: e3530003 cmp r3, #3; 0x3
324: 83a03000 movhi r3, #0; 0x0
328: 85803000 strhi r3, [r0]
32c: e59c3000 ldr r3, [ip]
330: e1a03123 mov r3, r3, lsr #2
334: e59f2034 ldr r2, [pc, #52]; 370 <.text+0xb0>
338: e1a03b03 mov r3, r3, lsl #22
33c: e1a03b23 mov r3, r3, lsr #22
340: e31e0401 tst lr, #16777216; 0x1000000
344: e5823000 str r3, [r2]
348: 13a03b01 movne r3, #1024; 0x400
34c: 15823004 strne r3, [r2, #4]
350: e3a02000 mov r2, #0; 0x0
354: e3e03000 mvn r3, #0; 0x0
358: e5032fcf str r2, [r3, #-4047]
35c: e8fd500f ldmia sp!, {r0, r1, r2, r3, ip, lr}^
360: 40000054 andmi r0, r0, r4, asr r0
364: 4000003c andmi r0, r0, ip, lsr r0
368: e0034000 and r4, r3, r0
36c: 40000040 andmi r0, r0, r0, asr #32
370: e0028000 and r8, r2, r0
2c0: e24ee004 sub lr, lr, #4; 0x4
2c4: e92d500f stmdb sp!, {r0, r1, r2, r3, ip, lr}
2c8: e59f0090 ldr r0, [pc, #144]; 360 <.text+0xa0>
2cc: e59fc090 ldr ip, [pc, #144]; 364 <.text+0xa4>
2d0: e59f3090 ldr r3, [pc, #144]; 368 <.text+0xa8>
2d4: e59f1090 ldr r1, [pc, #144]; 36c <.text+0xac>
2d8: e593e004 ldr lr, [r3, #4]
2dc: e59c3000 ldr r3, [ip]
2e0: e5902000 ldr r2, [r0]
2e4: e7912102 ldr r2, [r1, r2, lsl #2]
2e8: e0623003 rsb r3, r2, r3
2ec: e58c3000 str r3, [ip]
2f0: e1a0232e mov r2, lr, lsr #6
2f4: e5903000 ldr r3, [r0]
2f8: e1a02b02 mov r2, r2, lsl #22
2fc: e1a02b22 mov r2, r2, lsr #22
300: e7812103 str r2, [r1, r3, lsl #2]
304: e59c3000 ldr r3, [ip]
308: e0833002 add r3, r3, r2
30c: e58c3000 str r3, [ip]
310: e5903000 ldr r3, [r0]
314: e2833001 add r3, r3, #1; 0x1
318: e5803000 str r3, [r0]
31c: e5903000 ldr r3, [r0]
320: e3530003 cmp r3, #3; 0x3
324: 83a03000 movhi r3, #0; 0x0
328: 85803000 strhi r3, [r0]
32c: e59c3000 ldr r3, [ip]
330: e1a03123 mov r3, r3, lsr #2
334: e59f2034 ldr r2, [pc, #52]; 370 <.text+0xb0>
338: e1a03b03 mov r3, r3, lsl #22
33c: e1a03b23 mov r3, r3, lsr #22
340: e31e0401 tst lr, #16777216; 0x1000000
344: e5823000 str r3, [r2]
348: 13a03b01 movne r3, #1024; 0x400
34c: 15823004 strne r3, [r2, #4]
350: e3a02000 mov r2, #0; 0x0
354: e3e03000 mvn r3, #0; 0x0
358: e5032fcf str r2, [r3, #-4047]
35c: e8fd500f ldmia sp!, {r0, r1, r2, r3, ip, lr}^
360: 40000054 andmi r0, r0, r4, asr r0
364: 4000003c andmi r0, r0, ip, lsr r0
368: e0034000 and r4, r3, r0
36c: 40000040 andmi r0, r0, r0, asr #32
370: e0028000 and r8, r2, r0
Забыл сказать:
проц LPC2138