#define ADRES_START 0x00f00000 #define BYTES_LENGHT 0x00040000 adres = 0; for(x=ADRES_START; x<ADRES_START+BYTES_LENGHT; x++) { *(UBYTE*)(x) = Dane[adres]; if(Dane[adres] != *(UBYTE*)(x)) { printf("Zapis bledny, adres=$%x\n", x); fail = 1; break; } adres++; }
| 00A8 2C3C 00F0 0000 MOVE.L #00F00000,D6 | 00AE 2079 0000 0004-02 MOVEA.L 02.00000004,A0 | 00B4 D1C7 ADDA.L D7,A0 | 00B6 1010 MOVE.B (A0),D0 | 00B8 2246 MOVEA.L D6,A1 | 00BA 1280 MOVE.B D0,(A1) | 00BC 1210 MOVE.B (A0),D1 | 00BE B200 CMP.B D0,D1 | 00C0 6714 BEQ.B 00D6 | 00C2 2F06 MOVE.L D6,-(A7) | 00C4 4879 0000 008C-01.2 PEA 01.0000008C | 00CA 4EB9 0000 0000-XX JSR _printf | 00D0 504F ADDQ.W #8,A7 | 00D2 7A01 MOVEQ #01,D5 | 00D4 600C BRA.B 00E2 | 00D6 5287 ADDQ.L #1,D7 | 00D8 5286 ADDQ.L #1,D6 | 00DA 0C86 00F4 0000 CMPI.L #00F40000,D6 | 00E0 6DCC BLT.B 00AE | 00E2 4A05 TST.B D5 | 00E4 660E BNE.B 00F4
@Phibrizzo, post #1
@Phibrizzo, post #1
To ku mojemu zdziwieniu okazalo sie ze weryfikacja nie dziala.
Pytanie czy cos robie zle i jak to moge obejsc?
B = A; if (A != B) { .... }
*(volatile UBYTE*)(x) = Dane[adres]; if(Dane[adres] != *(volatile UBYTE*)(x))
@WyciorX, post #2
Gdybyś robił test poprzez dwa kolejne zapisy i dwa odczyty, to mógłbyś tego problemu uniknąć.
*(UBYTE*)b = a; *(UBYTE*)b = a; *(UBYTE*)b = a; *(UBYTE*)b = a;
@mschulz, post #5