Waarschijnlijk zie ik wat over het hoofd, maar ik weet niet wat. Ik wil een bitwise AND (&) uitvoeren maar ik krijg een logical AND (&&), wat doe ik verkeerd? Hier volgt de code and wat gcc er van maakt:


	regudint = UDINT;
00000117  LDS R24,0x00E1	Load direct from data space 
00000119  STD Y+2,R24		Store indirect with displacement 
	bitshift = (1<<EORSTI);
0000011A  LDI R24,0x08		Load immediate 
0000011B  STD Y+3,R24		Store indirect with displacement 
	reset = (regudint & bitshift);
0000011C  LDD R25,Y+2		Load indirect with displacement 
0000011D  LDD R24,Y+3		Load indirect with displacement 
0000011E  AND R24,R25		Logical AND 
0000011F  STD Y+1,R24		Store indirect with displacement 

edit: Ik ben er niet meer zo zeker van dat ik een logical AND krijg, als regudint = 0x14 en bitshift = 0x08 dan reset = 0. Zowel bitwise als logical zou dat toch geen 0 mogen zijn?

edit 2: Natuurlijk 0x14 & 0x08 = 0. Niet goed opgelet. Het is namelijk zo dat ik een reset signaal krijg, maar wanneer ik daar op controleer in de code zie ik die niet. Ik ga verder op zoek.

AND is gewoon een bitwise! Dus de asm code klopt dan toch?

En waarom gebruik je de tussen variabelen, de compiler optimaliseerd nu niet veel meer.

Je wilt dus dit?:
reset = (UDINT & (1<<EORSTI));

Ik had het met opzet zo geschreven omdat dat makkelijker was met debuggen. Het is namelijk zo dat ik weet dat in het UDINT register een reset bit aan staat (EORSTI = 1) als ik een breakpoint zet. Echter in de variabele regudint staat deze reset uit. In de code ervoor controleer ik op een reset en die wordt dan ook niet gezien. Ik denk nu dat die reset alleen aan wordt gezet als ik een breakpoint zet voor het debuggen.