From 530d3787f98e4ca2c7726984387ded24aa9f7170 Mon Sep 17 00:00:00 2001 From: patacongo Date: Sun, 11 Oct 2009 14:23:23 +0000 Subject: [PATCH] This project actually builds git-svn-id: svn://svn.code.sf.net/p/nuttx/code/trunk@2123 42af7a65-404d-4744-a932-0658087f49c3 --- configs/stm3210e-eval/RIDE/README.txt | 38 ++++++++++++++++++++++++ configs/stm3210e-eval/RIDE/bigfatstub.c | 23 ++++++++++++++ configs/stm3210e-eval/RIDE/nuttx.elf.ld | 14 ++++----- configs/stm3210e-eval/RIDE/nuttx.rdb | Bin 66560 -> 113664 bytes 4 files changed, 68 insertions(+), 7 deletions(-) create mode 100755 configs/stm3210e-eval/RIDE/README.txt diff --git a/configs/stm3210e-eval/RIDE/README.txt b/configs/stm3210e-eval/RIDE/README.txt new file mode 100755 index 0000000000..8da1c38c98 --- /dev/null +++ b/configs/stm3210e-eval/RIDE/README.txt @@ -0,0 +1,38 @@ +README +------ + +This directory contains a simple RIDE7 project used to bring up the +STM3210E-EVAL board. This project includes only the STM32 boot-up +code under arch/arm/src and configs/stm3210e-eval/src plus as little +additional environmental support as necessary. + +bigfatstub.c + + The NuttX OS is not included in this project. This file contains + stubs for all of the NuttX entry points and this replaces NuttX + +Make.defs, defconfig, setenv.h + + The first step to using this RIDE project is to build a compatible + cygwin project. This will set up of the directories and produce + all of the necessary autogenerated files. + + cd tools + ./configure.sh stm3210e-eva/RIDE + cd .. + . ./setenv.sh + make + +nuttx.* + + RIDE7 project files + +stm32-nuttx.ld + + This is the linker script that replaces the RIDE7 linker script. + +stm32-ld.sh + + This is a shell script that will use the RIDE7 tools to relink the + NuttX binaries. Useful because RIDE7 does not provide much linker + output to see what is going on. diff --git a/configs/stm3210e-eval/RIDE/bigfatstub.c b/configs/stm3210e-eval/RIDE/bigfatstub.c index 68fba6ad6c..63150f58f4 100755 --- a/configs/stm3210e-eval/RIDE/bigfatstub.c +++ b/configs/stm3210e-eval/RIDE/bigfatstub.c @@ -1,3 +1,5 @@ +#include +#include #include "up_internal.h" void os_start(void) @@ -5,4 +7,25 @@ void os_start(void) up_lowputc('X'); up_lowputc('\n'); for (;;); +} + +void up_assert_code(const ubyte *filename, int lineno, int errorcode) +{ + up_lowputc('?'); + up_lowputc('\n'); + for (;;); +} + +int irq_attach(int irq, xcpt_t isr) +{ + up_lowputc('A'); + up_lowputc('\n'); + for (;;); +} + +uint32 *up_doirq(int irq, uint32 *regs) +{ + up_lowputc('I'); + up_lowputc('\n'); + for (;;); } \ No newline at end of file diff --git a/configs/stm3210e-eval/RIDE/nuttx.elf.ld b/configs/stm3210e-eval/RIDE/nuttx.elf.ld index f3cbabde79..4015d63391 100755 --- a/configs/stm3210e-eval/RIDE/nuttx.elf.ld +++ b/configs/stm3210e-eval/RIDE/nuttx.elf.ld @@ -2,17 +2,17 @@ SEARCH_DIR(".") SEARCH_DIR("C:\Program Files\Raisonance\Ride\Lib\ARM") STARTUP("C:\cygwin\home\Owner\projects\nuttx\nuttx\arch\arm\src\stm32_vectors.o") -INPUT("C:\cygwin\home\Owner\projects\nuttx\nuttx\configs\stm3210e-eval\RIDE\stm32_timerisr.o") INPUT("C:\cygwin\home\Owner\projects\nuttx\nuttx\configs\stm3210e-eval\RIDE\stm32_gpio.o") INPUT("C:\cygwin\home\Owner\projects\nuttx\nuttx\configs\stm3210e-eval\RIDE\stm32_irq.o") INPUT("C:\cygwin\home\Owner\projects\nuttx\nuttx\configs\stm3210e-eval\RIDE\stm32_lowputc.o") INPUT("C:\cygwin\home\Owner\projects\nuttx\nuttx\configs\stm3210e-eval\RIDE\stm32_rcc.o") INPUT("C:\cygwin\home\Owner\projects\nuttx\nuttx\configs\stm3210e-eval\RIDE\stm32_serial.o") INPUT("C:\cygwin\home\Owner\projects\nuttx\nuttx\configs\stm3210e-eval\RIDE\stm32_start.o") -EXTERN( __io_putchar ) -EXTERN( _write ) -INPUT("STM32x_io_putchar_thumb.a") -INPUT("e_stdio_thumb.a") -INPUT("STM32F10x_thumb.lib") +INPUT("C:\cygwin\home\Owner\projects\nuttx\nuttx\configs\stm3210e-eval\RIDE\bigfatstub.o") +INPUT("C:\cygwin\home\Owner\projects\nuttx\nuttx\configs\stm3210e-eval\RIDE\up_svcall.o") +INPUT("C:\cygwin\home\Owner\projects\nuttx\nuttx\configs\stm3210e-eval\RIDE\up_hardfault.o") +INPUT("C:\cygwin\home\Owner\projects\nuttx\nuttx\configs\stm3210e-eval\RIDE\up_leds.o") +INPUT("C:\cygwin\home\Owner\projects\nuttx\nuttx\configs\stm3210e-eval\RIDE\up_boot.o") +INPUT("C:\cygwin\home\Owner\projects\nuttx\nuttx\configs\stm3210e-eval\RIDE\irq_unexpectedisr.o") OUTPUT("C:\cygwin\home\Owner\projects\nuttx\nuttx\configs\stm3210e-eval\RIDE\nuttx.elf") -INCLUDE "C:\Program Files\Raisonance\Ride\lib\ARM\STM32F101_32K_32K_FLASH.ld" +INCLUDE "C:\cygwin\home\Owner\projects\nuttx\nuttx\configs\stm3210e-eval\RIDE\stm32-nuttx.ld" diff --git a/configs/stm3210e-eval/RIDE/nuttx.rdb b/configs/stm3210e-eval/RIDE/nuttx.rdb index 1bea5c43d1122d1eb73097a053bead25c4962988..34b78940bf328500651dfbfe38eb5c3f90ad556a 100755 GIT binary patch literal 113664 zcmeHQ34mNhnSNC@nIz;UB!MI(lRHC>naq`g1PDn;1`+}}I7h-{W|9odba%RY&X7Q- z^WNhWL`39PkV|k?luJOl1?5l-7|f>*VFa)W8%tm@N=f8 zzyAKJSLa`URc$_XeRH&_WJfUES|2T`G>Qx%jN?j545R2CBmFfLeibQirT(1qcJ_~h zkf{EGe;A?uqGpN5WV<+9Oc7JEKl}If&e21QCu}SgMsuLCsWY;>1+r>eeOok0zi->J zdfUdWTTa=!<%HVxYc_9Nl>Yl6=MEk`;m9%(6ZGl&P^cEa1wOQD`GNSsyK#+uXP^6l!U1sE;-W1EsN=L4zlhm5Ke6 zqV?NbnzBBh^+s_*Ys<>x*ROH^{#C)ij^>?hVNxiGHg!hlR+pE~FG*AGdA}qOjFtr2 zT3Y6poLt}9)bsxQl2Ew0wLaWca(+`6Se^E*rKKy2izjR?%aO0?SwvZz{?_30)Zhv8 z=84#_WYSlja?1MJRZgBl!c%`O%1n0ZA4}%;T3%BHDNVH;|5RGKqNsSnsq=D}oBDlZ zZ0Z|>>c!v*)24~oh@`2ft=Y609z9r@_(^6On0UWr?rBZo2s~;hW3$Xl{I#^SQWj5G zJ1vKWi7zDM5|Fw_SFnKFOj~)Z3qolnO&6#i{)%DHM`aolSxH0V)r~iM?Q15+` za%CW`13BojI6Bm^EpEeFCPw2 zR*e1s7~?!c{8DtPbL9K#8ufy-#PRYJ<2*UhctZ?VbLFGPt>UX*twO%ZJ}-Tkw{ZGnvsE{kp<38uL2Cb?ZIFsYgFH?mZrwc z5;YQ87&4RH;DF37m~ZWbj;vg%inKS>x3pxihUL=Q z-n?^1eKZnn+n&KX1X(%qkXq-3O)Wdp+V-Ky%Go(YqV-wNYY4L3^U�2Ag9XQpc~ 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 delta 6955 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