summaryrefslogtreecommitdiff
path: root/bsp
diff options
context:
space:
mode:
authorqiuyiuestc <[email protected]>2010-02-04 14:46:09 +0000
committerqiuyiuestc <[email protected]>2010-02-04 14:46:09 +0000
commit95fd101d515e1d3819840207a9bdc6c1343bf9b8 (patch)
tree7f55f8b1589a336cdef2eb3dd7325b1817a51985 /bsp
parentc05af1b737a0f994deffe2b0b87d47807d67c13e (diff)
support GCC compiler
git-svn-id: https://rt-thread.googlecode.com/svn/trunk@371 bbd45198-f89e-11dd-88c7-29a3b14d5316
Diffstat (limited to 'bsp')
-rw-r--r--bsp/mini2440/key.c128
-rw-r--r--bsp/mini2440/rtconfig.h5
-rw-r--r--bsp/mini2440/rtconfig.py17
-rw-r--r--bsp/mini2440/startup.c26
4 files changed, 100 insertions, 76 deletions
diff --git a/bsp/mini2440/key.c b/bsp/mini2440/key.c
index 5c52fd2c17..9fc655a02e 100644
--- a/bsp/mini2440/key.c
+++ b/bsp/mini2440/key.c
@@ -21,88 +21,90 @@ key_power GPG11
static void key_thread_entry(void *parameter)
{
- rt_time_t next_delay;
- struct rtgui_event_kbd kbd_event;
+ rt_time_t next_delay;
+ struct rtgui_event_kbd kbd_event;
- /* init gpio configuration */
- GPGCON = GPGCON & (~((3<<22)|(3<<6)|(3<<0)|(3<<10)|(3<<12)|(3<<14))) |
- ((2<<22)|(2<<6)|(2<<0)|(2<<10)|(2<<12)|(2<<14));
+ /* init gpio configuration */
+ GPGCON = GPGCON & (~((3<<22)|(3<<6)|(3<<0)|(3<<10)|(3<<12)|(3<<14))) |
+ ((2<<22)|(2<<6)|(2<<0)|(2<<10)|(2<<12)|(2<<14));
- /* init keyboard event */
- RTGUI_EVENT_KBD_INIT(&kbd_event);
- kbd_event.mod = RTGUI_KMOD_NONE;
- kbd_event.unicode = 0;
+ /* init keyboard event */
+ RTGUI_EVENT_KBD_INIT(&kbd_event);
+ kbd_event.mod = RTGUI_KMOD_NONE;
+ kbd_event.unicode = 0;
- while (1)
- {
- next_delay = 20;
+ while (1)
+ {
+ next_delay = 20;
kbd_event.key = RTGUIK_UNKNOWN;
- kbd_event.type = RTGUI_KEYDOWN;
- if ( key_enter_GETVALUE() == 0 )
- {
- rt_thread_delay(next_delay);
- if (key_enter_GETVALUE() == 0)
- {
- /* HOME key */
- rt_kprintf("key_home\n");
- kbd_event.key = RTGUIK_HOME;
- }
- else
- {
- rt_kprintf("key_enter\n");
- kbd_event.key = RTGUIK_RETURN;
- }
- }
+ kbd_event.type = RTGUI_KEYDOWN;
+ if ( key_enter_GETVALUE() == 0 )
+ {
+ rt_thread_delay(next_delay);
+ if (key_enter_GETVALUE() == 0)
+ {
+ /* HOME key */
+ rt_kprintf("key_home\n");
+ kbd_event.key = RTGUIK_HOME;
+ }
+ else
+ {
+ rt_kprintf("key_enter\n");
+ kbd_event.key = RTGUIK_RETURN;
+ }
+ }
- if ( key_down_GETVALUE() == 0 )
- {
- rt_kprintf("key_down\n");
- kbd_event.key = RTGUIK_DOWN;
- }
+ if ( key_down_GETVALUE() == 0 )
+ {
+ rt_kprintf("key_down\n");
+ kbd_event.key = RTGUIK_DOWN;
+ }
- if ( key_up_GETVALUE() == 0 )
- {
- rt_kprintf("key_up\n");
- kbd_event.key = RTGUIK_UP;
- }
+ if ( key_up_GETVALUE() == 0 )
+ {
+ rt_kprintf("key_up\n");
+ kbd_event.key = RTGUIK_UP;
+ }
- if ( key_right_GETVALUE() == 0 )
- {
- rt_kprintf("key_right\n");
- kbd_event.key = RTGUIK_RIGHT;
- }
+ if ( key_right_GETVALUE() == 0 )
+ {
+ rt_kprintf("key_right\n");
+ kbd_event.key = RTGUIK_RIGHT;
+ }
- if ( key_left_GETVALUE() == 0 )
- {
- rt_kprintf("key_left\n");
- kbd_event.key = RTGUIK_LEFT;
- }
+ if ( key_left_GETVALUE() == 0 )
+ {
+ rt_kprintf("key_left\n");
+ kbd_event.key = RTGUIK_LEFT;
+ }
if (kbd_event.key != RTGUIK_UNKNOWN)
{
- /* post down event */
- rtgui_server_post_event(&(kbd_event.parent), sizeof(kbd_event));
+ /* post down event */
+ rtgui_server_post_event(&(kbd_event.parent), sizeof(kbd_event));
next_delay = 10;
- /* delay to post up event */
- rt_thread_delay(next_delay);
+ /* delay to post up event */
+ rt_thread_delay(next_delay);
- /* post up event */
- kbd_event.type = RTGUI_KEYUP;
- rtgui_server_post_event(&(kbd_event.parent), sizeof(kbd_event));
+ /* post up event */
+ kbd_event.type = RTGUI_KEYUP;
+ rtgui_server_post_event(&(kbd_event.parent), sizeof(kbd_event));
}
- /* wait next key press */
- rt_thread_delay(next_delay);
- }
+ /* wait next key press */
+ rt_thread_delay(next_delay);
+ }
}
void rt_hw_key_init()
{
- rt_thread_t key_tid;
- key_tid = rt_thread_create("key",
- key_thread_entry, RT_NULL,
- 512, 30, 5);
- if (key_tid != RT_NULL) rt_thread_startup(key_tid);
+ #if 0
+ rt_thread_t key_tid;
+ key_tid = rt_thread_create("key",
+ key_thread_entry, RT_NULL,
+ 512, 30, 5);
+ if (key_tid != RT_NULL) rt_thread_startup(key_tid);
+ #endif
}
diff --git a/bsp/mini2440/rtconfig.h b/bsp/mini2440/rtconfig.h
index 1f6a77cbb9..6cf7dc716a 100644
--- a/bsp/mini2440/rtconfig.h
+++ b/bsp/mini2440/rtconfig.h
@@ -70,9 +70,6 @@
/* SECTION: finsh, a C-Express shell */
/* Using FinSH as Shell*/
#define RT_USING_FINSH
-/* Using symbol table */
-#define FINSH_USING_SYMTAB
-#define FINSH_USING_DESCRIPTION
/* SECTION: a runtime libc library */
/* a runtime libc library */
@@ -94,7 +91,7 @@
#define RT_USING_DFS_EFSL
#define RT_USING_DFS_YAFFS2
-#define RT_USING_WORKDIR
+/* #define DFS_USING_WORKDIR */
/* the max number of mounted filesystem */
#define DFS_FILESYSTEMS_MAX 2
diff --git a/bsp/mini2440/rtconfig.py b/bsp/mini2440/rtconfig.py
index fb5e5e506a..ae3d48f2fe 100644
--- a/bsp/mini2440/rtconfig.py
+++ b/bsp/mini2440/rtconfig.py
@@ -25,10 +25,10 @@ ARCH='arm'
CPU='s3c24x0'
TextBase='0x30000000'
-#PLATFORM = 'gcc'
-#EXEC_PATH = 'E:/Program Files/CodeSourcery/Sourcery G++ Lite/bin'
-PLATFORM = 'armcc'
-EXEC_PATH = 'E:/Keil'
+PLATFORM = 'gcc'
+EXEC_PATH = 'E:/Program Files/CodeSourcery/Sourcery G++ Lite/bin'
+#PLATFORM = 'armcc'
+#EXEC_PATH = 'E:/Keil'
BUILD = 'debug'
if PLATFORM == 'gcc':
@@ -38,15 +38,15 @@ if PLATFORM == 'gcc':
AS = PREFIX + 'gcc'
AR = PREFIX + 'ar'
LINK = PREFIX + 'gcc'
- TARGET_EXT = 'elf'
+ TARGET_EXT = 'axf'
SIZE = PREFIX + 'size'
OBJDUMP = PREFIX + 'objdump'
OBJCPY = PREFIX + 'objcopy'
DEVICE = ' -mcpu=arm920t'
- CFLAGS = DEVICE + ' -Dsourcerygxx' + ' -nostdinc'
- AFLAGS = ' -c' + DEVICE + ' -x assembler-with-cpp'
- LFLAGS = DEVICE + ' -Wl,--gc-sections,-Map=main.elf.map,-cref,-u,Reset_Handler -T mini2440_ram.ld'
+ CFLAGS = DEVICE + ' -DRT_USING_MINILIBC' + ' -nostdinc -nostdlib -fno-builtin'
+ AFLAGS = ' -c' + DEVICE + ' -x assembler-with-cpp' + ' -DTEXT_BASE=' + TextBase
+ LFLAGS = DEVICE + ' -Wl,--gc-sections,-Map=main.elf.map,-cref,-u,_start -T mini2440_ram.ld' + ' -Ttext ' + TextBase
CPATH = ''
LPATH = ''
@@ -89,6 +89,7 @@ elif PLATFORM == 'armcc':
RT_USING_MINILIBC = False
if RT_USING_FINSH:
+ CFLAGS += ' -D FINSH_USING_SYMTAB -DFINSH_USING_DESCRIPTION'
LFLAGS += ' --keep __fsym_* --keep __vsym_*'
if RT_USING_WEBSERVER:
CFLAGS += ' -DWEBS -DUEMF -DRTT -D__NO_FCNTL=1 -DRT_USING_WEBSERVER'
diff --git a/bsp/mini2440/startup.c b/bsp/mini2440/startup.c
index 87b40d4c8b..e5184dd245 100644
--- a/bsp/mini2440/startup.c
+++ b/bsp/mini2440/startup.c
@@ -48,10 +48,34 @@ extern struct rt_device uart0_device;
extern int Image$$ER_ZI$$ZI$$Base;
extern int Image$$ER_ZI$$ZI$$Length;
extern int Image$$ER_ZI$$ZI$$Limit;
-#else
+#elif (defined (__GNUC__))
+ rt_uint8_t _irq_stack_start[1024];
+ rt_uint8_t _fiq_stack_start[1024];
+ rt_uint8_t _undefined_stack_start[512];
+ rt_uint8_t _abort_stack_start[512];
+ rt_uint8_t _svc_stack_start[1024] SECTION(".nobss");
extern int __bss_end;
#endif
+/**
+ * Fix me
+ */
+ #if (defined (__GNUC__))
+void *_sbrk (int incr)
+{
+ extern int __bss_end; /* Set by linker. */
+ static char * heap_end;
+ char * prev_heap_end;
+
+ if (heap_end == 0)
+ heap_end = & __bss_end;
+
+ prev_heap_end = heap_end;
+ heap_end += incr;
+
+ return (void *) prev_heap_end;
+}
+#endif
#ifdef RT_USING_FINSH
extern void finsh_system_init(void);