This discussion has been locked.
You can no longer post new replies to this discussion. If you have a question you can start a new discussion

How to get C51 to generate a DJNZ loop?

I want a fast and simple delay routine:

#pragma OT(8,SPEED)    // Switch to speed optimization for this routine
void my_delay(BYTE count)
{
        register BYTE i;
        for (i=count; i; i--);
}


Is the best so far and becomes:

B02:0xB1F1  EF       MOV      A,R7
B02:0xB1F2  6003     JZ       B02:B1F7
B02:0xB1F4  1F       DEC      R7
B02:0xB1F5  80FA     SJMP     I2C_delay(B02:B1F1)
B02:0xB1F7  22       RET


but I was hoping there was a way to get C51 to do just a DJNZ instead of 4 instructions for each loop.

Is there a magic coding style or optimization level that will generate the DJNZ?

Parents
  • One thing to think about, is that you should always try to use pre-increment/pre-decremented whenever possible.

    It's so surprising to see someone write that! When I first moved from exclusive assembly to C, that was one of the first discoveries I made and have followed that same rule since.

    For some reason the post increment is far more common. It looks like the language name C++ has had at least a partial influence there.

    But mention it to many people and it's generally dismissed. We even had one of the posters of this forum do a code review for us a few years ago and he actually insisted that the post increment was not just favourable, but actually better. He was not open to persuasion either. Go figure!

Reply
  • One thing to think about, is that you should always try to use pre-increment/pre-decremented whenever possible.

    It's so surprising to see someone write that! When I first moved from exclusive assembly to C, that was one of the first discoveries I made and have followed that same rule since.

    For some reason the post increment is far more common. It looks like the language name C++ has had at least a partial influence there.

    But mention it to many people and it's generally dismissed. We even had one of the posters of this forum do a code review for us a few years ago and he actually insisted that the post increment was not just favourable, but actually better. He was not open to persuasion either. Go figure!

Children
No data