Go Down

Topic: Difference code arduino-Pic (Read 1 time) previous topic - next topic

majenko

Are you having a laugh?

Arduino:
Quote

delta=0x9e3779b9;


Pic:
Quote

delta=12;


I can see no reason for you to have two different bits of code.  Copy and paste from one to the other and make the functions exactly the same - even down to the comments.
Get 10% off all 4D Systems TFT screens this month: use discount code MAJENKO10

PaulS

Code: [Select]
unsigned long myInt[1];
A one element array.

Code: [Select]
         myInt[0]=4;
Properly initialized.

Code: [Select]
         encrypt(myInt,k);
And passed to the function.

Code: [Select]
void encrypt (unsigned long* v, unsigned long* k) {
Where it gets referenced as v.

Code: [Select]
    v0=v[0];
    v1=v[1];

v1 was just assigned some random crap, outside the bounds of the array passed in.

Nothing else that happens after this point is correct, since you are referencing garbage.

I fail to see how that works on the PIC.

enrico88

sorry you are right!!i have modified delta..now are the same

Thanks paul i will try with an array of two elements.

enrico88

I have modified the code how you say paul but the result are still different :(

Arduino:
Code: [Select]

unsigned long myInt[2];
unsigned long k [4] = {0,2,3,4};

void setup()
{
    Serial.begin(9600);
}


void encrypt (unsigned long* v, unsigned long* k) {
    unsigned long v0,v1, sum, i;
    unsigned long delta;
    unsigned long k0, k1, k2, k3;   /* chiave */
    delta=0x9e3779b9;
    v0=v[0];
    v1=v[1];
    sum=0;
    k0=k[0];
    k1=k[1];
    k2=k[2];
    k3=k[3];
    for (i=0; i < 32; i++) {
        sum += delta;
        v0 += ((v1<<4) + k0) ^ (v1 + sum) ^ ((v1>>5) + k1);
        v1 += ((v0<<4) + k2) ^ (v0 + sum) ^ ((v0>>5) + k3);
    }
    v[0]=v0;
    v[1]=v1;
}

void loop()
{
         
         myInt[0]=4;
         myInt[1]=1;
         Serial.println(myInt[0],DEC);
         Serial.println(myInt[1],DEC);
         encrypt(myInt,k);
         Serial.println(myInt[0],DEC);
         Serial.println(myInt[1],DEC);
         delay(1000);     
}



Pic 16f887:
Code: [Select]
unsigned long myInt[2];
unsigned long k [4] = {0,2,3,4};


void encrypt (unsigned long* v, unsigned long* k) {
    unsigned long v0,v1, sum, i;
    unsigned long k0, k1, k2,k3;
    unsigned long delta;
    v0=v[0]; v1=v[1]; sum=0;

    delta=0x9e3779b9;;
    k0=k[0]; k1=k[1]; k2=k[2]; k3=k[3];
    for (i=0; i < 32; i++) {
        sum += delta;
        v0 += ((v1<<4) + k0) ^ (v1 + sum) ^ ((v1>>5) + k1);
        v1 += ((v0<<4) + k2) ^ (v0 + sum) ^ ((v0>>5) + k3);
    }
    v[0]=v0;
    v[1]=v1;
}

void main()
{
UART1_Init(9600);
myInt[0]=4;
myInt[1]=1;
UART1_Write(myInt[0]);
UART1_Write(myInt[1]);
encrypt(myInt,k);
UART1_Write(myInt[0]);
UART1_Write(myInt[1]);
delay_ms(1000);
}

bubulindo

We have no idea how the PIC transmits the data. So did you try the UART1_Write() with a long in it ?

Code: [Select]


unsigned long lala = 1234567UL;

UART1_Write(lala);


What would this return to you on the PIC?

Another thing, is any of the returned values right? If you know the answer and you want to avoid type conversion problems, you can always do something like:

Code: [Select]


if (result == RIGHT_RESULT)
    Serial.println("Eureka!");

Eu não sou o teu criado. Se respondo no fórum é para ajudar todos mediante a minha disponibilidade e disposição. Responder por mensagem pessoal iria contra o propósito do fórum e por isso evito-o.
Se realmente pretendes que eu te ajude por mensagem pessoal, então podemos chegar a um acordo e contrato onde me pagas pela ajuda que eu fornecer e poderás então definir os termos de confidencialidade do meu serviço. De forma contrária toda e qualquer ajuda que eu der tem de ser visível a todos os participantes do fórum (será boa ideia, veres o significado da palavra fórum).
Nota também que eu não me responsabilizo por parvoíces escritas neste espaço pelo que se vais seguir algo dito por mim, entende que o farás por tua conta e risco.

Dito isto, mensagens pessoais só se forem pessoais, ou seja, se já interagimos de alguma forma no passado ou se me pretendes convidar para uma churrascada com cerveja (paga por ti, obviamente).

Go Up