大家来讨论一下关于s3c4510b移植ucos的问题?(付源码)
我的启动代码是这样的<br />vector.s<br />;<br />;System informition <br />;Flash: 1M x 16bit <br />;SDRAM: 1M x 4bank x 16bit<br /><br />ModeMask EQU 0x1F<br />SVC32Mode EQU 0x13<br />IRQ32Mode EQU 0x12<br />FIQ32Mode EQU 0x11<br />User32Mode EQU 0x10<br />Abort32Mode EQU 0x17<br />Undef32Mode EQU 0x1B<br />IRQ_BIT EQU 0x80<br />FIQ_BIT EQU 0x40<br /><br />;RomBaseAddr EQU 0 ;<br />RamBaseAddr EQU 0x100 ;Sdram at 16M <br />RamLoaderAddr EQU 0x100 ;@22M<br />;RamEndAddr EQU &200<br /><br /> GBLS MainEntry<br />MainEntry SETS "main"<br /> IMPORT $MainEntry<br /><br />;//**********************************************************<br />;//检查是否使用tasm.exe进行编译<br /> <br /> GBLL THUMBCODE<br /> [ {CONFIG} = 16 <br />THUMBCODE SETL {TRUE}<br /> CODE32<br /> | <br />THUMBCODE SETL {FALSE}<br /> ]<br /><br /> [ THUMBCODE<br /> CODE32 ;for start-up code for Thumb mode<br /> ] <br /> <br />;******************************************************<br /> AREA SelfBoot, CODE, READONLY<br /> <br /> IMPORT UDF_INS_VECTOR<br /> IMPORT SWI_SVC_VECTOR<br /> IMPORT INS_ABT_VECTOR<br /> IMPORT DAT_ABT_VECTOR<br /> IMPORT IRQ_SVC_VECTOR<br /> IMPORT FIQ_SVC_VECTOR <br /> <br /> ENTRY <br /> <br /> IF :DEF: |ads$version|<br /> ELSE<br /> EXPORT __main<br />__main<br /> ENDIF <br /> <br />ResetEntry<br /> b SYS_RST_HANDLER<br /> b UDF_INS_HANDLER<br /> b SWI_SVC_HANDLER<br /> b INS_ABT_HANDLER<br /> b DAT_ABT_HANDLER<br /> b .<br /> b IRQ_SVC_HANDLER<br /> b FIQ_SVC_HANDLER<br /><br />;******************************************************<br /> MACRO <br />$Label HANDLER $Vector<br />$Label<br /> sub lr, lr, #4 <br /> stmfd sp!, {r0-r3, lr} <br /> ldr r0, =$Vector<br /> ldr pc, <br /> ldmfd sp!, {r0-r3, pc}^ <br /> MEND<br /> <br />UDF_INS_HANDLER<br /> stmfd sp!, {r0-r3, lr}<br /> ldr r0, =UDF_INS_VECTOR<br /> mov lr, pc<br /> ldr pc, <br /> ldmfd sp!, {r0-r3, pc}^<br />SWI_SVC_HANDLER<br /> stmfd sp!, {r0-r3, lr}<br /> ldr r0, =SWI_SVC_VECTOR<br /> mov lr, pc<br /> ldr pc, <br /> ldmfd sp!, {r0-r3, pc}^<br />INS_ABT_HANDLER<br /> sub lr, lr, #4<br /> stmfd sp!, {r0-r3, lr}<br /> ldr r0, =INS_ABT_VECTOR<br /> mov lr, pc<br /> ldr pc, <br /> ldmfd sp!, {r0-r3, pc}^<br />DAT_ABT_HANDLER<br /> sub lr, lr, #4<br /> stmfd sp!, {r0-r3, lr}<br /> ldr r0, =DAT_ABT_VECTOR<br /> mov lr, pc<br /> ldr pc, <br /> ldmfd sp!, {r0-r3, pc}^<br />IRQ_SVC_HANDLER<br /> sub lr, lr, #4<br /> stmfd sp!, {r0-r12, lr} <br /> mrs r0, spsr<br /> stmfd sp!, {r0}<br /> ldr r0, =IRQ_SVC_VECTOR<br /> ldr pc, <br />FIQ_SVC_HANDLER<br /> sub lr, lr, #4<br /> stmfd sp!, {r0-r12, lr} <br /> mrs r0, spsr<br /> stmfd sp!, {r0}<br /> ldr r0, =IRQ_SVC_VECTOR<br /> ldr pc, <br /> <br />;//**********************Copy Code*********************************<br />SYS_RST_HANDLER<br /> mrs r0, cpsr ;enter svc mode and disable irq,fiq<br /> bic r0, r0, #ModeMask <br /> orr r0, r0, #(SVC32Mode :OR: IRQ_BIT :OR: FIQ_BIT)<br /> msr cpsr_c, r0<br /> <br /> IMPORT InitSystem ;//init system <br /> bl InitSystem <br /> <br /> adr r0, ResetEntry ;Get start address 0<br /> mov r3, #(RamLoaderAddr<<16) ;Destination address(sdram) 0x160 @22M <br /> ldr r1, BaseOfROM ;RO Section <br /> ldr r2, TopOfROM <br /> add r1, r1, r3 ;RamBaseAddr+BaseOfROM = R1 addr offset<br /> add r2, r2, r3 ;RamBaseAddr+TopOfROM = R2<br />0 <br /> ldmia r0!, {r4-r11} ;Copy code to Sdram<br /> stmia r1!, {r4-r11}<br /> cmp r1, r2 ;size == RO size,r1==TopofRO<br /> bcc %B0<br /> <br /> sub r1, r1, r2 ;r1 - r2 = 0x4<br /> sub r0, r0, r1 ;r0 == BaseOfBSS<br /> ldr r1, BaseOfBSS<br /> ldr r2, BaseOfZero<br /> add r1, r1, r3 ;RAMbase+<br /> add r2, r2, r3 <br />1 ;copy RW sec<br /> cmp r1, r2 <br /> ldrcc r4, , #4<br /> strcc r4, , #4 <br /> bcc %B1<br /> <br /> mov r0, #0<br /> ldr r2, EndOfBSS<br /> add r2, r2, r3<br />3 ;copy ZI<br /> cmp r1, r2<br /> strcc r0, , #4<br /> bcc %B3 <br /> <br /> IMPORT RemapMemory <br /> <br /> adr r0, ResetEntry ;Copy code to befor BaseOfROM<br /> ldr r1, =RemapMemory ;why reload again?<br /> ldr r2, BaseOfROM<br /> sub r2, r1, r2<br /> add r0, r0, r2<br /> add r1, r2, r3<br /> mov r2, #32<br />0 <br /> ldr r3, , #4<br /> str r3, , #4<br /> subs r2, r2, #1<br /> bne %B0<br /> <br /> ldr lr, GotoMain ;load main addr <br /> b RemapMemory <br /><br />GotoMain DCD $MainEntry<br /><br />;***********************************************<br /><br /> IMPORT |Image$$RO$$Base| ; ROM code start <br /> IMPORT |Image$$RO$$Limit| ; RAM data starts after ROM program<br /> IMPORT |Image$$RW$$Base| ; Pre-initialised variables<br /> IMPORT |Image$$ZI$$Base| ; uninitialised variables<br /> IMPORT |Image$$ZI$$Limit| ; End of variable RAM space<br /><br />BaseOfROM DCD |Image$$RO$$Base|<br />TopOfROM DCD |Image$$RO$$Limit|<br />BaseOfBSS DCD |Image$$RW$$Base|<br />BaseOfZero DCD |Image$$ZI$$Base|<br />EndOfBSS DCD |Image$$ZI$$Limit|<br /> <br />;//***********************************************<br />;//此处添加Image 搬移代码 two param Image dst Addr <br />TIP_SIZE EQU 256<br /> <br /> IMPORT ResetMemSet<br /> EXPORT trans_to_boot<br /> <br />trans_to_boot ;BootLoader Image R0 = biosbase 0x10000 <br /> ; R1 = bios load 0x1000 <br /> mov lr, r1 ; a2 = r1 <br /> ldr r1, =ResetMemSet ;载入函数地址<br /> ldr r2, BaseOfROM ;载入RO地址 <br /> sub r2, r1, r2 ;函数地址-RO地址 <br /> add r0, r0, r2 ;a1 = r0<br /> mov r2, #TIP_SIZE<br />0 <br /> ldr r3, , #4 ;//将ResetMemSet函数搬移到之前执行 猜想为了主程序初始化,清除主程序运行之前的寄存器配置<br /> str r3, , #4<br /> subs r2, r2, #1<br /> bne %B0<br /> <br /> sub r0, r0, #TIP_SIZE*4 ;//先执行一段初始化代码<br /> mov pc, r0 ;//jump to 0x10000<br /><br />;***********************************************<br /> <br /> END <br /> 继续
void main()<br />{<br /> TimerSetup(); //配置硬件时钟并安装时钟向量<br /> <br /> OSInit();<br /> OSTaskCreate(Task1, (void *)0, &Task1Stk, 3);<br /> DelayNS(50);<br /> Print("OSTaskCreate");<br /> <br /> OSStart(); <br /> <br />}<br /><br />这是启动代码,但是UCOS不能运行?请大家发表一下看法。
没人回答
请问版主,能否解决呢?呵呵 好像很久没人做这个东西了!
好好研究
我好好研究一下,多谢!
页:
[1]