let it compile
authorNIIBE Yutaka <gniibe@fsij.org>
Fri, 8 Jul 2011 11:12:13 +0000 (20:12 +0900)
committerNIIBE Yutaka <gniibe@fsij.org>
Fri, 8 Jul 2011 11:12:13 +0000 (20:12 +0900)
.gitignore [new file with mode: 0644]
boards/STBEE_MINI/board.c
boards/STBEE_MINI/board.h
src/.gitignore [new file with mode: 0644]
src/chconf.h
src/main.c
src/neug.ld.in

diff --git a/.gitignore b/.gitignore
new file mode 100644 (file)
index 0000000..d79de36
--- /dev/null
@@ -0,0 +1,2 @@
+*.o
+*.lst
index 25461c4..3102589 100644 (file)
@@ -16,7 +16,7 @@ void boardInit(void)
 }
 
 void
-USB_Cable_Config (FunctionalState NewState)
+USB_Cable_Config (int NewState)
 {
   if (NewState != DISABLE)
     palSetPad (IOPORT1, GPIOA_USB_ENABLE);
index 39f379d..2fb1701 100644 (file)
 extern "C" {
 #endif
   void boardInit(void);
+  void USB_Cable_Config (int NewState);
+  void set_led (int value);
 #ifdef __cplusplus
 }
 #endif
diff --git a/src/.gitignore b/src/.gitignore
new file mode 100644 (file)
index 0000000..bbeb98c
--- /dev/null
@@ -0,0 +1,9 @@
+*.hex
+*.bin
+neug.elf
+neug.dmp
+neug.ld
+neug.map
+config.h
+Makefile
+.dep
index 13fd71e..f2be5cb 100644 (file)
@@ -22,7 +22,7 @@
 #define CH_USE_MESSAGES                 FALSE
 #define CH_USE_MESSAGES_PRIORITY        FALSE
 #define CH_USE_MAILBOXES                FALSE
-#define CH_USE_QUEUES                   FALSE
+#define CH_USE_QUEUES                   TRUE
 #define CH_USE_MEMCORE                  TRUE
 #define CH_USE_HEAP                     TRUE
 #define CH_USE_MALLOC_HEAP              FALSE
index ed38507..5636565 100644 (file)
 
 #include "ch.h"
 #include "hal.h"
+#include "board.h"
 #include "usb_cdc.h"
 
-#include "hw_config.h"
-
 /*
  * USB Driver structure.
  */
@@ -264,6 +263,9 @@ static const USBEndpointConfig ep3config = {
   NULL
 };
 
+#define CONFIGURED 1
+uint8_t bDeviceState;
+
 /*
  * Handles the USB driver global events.
  */
@@ -279,6 +281,7 @@ static void usb_event(USBDriver *usbp, usbevent_t event) {
        Note, this callback is invoked from an ISR so I-Class functions
        must be used.*/
     chSysLockFromIsr();
+    bDeviceState = CONFIGURED;
     usbInitEndpointI(usbp, DATA_REQUEST_EP, &ep1config);
     usbInitEndpointI(usbp, INTERRUPT_REQUEST_EP, &ep2config);
     usbInitEndpointI(usbp, DATA_AVAILABLE_EP, &ep3config);
@@ -308,120 +311,6 @@ static const SerialUSBConfig serusbcfg = {
   }
 };
 \f
-struct stdout {
-  Mutex m;
-  CondVar start_cnd;
-  CondVar finish_cnd;
-  const char *str;
-  int size;
-};
-
-static struct stdout stdout;
-
-static void
-stdout_init (void)
-{
-  chMtxInit (&stdout.m);
-  chCondInit (&stdout.start_cnd);
-  chCondInit (&stdout.finish_cnd);
-  stdout.size = 0;
-  stdout.str = NULL;
-}
-
-void
-write (const char *s, int size)
-{
-  if (size == 0)
-    return;
-
-  chMtxLock (&stdout.m);
-  while (stdout.str)
-    chCondWait (&stdout.finish_cnd);
-  stdout.str = s;
-  stdout.size = size;
-  chCondSignal (&stdout.start_cnd);
-  chCondWait (&stdout.finish_cnd);
-  chMtxUnlock ();
-}
-
-Thread *stdout_thread;
-static uint32_t count_in;
-static uint8_t buffer_in[VIRTUAL_COM_PORT_DATA_SIZE];
-
-static WORKING_AREA(waSTDOUTthread, 128);
-
-static msg_t
-STDOUTthread (void *arg)
-{
-  (void)arg;
-  stdout_thread = chThdSelf ();
-
- again:
-
-  while (1)
-    {
-      if (bDeviceState == CONFIGURED)
-       break;
-
-      chThdSleepMilliseconds (100);
-    }
-
-  while (1)
-    {
-      const char *p;
-      int len;
-
-      if (bDeviceState != CONFIGURED)
-       break;
-
-      chMtxLock (&stdout.m);
-      if (stdout.str == NULL)
-       chCondWait (&stdout.start_cnd);
-
-      p = stdout.str;
-      len = stdout.size;
-      while (len > 0)
-       {
-         int i;
-
-         if (len < VIRTUAL_COM_PORT_DATA_SIZE)
-           {
-             for (i = 0; i < len; i++)
-               buffer_in[i] = p[i];
-             count_in = len;
-             len = 0;
-           }
-         else
-           {
-             for (i = 0; i < VIRTUAL_COM_PORT_DATA_SIZE; i++)
-               buffer_in[i] = p[i];
-             len -= VIRTUAL_COM_PORT_DATA_SIZE;
-             count_in = VIRTUAL_COM_PORT_DATA_SIZE;
-             p += count_in;
-           }
-
-         chEvtClear (EV_TX_READY);
-
-         USB_SIL_Write (EP3_IN, buffer_in, count_in);
-         SetEPTxValid (ENDP3);
-
-         chEvtWaitOne (EV_TX_READY);
-       }
-
-      stdout.str = NULL;
-      stdout.size = 0;
-      chCondBroadcast (&stdout.finish_cnd);
-      chMtxUnlock ();
-    }
-
-  goto again;
-  return 0;
-}
-
-
-static WORKING_AREA(waUSBthread, 128);
-extern msg_t USBthread (void *arg);
-
 /*
  * main thread does 1-bit LED display output
  */
@@ -430,38 +319,6 @@ extern msg_t USBthread (void *arg);
 #define LED_TIMEOUT_ONE                MS2ST(200)
 #define LED_TIMEOUT_STOP       MS2ST(500)
 
-
-#define ID_OFFSET 12
-static void
-device_initialize_once (void)
-{
-  const uint8_t *p = &gnukStringSerial[ID_OFFSET];
-
-  if (p[0] == 0xff && p[1] == 0xff && p[2] == 0xff && p[3] == 0xff)
-    {
-      /*
-       * This is the first time invocation.
-       * Setup serial number by unique device ID.
-       */
-      const uint8_t *u = unique_device_id ();
-      int i;
-
-      for (i = 0; i < 4; i++)
-       {
-         uint8_t b = u[i];
-         uint8_t nibble; 
-
-         nibble = (b >> 4);
-         nibble += (nibble >= 10 ? ('A' - 10) : '0');
-         flash_put_data_internal (&p[i*4], nibble);
-         nibble = (b & 0x0f);
-         nibble += (nibble >= 10 ? ('A' - 10) : '0');
-         flash_put_data_internal (&p[i*4+2], nibble);
-       }
-    }
-}
-
-
 Thread *main_thread;
 \f
 /* Total number of channels to be sampled by a single ADC operation.*/
@@ -479,7 +336,7 @@ static adcsample_t samp[ADC_GRP1_NUM_CHANNELS * ADC_GRP1_BUF_DEPTH];
 #define ADC_SAMPLE_13P5         2   /**< @brief 13.5 cycles sampling time.  */
 #define ADC_SAMPLE_239P5        7   /**< @brief 239.5 cycles sampling time. */
 
-static void adccb (adcsample_t *buffer, size_t n);
+static void adccb (ADCDriver *adcp, adcsample_t *buffer, size_t n);
 
 /*
  * ADC conversion group.
@@ -490,6 +347,7 @@ static void adccb (adcsample_t *buffer, size_t n);
 static const ADCConversionGroup adcgrpcfg = {
   FALSE,
   ADC_GRP1_NUM_CHANNELS,
+  adccb,
   0,
   ADC_CR2_EXTSEL_SWSTART | ADC_CR2_TSVREFE | ADC_CR2_CONT,
   ADC_SMPR1_SMP_SENSOR(ADC_SAMPLE_1P5) | ADC_SMPR1_SMP_VREF(ADC_SAMPLE_1P5),
@@ -502,15 +360,13 @@ static const ADCConversionGroup adcgrpcfg = {
 /*
  * ADC end conversion callback.
  */
-static void adccb (adcsample_t *buffer, size_t n)
+static void adccb (ADCDriver *adcp, adcsample_t *buffer, size_t n)
 {
-  ADCDriver *adcp = &ADCD1;
-
   (void) buffer; (void) n;
 
   chSysLockFromIsr();
-  if (adcp->ad_state == ADC_COMPLETE)
-    chEvtSignalI (main_thread, (eventmask_t)1);
+  if (adcp->state == ADC_COMPLETE)
+    chEvtSignalFlagsI (main_thread, (eventmask_t)1);
   chSysUnlockFromIsr();
 }
 \f
@@ -609,21 +465,8 @@ main (int argc, char **argv)
 
   main_thread = chThdSelf ();
 
-  device_initialize_once ();
-
   adcStart (&ADCD1, NULL);
-  adcStartConversion (&ADCD1, &adcgrpcfg, samp, ADC_GRP1_BUF_DEPTH, adccb);
-
-  stdout_init ();
-
-  /*
-   * Creates 'stdout' thread.
-   */
-  chThdCreateStatic (waSTDOUTthread, sizeof(waSTDOUTthread),
-                    NORMALPRIO, STDOUTthread, NULL);
-
-  chThdCreateStatic (waUSBthread, sizeof(waUSBthread),
-                    NORMALPRIO, USBthread, NULL);
+  adcStartConversion (&ADCD1, &adcgrpcfg, samp, ADC_GRP1_BUF_DEPTH);
 
   while (1)
     {
@@ -653,7 +496,7 @@ main (int argc, char **argv)
                 | ((samp[6] & 0x01) << 7) | ((samp[7] & 0x01) << 6));
 
          adcStartConversion (&ADCD1, &adcgrpcfg, samp,
-                             ADC_GRP1_BUF_DEPTH, adccb);
+                             ADC_GRP1_BUF_DEPTH);
 
          ep_add (b);
          if (++round >= 7)
