由于上班时间,不介绍RT-Thread了,大家可以去http://www.rt-thread.org/了解。
以前在ADS移植了ucos+lwip1.1,不是很稳定。
RT-Thread对lwip的优化不错,rt-thread0.3.1的bsp中包含了mini2440开发板的移植包。
2410和2440区别不大。
于是开始移植。
1.将rt-thread0.3.1从svn上下载下来,也可以http://www.rt-thread.org/下载。
2.解压后,新建一个工作目录,拷贝:
RT-Thread-0.3.1/include
RT-Thread-0.3.1/libcpu/arm/s3c24x0(我使用keil,若IAR,则是libcpu下ia32)
RT-Thread-0.3.1/src
RT-Thread-0.3.1/bsp/mini2440下
board.h,board.c,application.c,startup.c,console.c
3.建立Keil工程如下图:
Scatter File:
; *************************************************************
; *** Scatter-Loading Description File generated by uVision ***
; *************************************************************
; Run in RAM
LR_ROM1 0x30000000 { ; load region
ER_ROM1 0x30000000 0x02000000 { ; load address = execution address
*.o (RESET, +First)
*(InRoot$$Sections)
.ANY (+RO)
}
RW_RAM1 0x30200000 0x3E00000 { ; RW data
.ANY (+RW +ZI)
}
RW_IRAM1 0x40000000 0x00001000 {
.ANY (+RW +ZI)
}
}
RAM调试初始化文件
//*** <<< Use Configuration !disalbe! Wizard in Context Menu >>> ***
FUNC void Setup (void)
{
// <o> Program Entry Point
_WDWORD(0x53000000, 0x00000000);
_WDWORD(0x4A000008, 0xFFFFFFFF);
_WDWORD(0x4A00001C, 0x000007FF);
_WDWORD(0x4C000014, 0x00000003);
_WDWORD(0x4C000004, 0x0005c042);
_WDWORD(0x56000070, 0x00280000);
_WDWORD(0x56000078, 0x00000000);
_WDWORD(0x48000000, 0x22111110);
_WDWORD(0x48000004, 0x00000700);
_WDWORD(0x48000008, 0x00000700);
_WDWORD(0x4800000C, 0x00000700);
_WDWORD(0x48000010, 0x00000700);
_WDWORD(0x48000014, 0x00000700);
_WDWORD(0x48000018, 0x00000700);
_WDWORD(0x4800001c, 0x00018005);
_WDWORD(0x48000020, 0x00000700);
_WDWORD(0x48000024, 0x008e0459);
_WDWORD(0x48000028, 0x000000B2);
_WDWORD(0x4800002c, 0x00000030);
_WDWORD(0x48000030, 0x00000030);
_WDWORD(0x56000014, 0x00000001);
_WDWORD(0x56000020, 0xAAAA55AA);
_WDWORD(0x56000028, 0x0000FFFF);
_WDWORD(0x56000024, 0x00000000);
}
Setup(); // Setup for Init
LOAD obj/uart_test.axf INCREMENTAL // Download
PC = 0x30000000; // <o> Program Entry Point
g, main // Run to main function
Setup(); // Setup for Running
、、、、、、、、、、、、、、、、、、、、、、、、、、、
ps:LED终于闪起来了,原来我禁用了MMU,SDRAM的起始地址没有映射到地址0,最后看到启动代码里有个RAM_INTVEC,在option中声明此宏后,中断向量表拷贝到地址0,就好了