Hi,
Taking the code snippet below,
char* ptr = (char*)0x0000; short size = 0x100; short sum = 0x00; do { sum += *ptr++; } while (size--)
This will cause C51 to allocate "ptr" and "size" in RAM.
MOV R3,#00H MOV R2,#00H MOV R1,#00H MOV DPTR,#pre?1251 MOVX @DPTR,PR0 MOV DPTR,#size?1252 MOV A,#01H MOVX @DPTR,A INC DPTR CLR A MOVX @DPTR,A
and everytime "size" is decremented, or "ptr" is incremented, the values are loaded back into the RAM.
Is there a way to force C51 to not use RAM but use the registers only as "ptr" and "size" will never be used anymore after that. What I mean is, is there a way to force C51 to compile to something like this,
mov dptr, #WORD0(00h) mov r4, #01h ; r4:r5 = size mov r5, #00h mov r6, #00h ; r6:r7 = sum mov r7, #00h loop: movx A, @dptr+#000h addw 006h, A ; r6:r7 += A inc dptr subw 004h, 001h ; r4:r5-- jnc loop ; add code to store r6:r7 into RAM
Any advice would be greatly appreciated. Thanks in advance.
Thank you everyone for the information. I have tried using the 'register' keyword before posting the question here but so far it is ignored by the compiler. By manually writing in assembly using registers, I manage to speed up the task by 50%. However it would be tedious to do so as the reason to use C is to simplify coding. I really hope there is a way to ask the compiler do what is needed.
But does the taks actually need to be speeded up by 50% - or, indeed, at all?
"However it would be tedious"
So, unless it is really essential, don't do it!
As has already been suggested, if the performance is adequate, there is no point in messing about trying to optimise it!
By manually writing in assembly using registers, I manage to speed up the task by 50%. However it would be tedious to do so as the reason to use C is to simplify coding. while wrinting small routines in asm for speed reasons is a very valid approach, it you have to write large amounts of code in asm to achieve your goal, this is the wrong approach unless your product is to ship in millions. Wrinting small routines in asm for speed reasons is hardly 'tedious' and, typically, for the very reason they are small it will be write, debug and forget, so the 'tedium' is just once.
Erik