@@ -673,7 +516,7 @@ main (int argc, char **argv)
 
                  led++;
                  set_led ((led & 0x80) == 0);
-                 _write (s, 32);
+                 chIOWriteTimeout (&SDU1, (uint8_t *)s, 32, TIME_INFINITE);
                }
 
              round = 0;
index d211203..cf344a6 100644 (file)
@@ -43,11 +43,32 @@ __ram_end__             = __ram_start__ + __ram_size__;
 SECTIONS
 {
     . = 0;
+    _text = .;
 
-    .text : ALIGN(16) SUBALIGN(16)
+    startup : ALIGN(16) SUBALIGN(16)
     {
-        _text = .;
         KEEP(*(vectors))
+    } > flash
+
+    constructors : ALIGN(4) SUBALIGN(4)
+    {
+        PROVIDE(__init_array_start = .);
+        KEEP(*(SORT(.init_array.*)))
+        KEEP(*(.init_array))
+        PROVIDE(__init_array_end = .);
+    } > flash
+
+    destructors : ALIGN(4) SUBALIGN(4)
+    {
+        PROVIDE(__fini_array_start = .);
+        KEEP(*(.fini_array))
+        KEEP(*(SORT(.fini_array.*)))
+        PROVIDE(__fini_array_end = .);
+    } > flash
+
+    .text : ALIGN(16) SUBALIGN(16)
+    {
+        *(.text.startup.*)
         *(.text)
         *(.text.*)
         *(.rodata)
@@ -57,31 +78,17 @@ SECTIONS
         *(.gcc*)
     } > flash
 
-    .ctors :
-    {
-        PROVIDE(_ctors_start_ = .);
-        KEEP(*(SORT(.ctors.*)))
-        KEEP(*(.ctors))
-        PROVIDE(_ctors_end_ = .);
-    } > flash
-
-    .dtors :
-    {
-        PROVIDE(_dtors_start_ = .);
-        KEEP(*(SORT(.dtors.*)))
-        KEEP(*(.dtors))
-        PROVIDE(_dtors_end_ = .);
-    } > flash
-
-    .ARM.extab : {*(.ARM.extab* .gnu.linkonce.armextab.*)}
+    .ARM.extab : {*(.ARM.extab* .gnu.linkonce.armextab.*)} > flash
 
-    __exidx_start = .;
-    .ARM.exidx : {*(.ARM.exidx* .gnu.linkonce.armexidx.*)} > flash
-    __exidx_end = .;
+    .ARM.exidx : {
+        PROVIDE(__exidx_start = .);
+        *(.ARM.exidx* .gnu.linkonce.armexidx.*)
+        PROVIDE(__exidx_end = .);
+     } > flash
 
-    .eh_frame_hdr : {*(.eh_frame_hdr)}
+    .eh_frame_hdr : {*(.eh_frame_hdr)} > flash
 
-    .eh_frame : ONLY_IF_RO {*(.eh_frame)}
+    .eh_frame : ONLY_IF_RO {*(.eh_frame)} > flash
 
     . = ALIGN(4);
     _etext = .;
@@ -89,26 +96,26 @@ SECTIONS
 
     .data :
     {
-        _data = .;
+        PROVIDE(_data = .);
         *(.data)
         . = ALIGN(4);
         *(.data.*)
         . = ALIGN(4);
         *(.ramtext)
         . = ALIGN(4);
-        _edata = .;
+        PROVIDE(_edata = .);
     } > ram AT > flash
 
     .bss :
     {
-        _bss_start = .;
+        PROVIDE(_bss_start = .);
         *(.bss)
         . = ALIGN(4);
         *(.bss.*)
         . = ALIGN(4);
         *(COMMON)
         . = ALIGN(4);
-        _bss_end = .;
+        PROVIDE(_bss_end = .);
     } > ram
 }