S3C2440启动代码解析与内存配置

需积分: 9 9 下载量 23 浏览量 更新于2024-10-18 收藏 51KB PDF 举报
"S3C2440启动代码2440init_s详细注释.pdf" 本文档详细解析了S3C2440处理器的启动代码2440init_s,该代码主要负责初始化系统的关键步骤,包括内存配置、中断服务程序(ISR)设置、堆栈设定以及C变量的初始化。 1. **代码结构和注释**: 文件名为2440INIT.S,是汇编语言编写的一段初始化代码,主要功能是对S3C2440芯片进行初始化。文件头部包含了历史版本信息和作者,表明这段代码经过多次修订以适应不同需求。 2. **包含头文件**: 通过GET指令引入了option.inc、memcfg.inc和2440addr.inc三个头文件。这些头文件可能包含特定的配置信息、内存映射和地址定义等,对于正确配置S3C2440至关重要。 3. **定义常量**: - BIT_SELFREFRESHEQU(1<<22): 定义了一个位掩码,用于控制SDRAM的自刷新功能。 - 用户模式至未定义模式的定义:如USERMODEEQU、FIQMODEEQU等,表示处理器的不同运行模式。 - MODEMASK:模式掩码,用于模式检查。 - NOINTEQU:取消中断的标志。 4. **堆栈设置**: 堆栈地址是在OPTION.INC中定义的,默认基地址为0x33ff8000。文档中定义了六种工作模式的堆栈起始地址,包括: - UserStack:用户模式堆栈,起始于0x33ff4800。 - SVCStack:监管模式堆栈,起始于0x33ff5800。 - UndefStack:未定义模式堆栈,起始于0x33ff5c00。 - AbortStack:异常中断模式堆栈,起始于0x33ff5c00后的某个地址。 5. **功能描述**: - **内存配置**:初始化内存控制器,设置SDRAM的工作模式,例如开启自刷新功能,确保数据在低功耗状态下不会丢失。 - **ISR设置**:设置中断服务程序,定义中断处理的优先级和响应机制。 - **堆栈初始化**:为每个工作模式分配独立的堆栈空间,确保在模式切换时能正确保存和恢复上下文。 - **C变量初始化**:为C语言运行环境做准备,如设置全局变量的初始值,初始化BSS段(未初始化的全局变量)为0。 6. **流程**: - 首先,处理器会执行位于ROM中的BootLoader,加载并执行2440init_s。 - 然后,代码会设置内存控制器的参数,配置SDRAM。 - 接着,配置中断控制器,设置中断向量表。 - 初始化堆栈,为每个工作模式分配堆栈空间。 - 最后,可能还包括其他必要的初始化操作,如时钟、GPIO、定时器等,并跳转到C语言的main函数开始执行应用程序。 7. **重要性**: S3C2440的启动代码2440init_s是系统启动过程的核心部分,其正确与否直接影响到系统的稳定性和性能。理解这部分代码有助于开发者调试和优化嵌入式系统。

帮我翻译以下代码 <select id="getStatisticalInfoDetailCount" resultType="java.lang.Integer"> select count()from(select psi.station_id,cda.cdc as count_device_code,cda.appkey from (select count(dci.device_code) as cdc,dci.appkey from iledproduction.device_code_info dci where CONV(left(dci.device_code,2),16,10) in <foreach collection="manufacturerIdList" item="item" index="index" open="(" close=")" separator=","> #{item} </foreach> <if test="propMap.size>0 and propMap!=null"> <foreach collection="propMap" index="index" item="item"> <if test='index.toString=="device_type"'> and substr(dci.device_code,3,4) = "${item[1]}" </if> <if test='index.toString=="produce_date"'> and STR_TO_DATE(substr(dci.device_code,7,6),'%y%m%d') BETWEEN "${item[1]}" AND DATE_ADD("${item[2]}",INTERVAL 1 DAY) </if> </foreach> </if> and dci.cert_import_status = 1 group by appkey) as cda left join (select s1.station_id as station_id,s1.old_appkey as appkey from iledproduction.appkey_log s1 union (select s2.station_id as station_id,s2.new_appkey as appkey from iledproduction.appkey_log s2) union (select s3.station_id as station_id,s3.appkey as appkey from iledproduction.production_station_info s3) ) psi on cda.appkey = psi.appkey) a left join (select p.,dpt.manufacturer_id,dpt.department_name from iledproduction.production_station_info p ,iledproduction.department dpt where p.department_key=dpt.department_key) ps on a.station_id = ps.station_id <if test="propMap.size>0 and propMap!=null"> <foreach collection="propMap" index="index" item="item"> <if test='index.toString=="manufacturer_id"'> where ps.manufacturer_id = ${item[1]} </if> </foreach> </if> </select>

2023-07-14 上传