KEIL MDK平台 S3C2440 编译链接、烧写调试
KEIL MDK平台 S3C2440 编译链接、烧写调试
本系列博文将从软件仿真开始一步步介绍KEIL MDK平台 S3C2440汇编/c语言程序的编辑、编译、链接、调试过程,以及建立裸机程序、移植ucos操作系统、移植ucGUI的全过程。
本帖将介绍基于KEIL MDK平台 S3C2440 编译链接、烧写调试的上机过程。以最简单的led例程为例。硬件平台是友善之臂公司出品的micro2440核心板及底板套件。本文将介绍如何将S3C2440的ADS平台例程移植到MDK平台。
建立工程,添加源文件
1.启动MDK,建立工程,芯片选择三星(Samsung)的S3C2440A。
2.出现提示是否添加汇编语言的启动文件,我们这里选择否。我们这里采用ADS例程中的启动文件。
3.将ADS1.2平台的myled例程下的源文件复制到MDK的工程目录。
4.将如下源文件添加到工程
5.添加c语言包含文件夹
6.添加汇编语言包含文件夹
编译链接源程序
1.选择创建编译链接输出文件夹Objects
2.设置ROM1、RAM1的地址和空间(重要关键)
3.按F7或Bluid编译链接工程,提示有1个错误,6个警告。
其中警告可以忽略,错误提示找不到复位程序入口。这是因为在MDK平台需要显式地定义以RESET命名代码段作为复位程序的入口点。
原例程中定义的代码段名字叫INIT修改为Reset
4.重新编译,提示2440init.s中5个错误,6个警告。
错误提示找不到标号。该标号其实对应分散加载文件.sct中的分段的标号。如下
; *************************************************************
; *** Scatter-Loading Description File generated by uVision ***
; *************************************************************
LR_ROM1 0x00000000 0x00200000 { ; load region size_region
ER_ROM1 0x00000000 0x00200000 { ; load address = execution address
*.o (RESET, +First)
*(InRoot$$Sections)
.ANY (+RO)
}
RW_RAM1 0x30000000 0x04000000 { ; RW data
.ANY (+RW +ZI)
}
RW_IRAM1 0x40000000 0x00001000 {
.ANY (+RW +ZI)
}
}
将源文件中所有的
|Image$$RO$$Base|
|Image$$RO$$Limit|
|Image$$RW$$Base|
|Image$$ZI$$Base|
|Image$$ZI$$Limit|
分别替换成
|Image$$ER_ROM1$$RO$$Base|
|Image$$ER_ROM1$$RO$$Limit|
|Image$$RW_RAM1$$RW$$Base|
|Image$$RW_RAM1$$ZI$$Base|
|Image$$RW_RAM1$$ZI$$Limit|
4.再次编译链接,有出现一个新的错误
该错误提示在2440init.s中没有8字节对齐。在代码段定义的前一句添加代码PRESERVE8。再次编译无错误。
代码烧写与调试
1.选择Debug功能
2.选择烧写的FLASH算法
3.烧写成功,开发板led灯闪亮
博客同款例程
https://download.csdn.net/download/weixin_41551104/13134436