Hi, i need to XOR couple of bytes. Im try to do it by this way:
pozice =0; adresa = 0x0A; data = 0x3F; data2 = 0x10; xdat =adresa ^ data ^ data2; //xdat = 0x25;
pozice =0; adresa = 0x0A; data = 0x3F; data2 = 0x10; xdat = adresa; xdat ^= data ; xdat ^= data2;//adresa ^ data ^ data2; xdat = 0x25;
What is your basis for saying it does not working? What is the value of xdat. Is it the debugger output from the debugger? (There is currently a major issue with the debugger) I just ran the following piece of code - ********************* u32 ab = 0x0a; u32 data1 = 0x3f; u32 data2 = 0x10; u32 xdat; xdat = ab ^ data1 ^ data2; ******************************* xdat does in fact equal 0x25 after running the above code. I would think it is a debugger issue. Once again, I do hope Keil is fixing this.
I have frequency output - dificult to decode in osciloskop but target machine can decode it. And it can decide if its OK or wrong, however it cant do nothing else - its just reciever.
Sorry, I don't think I can be of any help. It did generate 0x25 in my program.
I would think it is a debugger issue. It takes YEARS of using whatever debugger before you can assume that you know if the displayed value is valid to an extent great enough hat you should not doublecheck (try to see the value by other mens) before you out of hand decide that the code (or compiler) is wrong. For instance, sometimes the only way to see what C provides to a function is by debugging in the assembler. I, still, after who knows how many years, occasionally (dis)believe one of my debuggers when I should not. Erik PS in the above 'debugger' refer to any debugger, ICE, JTAG, simulator or whatever.
I tried simulate it and it seems workikg well. Then tell me why this works:
adresa = 0x0A; data = 0x3F; data2 = 0x10; xdat = 0x25 ;
adresa = 0x0A; data = 0x3F; data2 = 0x10; xdat = adresa; xdat ^= data ; xdat ^= data2; xdat = 0x25;
adresa = 0x0A; data = 0x3F; data2 = 0x10; xdat = adresa ^ data ^ data2;
It only takes about 5 minutes to see that what the Keil debugger is displaying and what is actually happening do not match up (This has been since the switch to realview). The compiler seems to be generating valid code for me. The (current) debugger is always confused as to where local variables and parameter are and where a line compiled code starts and ends in assembly. This is even with optimizations on the lowest setting.
OK I made copule other test and diasslembly ferquency output and i find this:
xdat = (data2 ^ data ^ adresa);
adresa = 0x0A; data = 0x3F; data2 = 0x90; xdat = (data2 ^ data ^ adresa); adresa = 0x0A; data = 0x3F; data2 = 0x90;
OK i fing my bug - just type unsigned char volatile data ..... Its my bug. Jirka