Email: Password: Remember Me | Create Account (Free)

Back to Subject List

Old thread has been locked -- no new posts accepted in this thread
Frieder Ferlemann
01/19/10 05:00
Read: 248 times
Old Europe


 
#172592 - absolutely-locating xdata at 256 byte boundary
Responding to: Andy Neil's previous message
Andy Neil said:
Frieder Ferlemann said:
unsigned char __xdata __at(0x0000) table_P2_over_time[200 + 1];

I guess that's SDCC syntax?

Yes it's SDCC syntax.

Keil would be somewhat different.

What is the point in absolutely-locating it? Seems unnecessary to me...


The point is to tell the compiler that it's located at a 256 byte boundary. So it does not need a full 16 bit addition of array base address and index but instead can directly load dpl with the high byte of the address and dpl with the index.

So you the 8bit indexed xdata array access is only:

   0006 85*00 82            383         mov     dpl,_ms_tenth_countdown
   0009 75 83 00            384         mov     dph,#(_table_P2_over_time >> 8)
   000C E0                  385         movx    a,@dptr

 

instead of:
   000B E5*00               386         mov     a,_ms_tenth_countdown
   000D 24r00               387         add     a,#_table_P2_over_time
   000F F5 82               388         mov     dpl,a
   0011 E4                  389         clr     a
   0012 34s00               390         addc    a,#(_table_P2_over_time >> 8)
   0014 F5 83               391         mov     dph,a
   0016 E0                  392         movx    a,@dptr

 


AFAIK you'd tell Keil the absolute location of the variable at the linking stage (which is to late for code generation so the 16 bit addition has been generated). So out of the box Keil probably cannot do it.


void Timer0_ISR (void) interrupt 1 {

For Keil, consider adding a using option to specify a Register Bank - this can significantly reduce the overhead on entering & leaving the ISR...


For SDCC you can consider using using as well. But as SDCC doesn't use R0..R7 in the proposed code snippet there is no overhead to reduce:^)

List of 41 messages in thread
TopicAuthorDate
Controlling multiple servo motors      Yash Chitalia      01/17/10 14:47      
   executing code takes time      Erik Malund      01/17/10 15:27      
      PWM code      Steve M. Taylor      01/17/10 15:35      
         Thanks...now, about the PCA timer..      Yash Chitalia      01/17/10 16:06      
   If SDCC Then Keil      Michael Karas      01/17/10 16:15      
      PWM IRQ code in C, bitops, 45 byte      Frieder Ferlemann      01/18/10 05:19      
         Optimization having no effect.      Yash Chitalia      01/18/10 11:36      
      PWM IRQ code in C, lookup table, 32 byte      Frieder Ferlemann      01/18/10 05:29      
         I haven't understood the table lookup concept very well...      Yash Chitalia      01/19/10 00:55      
            table lookup      Frieder Ferlemann      01/19/10 02:39      
         PWM IRQ code in C, lookup table, 30 byte      Frieder Ferlemann      01/19/10 03:07      
            Compiler specifics      Andy Neil      01/19/10 04:35      
               absolutely-locating xdata at 256 byte boundary      Frieder Ferlemann      01/19/10 05:00      
                  I see.      Andy Neil      01/19/10 06:34      
            An example code..      Yash Chitalia      01/20/10 02:20      
               Keil: Specifics and non-specifics      Andy Neil      01/20/10 02:50      
                  Not really working...      Yash Chitalia      01/20/10 03:55      
                     Enough power?      Per Westermark      01/20/10 09:45      
                        RE: running 32 servo motors      Andy Neil      01/20/10 10:34      
      The chip sounds perfect...      Yash Chitalia      01/18/10 11:47      
         not worth it      Erik Malund      01/18/10 12:10      
            Servo control will become difficult then...      Yash Chitalia      01/18/10 12:42      
               output      Andy Peters      01/18/10 12:52      
               HCT chips have ...      Erik Malund      01/18/10 14:12      
                  Eval a concept with a single PCA and 3:8 HCT multiplexer?      Frieder Ferlemann      01/18/10 14:36      
               Check their website      Andy Neil      01/18/10 14:44      
                  Here is the code...      Yash Chitalia      01/18/10 15:28      
                     "sbit MTRS=P2^0;" is not OK here      Frieder Ferlemann      01/18/10 16:11      
                        Keil syntax?      Andy Neil      01/18/10 17:36      
                           "#define" not working.."sbit" works      Yash Chitalia      01/18/10 23:32      
                              Yes, you were correct originally!      Andy Neil      01/19/10 01:22      
            Seconded      Andy Neil      01/18/10 12:45      
   Servo_0.1.zip      Murray R. Van Luyn      01/18/10 15:02      
      links      James Hinnant      02/18/10 21:10      
   Eventually feed the guys at http://servomaster.sf.net ?      Frieder Ferlemann      01/18/10 15:12      
      servomaster.sf.net FLOSS      James Hinnant      02/04/10 11:48      
   Maybe of some use...      James Bowmaster      02/10/10 14:40      
      Whoops... found a bug      James Bowmaster      02/10/10 16:35      
         What bug?      Andy Neil      02/10/10 16:41      
            Bug      James Bowmaster      02/10/10 18:47      
   Improved version uploaded      James Bowmaster      02/12/10 21:26      

Back to Subject List