Fixed support for GCC4.
authortravisutk <travisutk@12e2690d-a6be-4b82-a7b7-67c4a43b65c8>
Mon, 7 Feb 2011 01:01:11 +0000 (01:01 +0000)
committertravisutk <travisutk@12e2690d-a6be-4b82-a7b7-67c4a43b65c8>
Mon, 7 Feb 2011 01:01:11 +0000 (01:01 +0000)
The problem was a while loop of asm("nop") that
was somehow broken in optimization.

git-svn-id: https://svn.code.sf.net/p/goodfet/code/trunk@897 12e2690d-a6be-4b82-a7b7-67c4a43b65c8

firmware/Makefile
firmware/goodfet.c

index b0ec46a..d0bffc7 100644 (file)
@@ -93,7 +93,7 @@ CC=msp430-gcc -Wall -Os -g -mmcu=$(mcu) -D$(mcu) -D$(platform) -Dplatform=$(plat
 #config = monitor sbw  chipcon nrf ccspi spi jtagarm7 jtag430 jtag430x2 avr
 
 # New default.
 #config = monitor sbw  chipcon nrf ccspi spi jtagarm7 jtag430 jtag430x2 avr
 
 # New default.
-config = monitor chipcon ccspi nrf spi jtagarm7 jtag430 jtag430x2 avr
+config ?= monitor chipcon ccspi nrf spi jtagarm7 jtag430 jtag430x2 avr
 
 
 # Build the needed list of app and lib object files from the config
 
 
 # Build the needed list of app and lib object files from the config
@@ -311,7 +311,7 @@ verify:
 dumpinfo:
        $(BSL) --dumpinfo
 $(app).c: config builddate appsfiles err
 dumpinfo:
        $(BSL) --dumpinfo
 $(app).c: config builddate appsfiles err
-$(app): $(app).c $(libs) $(apps)
+$(app):  $(libs) $(apps)
 $(app).hex: $(app)
        msp430-objcopy goodfet -O ihex goodfet.hex
 m4s: $(app).hex
 $(app).hex: $(app)
        msp430-objcopy goodfet -O ihex goodfet.hex
 m4s: $(app).hex
index a3f3587..6a79c16 100644 (file)
@@ -56,12 +56,13 @@ void init()
        //Setup clocks, unique to each '430.
        msp430_init_dco();
        msp430_init_uart();
        //Setup clocks, unique to each '430.
        msp430_init_dco();
        msp430_init_uart();
-
+       
+       
        //DAC should be at full voltage if it exists.
 #ifdef DAC12IR
        //glitchvoltages(0xfff,0xfff);
        ADC12CTL0 = REF2_5V + REFON;                                    // Internal 2.5V ref on
        //DAC should be at full voltage if it exists.
 #ifdef DAC12IR
        //glitchvoltages(0xfff,0xfff);
        ADC12CTL0 = REF2_5V + REFON;                                    // Internal 2.5V ref on
-       for(i=0;i!=0xFFFF;i++) asm("nop");
+       //for(i=0;i!=0xFFFF;i++) asm("nop"); //DO NOT UNCOMMENT, break GCC4.
        DAC12_0CTL = DAC12IR + DAC12AMP_5 + DAC12ENC; // Int ref gain 1
        DAC12_0DAT = 0xFFF; //Max voltage 0xfff
        DAC12_1CTL = DAC12IR + DAC12AMP_5 + DAC12ENC; // Int ref gain 1
        DAC12_0CTL = DAC12IR + DAC12AMP_5 + DAC12ENC; // Int ref gain 1
        DAC12_0DAT = 0xFFF; //Max voltage 0xfff
        DAC12_1CTL = DAC12IR + DAC12AMP_5 + DAC12ENC; // Int ref gain 1
@@ -71,7 +72,7 @@ void init()
        /** FIXME
          
          This part is really ugly.  GSEL (P5.7) must be high to select
        /** FIXME
          
          This part is really ugly.  GSEL (P5.7) must be high to select
-         normal voltage, but a lot of applications light to swing it low
+         normal voltage, but a lot of applications like to swing it low
          to be a nuissance.  To get around this, we assume that anyone
          with a glitching FET will also have a DAC, then we set that DAC
          to a high voltage.
          to be a nuissance.  To get around this, we assume that anyone
          with a glitching FET will also have a DAC, then we set that DAC
          to a high voltage.
@@ -85,6 +86,8 @@ void init()
        //Enable Interrupts.
        //eint();
        
        //Enable Interrupts.
        //eint();
        
+       
+       
        #ifdef INITPLATFORM
        INITPLATFORM;
        #endif
        #ifdef INITPLATFORM
        INITPLATFORM;
        #endif
@@ -120,71 +123,61 @@ void handle(uint8_t const app,
 
 
 //! Main loop.
 
 
 //! Main loop.
-int main(void)
-{
-       volatile unsigned int i;
-       unsigned char app, verb;
-       unsigned long len;
-       // MSP reboot count for reset input & reboot function located at 0xFFFE
-       volatile unsigned int reset_count = 0;
-       void (*reboot_function)(void) = (void *) 0xFFFE;
-
-       init();
+int main(void){
+  volatile unsigned int i;
+  unsigned char app, verb;
+  unsigned long len;
+  // MSP reboot count for reset input & reboot function located at 0xFFFE
+  volatile unsigned int reset_count = 0;
+  void (*reboot_function)(void) = (void *) 0xFFFE;
+  
+  init();
   
   
-       txstring(MONITOR,OK,"http://goodfet.sf.net/");
+  txstring(MONITOR,OK,"http://goodfet.sf.net/");
   
   
-       //Command loop.  There's no end!
-       while(1)
-       {
-               //Magic 3
-               app = serial_rx();
-
-               // If the app is the reset byte (0x80) increment and loop
-               if (app == RESET)
-               {
-                       reset_count++;
-
-                       if (reset_count > 4) 
-                       {
-                               // We could trigger the WDT with either:
-                               // WDTCTL = 0;
-                               // or
-                               // WDTCTL = WDTPW + WDTCNTCL + WDTSSEL + 0x00;
-                               // but instead we'll jump to our reboot function pointer
-                               (*reboot_function)();
-                       }
-
-                       continue;
-               } 
-               else 
-               {
-                       reset_count = 0;
-               }
-
-               verb = serial_rx();
-               //len=serial_rx();
-               len = rxword();
-
-               //Read data, looking for buffer overflow.y
-               if(len <= CMDDATALEN)
-               {
-                       for(i = 0; i < len; i++)
-                       {
-                               cmddata[i] = serial_rx();
-                       }
-
-                       handle(app,verb,len);
-               }
-               else
-               {
-                       //Listen to the blaberring.
-                       for(i = 0; i < len; i++)
-                               serial_rx();
-
-                       //Reply with an error.
-                       debugstr("Buffer length exceeded.");
-                       txdata(MONITOR,NOK,0);
-               }
-       }
+  //Command loop.  There's no end!
+  while(1){
+    //Magic 3
+    app = serial_rx();
+    
+    // If the app is the reset byte (0x80) increment and loop
+    if (app == RESET){
+      reset_count++;
+      
+      if (reset_count > 4){
+       // We could trigger the WDT with either:
+       // WDTCTL = 0;
+       // or
+       // WDTCTL = WDTPW + WDTCNTCL + WDTSSEL + 0x00;
+       // but instead we'll jump to our reboot function pointer
+       (*reboot_function)();
+      }
+      
+      continue;
+    }else{
+      reset_count = 0;
+    }
+
+    verb = serial_rx();
+    //len=serial_rx();
+    len = rxword();
+    
+    //Read data, looking for buffer overflow.y
+    if(len <= CMDDATALEN){
+      for(i = 0; i < len; i++){
+       cmddata[i] = serial_rx();
+      }
+
+      handle(app,verb,len);
+    }else{
+      //Listen to the blaberring.
+      for(i = 0; i < len; i++)
+       serial_rx();
+      
+      //Reply with an error.
+      debugstr("Buffer length exceeded.");
+      txdata(MONITOR,NOK,0);
+    }
+  }
 }
 
 }