基于聚芯SoC北斗时钟的程序流程1--init.s

本文介绍了采用UCOS操作系统的MIPS平台初始化过程,详细解析了mips/config/Erosoc文件夹下init.S设置的程序入口指令,包括LI、LA、MOVE等基本操作,以及初始化CPU状态、设置堆栈指针和全局指针的过程。

采用UCOS操作系统。在mips/config/Erosoc文件夹下init.S设置了程序的入口:

1)LI用于将一个立即数存入一个通用寄存器
2)LA用于将一个地址(通常是一个标签)存入一个通用寄存器
3)MOVE用于将一个寄存器的值存入另一个寄存器

/* ************************************************************************************* * _sysInit - assembly entry point, initialize sp, gp, bss section then jump to sysInit */ .globl _sysInit .ent _sysInit _sysInit: .set noreorder /* Init CPU state */ li t0, M_StatusCU1 /* li t0, M_StatusCU0 | M_StatusCU1 */ /* li t0, M_StatusCU0 | M_StatusERL */ mtc0 t0, C0_STATUS mtc0 zero, C0_CAUSE mfc0 t0, C0_CONFIG and t0, 0xfffffff8 or t0, DEFAULT_CACHE_MODE mtc0 t0, C0_CONFIG li t0, 1 mtc0 t0, C0_COUNT mtc0 zero, C0_COMPARE /* Setup sp (top of memory) and gp */ la gp, _gp //load address,但是在工程文件中 没找到_gp,_freemem的定义处,奇怪了~ la sp, _freemem li t0, _SYS_STKSIZE //定义在Config.h中 addu sp, t0 /* Align sp to 16 byte boundary (required by Cygnus) */ li t0, ~0xf and sp, t0 /* Clear bss */ #if 1 la t0, _fbss /* First address */ la t1, _end /* Last address */ 1: sw zero, 0(t0) bne t0, t1, 1b addiu t0, 4 #endif la t0, malloc_began la t1, _malloc_began sw t1, 0(t0) la t0, malloc_end la t1, _malloc_end sw t1, 0(t0) /* Get ready to jump to C entry */ move s0, ra la t0, sysInit //C程序入口函数:SysInit /* Jump it */ jal t0 nop /* Return to monitor */ jr s0 nop .set reorder .end _sysInit /* ************************************************************************************* * __main, __gccmain - Dummy functions called by main() function */ .set noreorder .globl __main .ent __main __main: jr ra nop .end __main .globl __gccmain .ent __gccmain __gccmain: jr ra nop .end __gccmain

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值