diff --git a/bsp/stm3210/SConstruct b/bsp/stm3210/SConstruct index 67451b59225899f1c1052e7e552d61d7c5457ede..f57833a134b73733c2bbea44d66d0b4ba591f753 100644 --- a/bsp/stm3210/SConstruct +++ b/bsp/stm3210/SConstruct @@ -37,7 +37,7 @@ if rtconfig.RT_USING_LWIP: objs = objs + SConscript(RTT_ROOT + '/net/lwip/SConscript', variant_dir='build/net/lwip', duplicate=0) src_bsp = ['application.c', 'startup.c', 'board.c', 'stm32f10x_it.c'] -src_drv = ['rtc.c', 'usart.c'] +src_drv = ['rtc.c', 'usart.c', 'led.c'] if rtconfig.RT_USING_DFS: if rtconfig.STM32_TYPE == 'STM32F10X_HD': diff --git a/bsp/stm3210/rtconfig.py b/bsp/stm3210/rtconfig.py index 5e76672df7fe52eae5125525acf02df7f038e04e..26ed7866a6706e56803d34bd1ba90550cedc7135 100644 --- a/bsp/stm3210/rtconfig.py +++ b/bsp/stm3210/rtconfig.py @@ -1,28 +1,59 @@ +import SCons.cpp + # component options -# finsh shell option -RT_USING_FINSH = True -# device file system options -RT_USING_DFS = True -RT_USING_DFS_EFSL = True -RT_USING_DFS_ELMFAT = False +# make all component false +RT_USING_FINSH = False +RT_USING_DFS = False +RT_USING_DFS_EFSL = False RT_USING_DFS_YAFFS2 = False +RT_USING_LWIP = False +RT_USING_WEBSERVER = False +RT_USING_RTGUI = False + +# parse rtconfig.h to get used component +PreProcessor = SCons.cpp.PreProcessor() +f = file('rtconfig.h', 'r') +contents = f.read() +f.close() +PreProcessor.process_contents(contents) +rtconfig_ns = PreProcessor.cpp_namespace + +# finsh shell options +if rtconfig_ns.has_key('RT_USING_FINSH'): + RT_USING_FINSH = True + +# device virtual filesystem options +if rtconfig_ns.has_key('RT_USING_DFS'): + RT_USING_DFS = True + + if rtconfig_ns.has_key('RT_USING_DFS_EFSL'): + RT_USING_DFS_EFSL = True + if rtconfig_ns.has_key('RT_USING_DFS_YAFFS2'): + RT_USING_DFS_YAFFS2 = True # lwip options -RT_USING_LWIP = True +if rtconfig_ns.has_key('RT_USING_LWIP'): + RT_USING_LWIP = True + if rtconfig_ns.has_key('RT_USING_WEBSERVER'): + RT_USING_WEBSERVER = True # rtgui options -RT_USING_RTGUI = False +if rtconfig_ns.has_key('RT_USING_RTGUI'): + RT_USING_RTGUI = True # toolchains options ARCH='arm' CPU='stm32' -PLATFORM = 'gcc' -EXEC_PATH = 'E:/Program Files/CodeSourcery/Sourcery G++ Lite/bin' -#PLATFORM = 'armcc' -#EXEC_PATH = 'C:/Keil' -#PLATFORM = 'iar' -#EXEC_PATH = 'E:/Program Files/IAR Systems/Embedded Workbench 5.4/' +CROSS_TOOL='gcc' + +if CROSS_TOOL == 'gcc': + PLATFORM = 'gcc' + EXEC_PATH = 'D:/SourceryGCC/bin' +elif CROSS_TOOL == 'keil': + PLATFORM = 'armcc' + EXEC_PATH = 'E:/Keil' + BUILD = 'debug' STM32_TYPE = 'STM32F10X_HD' diff --git a/libcpu/arm/stm32/serial.c b/libcpu/arm/stm32/serial.c index 19b0d80375443776bbb666f79b841a1a18ad4330..f77e92e254266a6de19fc09069e6338f0b933ac2 100644 --- a/libcpu/arm/stm32/serial.c +++ b/libcpu/arm/stm32/serial.c @@ -335,6 +335,7 @@ static rt_size_t rt_serial_write (rt_device_t dev, rt_off_t pos, const void* buf if (size > 0) err_code = -RT_EFULL; } +#ifdef RT_USING_HEAP else if (dev->flag & RT_DEVICE_FLAG_DMA_TX) { /* DMA mode Tx */ @@ -381,6 +382,7 @@ static rt_size_t rt_serial_write (rt_device_t dev, rt_off_t pos, const void* buf rt_hw_interrupt_enable(level); } } +#endif else { /* polling mode */ @@ -544,6 +546,7 @@ void rt_hw_serial_dma_rx_isr(rt_device_t device) */ void rt_hw_serial_dma_tx_isr(rt_device_t device) { +#ifdef RT_USING_HEAP rt_uint32_t level; struct stm32_serial_data_node* data_node; struct stm32_serial_device* uart = (struct stm32_serial_device*) device->private; @@ -570,7 +573,7 @@ void rt_hw_serial_dma_tx_isr(rt_device_t device) /* enable interrupt */ rt_hw_interrupt_enable(level); - /* free data node memory */ + /* free data node memory(!!) */ rt_free(data_node); if (uart->dma_tx->list_tail != RT_NULL) @@ -585,6 +588,7 @@ void rt_hw_serial_dma_tx_isr(rt_device_t device) /* no data to be transmitted, disable DMA */ DMA_Cmd(uart->dma_tx->dma_channel, DISABLE); } +#endif } /*@}*/