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

Back to Subject List

Old thread has been locked -- no new posts accepted in this thread
???
03/13/09 07:13
Read: 532 times


 
#163420 - Can you have a look at this?
Responding to: ???'s previous message
Thanks for all your comments. I agree that finding another consultant or even buying Keil might well have been cheaper and quicker overall, but I just had to find out what was wrong. I expect everyone here knows that feeling! In terms of validation, of course we have a test protocol that we wrote when the original software was commissioned, and we'd follow that any time there was a change, however trivial.

On to more technical matters, I think I have found the problem. Does the following look odd to you?

Here's the source; it's setting a register in extended memory. At MCU reset, the register is zero so it should end up with 0x0c in that register.
#define bMODECNFG   (* (unsigned char xdata *)0xFFFB)        
#define MODECNFG_CLKOUTEN 0x04  
#define MODECNFG_CLKSLCT 0x08   
...                                
bMODECNFG |= MODECNFG_CLKOUTEN;
bMODECNFG |= MODECNFG_CLKSLCT;
...

 

(ignore the fact it's not the most concise way to do this!)

Code generated by SDCC:
                            444 ;	bMODECNFG |= MODECNFG_CLKOUTEN;
   004B 7A FB               445 	mov	r2,#0xFB
   004D 7B FF               446 	mov	r3,#0xFF
   004F 90 FF FB            447 	mov	dptr,#0xFFFB
   0052 E0                  448 	movx	a,@dptr
   0053 FC                  449 	mov	r4,a
   0054 74 04               450 	mov	a,#0x04
   0056 4C                  451 	orl	a,r4
   0057 8A 82               452 	mov	dpl,r2
   0059 8B 83               453 	mov	dph,r3
   005B F0                  454 	movx	@dptr,a
                            455 ;	bMODECNFG |= MODECNFG_CLKSLCT;
   005C 90 FF FB            456 	mov	dptr,#0xFFFB
   005F 43 04 08            457 	orl	ar4,#0x08
   0062 EC                  458 	mov	a,r4
   0063 F0                  459 	movx	@dptr,a

 

This (as far as I can see) results in 0x04 in the register.

Equivalent dissassembled from the Keil version:
X10be:	mov	dptr,#Xfffb
	movx	a,@dptr
	orl	a,#4
	movx	@dptr,a
	movx	a,@dptr
	orl	a,#8
	movx	@dptr,a

 

This looks a lot more sensible (and shorter!)

I changed the source to
bMODECNFG |= (MODECNFG_CLKOUTEN|MODECNFG_CLKSLCT);
 

and it now works perfectly on SDCC.

Do you agree this is a bug in SDCC's code generation?



List of 26 messages in thread
TopicAuthorDate
SDCC and Keil and I/O      James Best      03/10/09 06:29      
   No big changes for SDCC      David Prentice      03/10/09 08:51      
   Nothing obvious      Oliver Sedlacek      03/10/09 09:09      
   just curious      Erik Malund      03/10/09 09:41      
      Just what do you mean, Erik?      Richard Erlacher      03/10/09 10:22      
         even the SDCC 'friends' agree      Erik Malund      03/10/09 10:31      
         Answers to your quiz      David Prentice      03/10/09 10:39      
            5th      Jan Waclawek      03/10/09 11:27      
            But the really difficult question is...      Andy Neil      03/11/09 01:47      
      Thanks! and a bit of background      James Best      03/11/09 04:17      
         Am I going crazy?      James Best      03/11/09 07:32      
         Is the code large then 2K?      Chris Bertrand      03/11/09 09:52      
            Keil deserves a medal if it is using USB in less than 2kB      David Prentice      03/11/09 10:42      
               Keil probably has nothing to do with the USB?      Andy Neil      03/11/09 10:59      
                  If only it where that simple      Neil Kurzman      03/11/09 21:57      
                  TUSB3410      Andy Peters      03/12/09 12:01      
         Test costs?        Oliver Sedlacek      03/12/09 01:59      
   Initially maintain a compatible source        David Prentice      03/11/09 03:49      
      But      Neil Kurzman      03/12/09 22:42      
   Can you have a look at this?      James Best      03/13/09 07:13      
      use "__xdata volatile unsigned char __at(0xfffb) bMODECNF"      Frieder Ferlemann      03/13/09 08:04      
         Done!      James Best      03/13/09 08:32      
            thanks      Frieder Ferlemann      03/13/09 09:09      
      register bank, ar4?      Juergen Christoph      03/13/09 08:13      
   A free 3-month full Keil PK51 licence      Andy Neil      03/20/09 07:45      
      Thanks for the link!      James Best      03/25/09 03:27      

Back to Subject List