пока сижу без дела со сломаной ногой, захотел попробовать реализовать какой-нить простой криптоалгоритм на AVR.
Взял, например, этот:
CODE
Объявляем переменные:
volatile unsigned int xi=0;
volatile unsigned long sum=0, delta=0x9E3779B9;
volatile unsigned long v0 = 0;
volatile unsigned long v1 = 0;
volatile unsigned long kx[4];
volatile unsigned long cx=0;
где-то там записываем в них значения...
Сам алгоритм:
void xtea_encipher()
{
char i,xi;
v0=0;
v1=0;
for (i=0; i < 32; i++) {
v0 += (((v1 << 4) ^ (v1 >> 5)) + v1) ^ (sum + kx[sum & 3]);
sum += delta;
v1 += (((v0 << 4) ^ (v0 >> 5)) + v0) ^ (sum + kx[(sum>>11) & 3]);
}
for(xi=0;xi<4;xi++)
{
STRING_OUT[xi]= v0;
STRING_OUT[4+xi]= v1;
v0 >>=8;
v1 >>=8;
}
v0=0;
v1=0;
printf(" %s ",STRING_OUT);
}
основной цикл.
while (1)
{
xtea_encipher();
delay_ms(200);
};
Основные отрывки программы привел.
Сразу прошу извинить меня за быдлокод и т д - программист из меня никудышный.
Короче суть проблемы - входящие дынные одни и те же, они не изменяются (даже с помощью дебагера проверял), но функция с каждым ее вызовом возвращает отличающиеся данные. Тоесть при запуске программы данные каждый раз одни и те же, но они разные с каждым последующим вызовом функции. Алгоритмы пробовал разные, но результат один. Протеус говорит, что все переменные всегда, с каждым вызовом одни и те же, кроме v0 и v1 после обработки алгоритма.
Переменные в программе 32-битные. Подозреваю, что это происходит из-за переполнения переменной.
Подскажите пожалуйста, или ткните пальцем, что не так.
Кстати, пишу в CvAVR.