В студии 4.19 прекрасно симулировалось.
Код: Выделить всё
#include <io.h>
unsigned int sum[4];
volatile unsigned int voltage;
volatile unsigned int average_summa=578;
void main(void)
{
register unsigned char i;
while (1)
{
// Скользящее среднее по средневыпрямленному из 8 полупериодов
for (i=0; i<3; i++) sum[i]=sum[i+1];
sum[3]=average_summa;
voltage=0;
for (i=0; i<4; i++) voltage+=sum[i];
if(voltage) #asm("nop") ;
}
}
После поверхностного разбора полетов выяснилось, что компилятор активно использует регистровую пару r27:r26 (X) для работы с переменной voltage, затем регистр X используется в циклах- вся фишка в восприятии протеусом регистра X- он воспринимается как пара. У компилятора и студии другое мнение- они знают, что озу там всего немного байт и при этом забивают на старшую часть R27- компилятор его даже не очищает. В результате протеус, формально прав, но не работает.
Вот и рассудите тут- кто прав, а кто нет.
Проект кодвижена прикрепляю.
- Вложения
-
- error.zip
- (22.43 КБ) 137 скачиваний


