startup.c 2.6 KB
Newer Older
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
/*
 * File      : startup.c
 * This file is part of RT-Thread RTOS
 * COPYRIGHT (C) 2006, RT-Thread Develop Team
 *
 * The license and distribution terms for this file may be
 * found in the file LICENSE in this distribution or at
 * http://www.rt-thread.org/license/LICENSE
 *
 * Change Logs:
 * Date           Author       Notes
 * 2006-08-31     Bernard      first implementation
 */

#include <rthw.h>
#include <rtthread.h>

M
mbbill@gmail.com 已提交
18
#include "board.h"
19

M
mbbill@gmail.com 已提交
20 21 22 23 24 25 26 27
#ifdef RT_USING_DFS
#include "sd.h"
#endif

#ifdef RT_USING_LWIP
#include "sam7x_emac.h"
extern rt_err_t eth_system_device_init(void);
#endif
28 29 30 31 32 33 34 35 36 37 38 39 40 41 42

#ifdef RT_USING_FINSH
#include <finsh.h>
extern void finsh_system_init(void);
#endif

/**
 * @addtogroup sam7x256
 */

/*@{*/
#ifdef __CC_ARM
extern int Image$$RW_IRAM1$$ZI$$Limit;
#endif

M
mbbill@gmail.com 已提交
43
#ifdef __GNUC__
44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81
extern unsigned char __bss_start;
extern unsigned char __bss_end;
#endif

extern void rt_hw_interrupt_init(void);
extern int  rt_application_init(void);
#ifdef RT_USING_DEVICE
extern rt_err_t rt_hw_serial_init(void);
#endif
#ifdef RT_USING_FINSH
extern void finsh_system_init(void);
#endif

void led_flash()
{
	int i;
	static int j = 0;

	rt_hw_board_led_off(j);
	for (i = 0; i < 2000000; i ++);

	j ++;
	if (j >= 4) j = 0;

	rt_hw_board_led_on(j);
	for (i = 0; i < 2000000; i ++);
}

/**
 * This function will startup RT-Thread RTOS.
 */
void rtthread_startup(void)
{
	/* init hardware interrupt */
	rt_hw_interrupt_init();

	/* init board */
	rt_hw_board_init();
M
mbbill@gmail.com 已提交
82

83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115
	rt_show_version();

	/* init tick */
	rt_system_tick_init();

	/* init kernel object */
	rt_system_object_init();

	/* init timer system */
	rt_system_timer_init();

#ifdef RT_USING_HEAP
#ifdef __CC_ARM
	rt_system_heap_init((void*)&Image$$RW_IRAM1$$ZI$$Limit, (void*)0x00210000);
#elif __ICCARM__
    rt_system_heap_init(__segment_end("HEAP"), (void*)0x00210000);
#else
	rt_system_heap_init(&__bss_end, 0x00210000);
#endif
#endif

	/* init scheduler system */
	rt_system_scheduler_init();

#ifdef RT_USING_HOOK /* if the hook is used */
	/* set idle thread hook */
	rt_thread_idle_sethook(led_flash);
#endif

#ifdef RT_USING_DEVICE
	/* init hardware serial device */
	rt_hw_serial_init();

M
mbbill@gmail.com 已提交
116 117 118
#ifdef RT_USING_DFS
	rt_hw_sdcard_init();
#endif
119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142

	/*init all registed devices*/
	rt_device_init_all();
#endif

	/* init application */
	rt_application_init();

#ifdef RT_USING_FINSH
	/* init finsh */
	finsh_system_init();
	finsh_set_device("uart1");
#endif

	/* init idle thread */
	rt_thread_idle_init();

	/* start scheduler */
	rt_system_scheduler_start();

	/* never reach here */
	return ;
}

M
mbbill@gmail.com 已提交
143
#ifdef __CC_ARM
144 145 146 147
int main (void)
{
	/* invoke rtthread_startup */
	rtthread_startup();
M
mbbill@gmail.com 已提交
148

149 150
	return 0;
}
M
mbbill@gmail.com 已提交
151
#endif
152 153

/*@}*/