|
|
View previous topic :: View next topic |
Author |
Message |
asmboy
Joined: 20 Nov 2007 Posts: 2128 Location: albany ny
|
the pseudo opcode CLRF |
Posted: Wed Apr 22, 2009 4:52 pm |
|
|
I notice that when I initialize
Code: | unsigned int16 adccon[4]={0,0,0,0}; |
that it generates very efficient code with
with a string of
Code: | CLRF 3F pseudo op instrux
CLRF 40
CLRF 41
CLRF 42
etc etc |
however RE initing the array with a loop or whatever is very awkward
and code hoggy
since the 4.08x compiler (#ASM directive)
wont accept the pseudo op CLRF
I've been re initializing with code like this
Code: |
#ASM
movlw 0
movwf 0x3F
etc and so on - matching the original static zeroing out code
#ENDASM
|
I know what i have to track and be careful of - in regard not getting compiler stung ( i think )
BUT is there better way to let the compiler do the reinit
like it did when i declared the vars ?
I have a number of small arrays, of different sizes - that i want to reinit together and i find that looping to do it,
sucks code space horribly- and the above ASM hack appears to do it with minimum clocks
I'd be grateful if there is a better way to let the compiler do it - but still achieve decent efficiency. |
|
|
PCM programmer
Joined: 06 Sep 2003 Posts: 21708
|
|
Posted: Wed Apr 22, 2009 5:25 pm |
|
|
Both the methods shown below generate CLRF statements in the .LST file.
The first one is better since it's in C.
Code: | #include <16F877.H>
#fuses XT, NOWDT, NOPROTECT, BROWNOUT, PUT, NOLVP
#use delay(clock=4000000)
#use rs232(baud=9600, xmit=PIN_C6, rcv=PIN_C7, ERRORS)
//======================================
void main()
{
int8 array[5];
array[0] = 0;
array[1] = 0;
array[2] = 0;
array[3] = 0;
array[4] = 0;
#asm
CLRF array[0]
CLRF array[1]
CLRF array[2]
CLRF array[3]
CLRF array[4]
#endasm
while(1);
} |
|
|
|
|
|
You cannot post new topics in this forum You cannot reply to topics in this forum You cannot edit your posts in this forum You cannot delete your posts in this forum You cannot vote in polls in this forum
|
Powered by phpBB © 2001, 2005 phpBB Group
|