s3c2440 ads程序移植到keil中(二) 初步完成

发布者:阳关三迭最新更新时间:2020-03-02 来源: eefocus关键字:s3c2440  ads  程序移植  keil 手机看文章 扫描二维码
随时随地手机看文章

如果我把参数配置发生改变呢

然后再一次编译 要包错误

如下所示

错误如下

这个错误解决不了

最后查看了网上网友的方法 又可以修改 但是引入了nand文件

最后反正知道了2440init.s文件要修改许多 所以我就不再这里继续整了 浪费时间

直接运用网上网友的东西即可

网友编写的地址

https://blog.csdn.net/hannibaychty/article/details/44873327

从买板子到现在,想想也有2个月啦,开始就想跑裸奔的,可是工程都是在ADS下,win7系统根本不能用,于是就想着怎么在MDK跑,可是MDK上s3c2440的启动文件是不完整的,因此不推荐使用,为此蛋疼聊好长一段时间,查了很多资料都不成功,可能是我太笨啦,为此,今天把我自己的方法写给和我一样的想用MDK的童靴们吧。

 

首先新建一个文件夹,然后在里面新建startcode和source两个文件夹,如下

接着打开MDK新建工程,启动文件不选,如下

接着复制光盘中的启动文件2440init.s  option.inc  memcfg.inc   2440addr.inc到startcode,如下

然后在MDK左侧栏新建两个文件夹,分别命名为startcode和source,然后将开始的两个文件进来,如下

接着在source下新建三个文件,分别命名为Main.c   led.c   led.h

三个文件内容分别为

Main.c


  1. #include"led.h"  

  2.   

  3. int Main()  

  4. {  

  5.     led_init();  

  6.     while(1)  

  7.     {  

  8.         led1_on;  

  9.         led2_on;  

  10.         led3_on;  

  11.         led4_on;  

  12.     }  

  13.     return 0;  

  14. }  


led.c


  1. #include"2440addr.h"  

  2.   

  3. void led_init(void)  

  4. {  

  5.     rGPBCON&=~((3<<10)|(3<<12)|(3<<14)|(3<<16));   //清零GPB5,6,7,8  

  6.     rGPBCON|=(1<<10)|(1<<12)|(1<<14)|(1<<16);     //设置GPB5,6,7,8为输出状态  

  7.     rGPBUP&=~((1<<5)|(1<<6)|(1<<7)|(1<<8));         //上拉电阻为0使能  

  8.     rGPBDAT|=(1<<5)|(1<<6)|(1<<7)|(1<<8);                   //初始化,注意用高电平1  

  9. }  


led.h


  1. #ifndef _LED_H  

  2. #define _LED_H  

  3.   

  4. #include"2440addr.h"  

  5.   

  6. #define led1_on  {rGPBDAT&=~(1<<5);}  

  7. #define led1_off {rGPBDAT|=(1<<5);}  

  8. #define led2_on  {rGPBDAT&=~(1<<6);}  

  9. #define led2_off {rGPBDAT|=(1<<6);}  

  10. #define led3_on  {rGPBDAT&=~(1<<7);}  

  11. #define led3_off {rGPBDAT|=(1<<7);}  

  12. #define led4_on  {rGPBDAT&=~(1<<8);}  

  13. #define led4_off {rGPBDAT|=(1<<8);}  

  14.   

  15. extern void led_init(void);  

  16.       

  17. #endif  


 

现在来看下文件结构如下


接着开始工程的配置,如下

其中第一个用于配置ROM和RAM地址,具体参考s3c2440芯片手册,第二个用于产生bin文件,默认是没有此选项的,更多可在dos下cd C:Program Files (x86)keilARMARMCCbin进入到文件夹,然后输入fromelf help查看帮助

下面点击编译选项开始编译,左边的按钮,接着应该会看到这个错误,

这是因为我们没把MDK启动文件路径加入到编译程序路径,先把光盘中的2440addr.h复制到startcode,然后加入文件路径

同理吧asm此处也添加此选项,完成后如下

接着重新编译,出现如下错误

还是和上面一样,复制光盘目录下的opnion.h到startcode,如下

接着编译,会出现如下错误,如下

 

打开地2440init.s第87行,修改为RESET,如下

接着编译,如下

下面说说这三个错误,第一个提示未定义的符号CopyProgramFromNand (referred from 2440init.o).,这个文件适用于初始化nand flash,以便实现从nand拷贝大于4K程序从sdram,从而让程序运行,此文件在nand.c定义


第二个和第三个没有MMU_SetAsyncBusMode (referred from 2440init.o).和MMU_SetFastBusMode (referred from 2440init.o).,查看光盘目录可知这个定义位于mmu.c,而mmu.c又要依赖244lib.c实现,因此拷贝nand.c nand.h mmu.c mmu.h 2440lib.c到startcode文件夹下,如下

再次重新编译又出现啦下列错误,

同上面一样,拷贝光盘的def.h到startcode下,完成后再次重新编译,会出现如下错误,在2440init.s加入如下两行,如图

再次重新编译,会出现如下错误

解决方法:将2440init.s文件中所有 Image

Base 换成ImageBase,将所有 ImageBase 换成ImageBase,所有 ImageBase 换成ImageBase

 

接着继续

编译会通过,打开suppervivi下载到nor flash发现可以运行,同样的下载到nand也运行OK

 

。。。。。。。。。。。。。。。。。。。。。。

THIS IS THE SUMMARY

。。。。。。。。。。。。。。。。。。。。。。

《一》切记MDK默认给的s3c24400.h和s3c2440.s启动文件是不完整的,带有中断的程序不可以使用,推荐使用光盘里自带的启动文件2440init.s,不过个人认为最好还是能看懂启动代码后自己重新编写一个,比如使用C实现,而汇编中只实现跳转到C的功能,关于2440init.s修改的地方如下

①MDK和ADS的入口编号不一致:

修改所有的Image

Base 换成ImageBase,将所有 ImageBase 换成ImageBase,所有 ImageBase 换成ImageBase,

修改第87行附近的    AREA    Init,CODE,READONLY为    AREA    RESET,CODE,READONLY

③声明8字节数据:

在AREA    RESET,CODE,READONLY后面加上一句PRESERVE8

④提示找不到entry:

在PRESERVE8后面加上一句  

EXPORT    __ENTRY
__ENTRY

⑤包含的头文件错误(即memory.inc声明的Tsrc在2440init.s被用成了Trc)

修改第667行附近的Trc为Tsrc

《二》如果使用nor flash启动运行程序,记得在所有程序的Main.c加入mmu.h和MMU_Init(),以便为提供必需的内存管理,用于初始化内存,实现内存映射,具体有2440slib.s来实现,而用nand的话可以无视之,不过个人不推荐加MMU,因为这段程序让人难以理解程序,看起来比较古怪,而且加MMU运行不如直接下载到nand flash运行

《三》如果需要对nandflash进行相关操作(不包括启动代码的从NAND复制到SDRAM),记得在所有程序的Main.c加入nand.h,特别注意启动代码中的从nand flash拷贝数据到SDRAM区不能省略(即2440init.s中的IMPORT  CopyProgramFromNand这一句),他是nand能启动的关键所在(当然stepping stone(SRAM)也很重要)

《三》程序的主函数不一定是Main,因为可以改成任意你想写成的名字,比如改成usercode也可以,具体可以修改bl Main这句即可

关键字:s3c2440  ads  程序移植  keil 引用地址:s3c2440 ads程序移植到keil中(二) 初步完成

上一篇:s3c2440 ads程序移植到keil中(一) 初步完成
下一篇:s3c2440 ads程序移植到keil中(三) 初步完成

推荐阅读最新更新时间:2024-11-09 10:28

u-boot-2016.11移植S3C2440之新建一个单板(1)
1、确定单板 下载并解压u-boot-2016.11,查看一下board目录下的这一u-boot版本支持的单板,寻找你的单板或者和你的单板相近的单板。对于S3C2440来说,u-boot没有提供与之相对应的单板支持,但是S3C2410与S3C2440是十分相似的,在u-boot-2016.11boardsamsung目录下有smdk2410的目录,即支持smdk2410开发板,那我们的u-boot也就基于这一开发板来移植修改。 2、配置、编译u-boot 首先就以smdk2410为目标来配置编译一下u-boot-2016.11,建议使用较高版本的交叉工具链,我使用的是arm-linux-gcc-4.3.3。 mak
[单片机]
u-boot-2016.11<font color='red'>移植</font>到<font color='red'>S3C2440</font>之新建一个单板(1)
详解startup_M051.s
在Keil新建的所有工程中,毫无例外地都包含startup_M051.s,如图19.1-1。 图19.1-1 startup_M051.s 该文件主要作用于上电时初始化单片机的硬件堆栈、初始化RAM、分配内存空间和跳转到主函数即main函数。硬件堆栈是用来存放函数调用地址、变量和寄存器值的;分配内存空间为异常提供更加快速的访问,减少中断延迟。如果不加载该startup_M051.s文件,编译的代码可能会使单片机不能正常工作。 那么什么是堆栈呢?在计算机领域,堆栈是一个不容忽视的概念,但是很多人甚至是计算机专业的人也没有明确堆栈这两种数据结构。堆栈都是一种数据项按序排列的数据结构,只能在一端(称为栈顶(top))对数据项进
[单片机]
详解startup_M051.s
s3c2440裸机之中断向量的写法(一)
直接使用跳转指令(B) b reset b undefined_instruction b software_interrupt b prefetch_abort b data_abort b not_used b irq b fiq /* ... */ 反汇编后是这个样子的(链接时的起始地址为0x33f80000): 33f80000 .text : 33f80000: ea000006 b 33f80020 reset 33f80004: ea000006 b 33f80024 undefined_instruction 33f80008: ea000006 b 33f80028 software_interrupt 3
[单片机]
STM32通过命令行编译和下载keil和IAR工程的方法
可能很多人都不习惯使用Keil、IAR自带的编辑器,可能代码补全、错误提示、高亮等编辑功能相对来说支持的不是很好。 虽然Keil MDK 从 V5.25版本开始对编辑功能改善了很多,但是很多人还是青睐于第三方的编辑器。 使用第三方的编辑器,如果需要编译和下载,就需要借助通过额外的方式实现,比如本文即将描述的通过命令行编译和下载的方式,可以让我们在使用第三方编辑器编辑的时候,进行代码编译和下载。 下面我们来描述以下内容: 常用代码编辑器 Keil 命令行编译下载 IAR 命令行编译下载 编译下载使用方法 1、常用的代码编辑器 下面介绍几款常用的代码编辑器: 1.VS Code VS Code 是绝大部分软件工程师都在使用
[单片机]
STM32通过命令行编译和下载<font color='red'>keil</font>和IAR工程的方法
s3c2440代码重定位和段的引入——学以致用,综合Makefile的锻炼
对于2440而言,nand启动,nand的前4k内容由硬件复制到sram。 nor flash,可以像内存一样读,但是不能像内存一样写,执行写操作需要特殊的操作。 程序中包含有需要写的全局或者静态变量,它们在bin文件中,写在nor flash上,直接修改这样的变量是无效的。 到底什么意思呢?还是看例子比较有说服力。 在学习C语言的过程中,我们或多或少知道一些东西,c/c++可执行文件需要预处理,编译,汇编,连接。 程序有text段,data段,bss段,rodata段等等,今天,就和它们来个亲密接触吧。 还是先说上面的问题吧,看例子: 在之前的程序代码基础上,启动代码增加自动识别是nand还是nor启
[单片机]
<font color='red'>s3c2440</font>代码重定位和段的引入——学以致用,综合Makefile的锻炼
U-Boot-1.1.6移植到MINI2440开发板(2) —— S3C2440相关修改
前面已经大致了解了U-Boot的编译流程,下面开始移植。 (没有找到知乎的代码高亮功能。。。) 开始移植: 首先修改顶层Makefile: 添加u-boot.dis的支持,有助于后续的分析(添加$(obj)u-boot.dis): ------- Makefile------- 239 ALL = $(obj)u-boot.srec $(obj)u-boot.bin $(obj)System.map $(obj)u-boot.dis $(U_BOOT_NAND) 添加mini2440_config: ------- Makefile------- 1882 mini2440_config : uncon
[单片机]
s3c2440的UART功能测试
/* 文件名称:UART.c /* 实现功能:最基本的UART发送与接收 /* 作者:无jianqi /* 版本:1.0 #include 2440addr.h //包含2440相关寄存器的设置 #include def.h //四个LED对应GPB5.6.7.8。 #define LED1 5 #define LED2 6 #define LED3 7 #define LED4 8 #define BAUD 115200 //波特率 #define Bit(x) (1《x) //将某位置位 #define Output(x) (1《2*x) //将对应IO置为输出 #
[单片机]
keil通过UART串口打印汉字到串口工具乱码的问题
近通过STMCubexMX生成的代码程序,将打印的字符串通过uart串口打印出来,发现中文字符乱码,参考了keil5串口USART输出中文乱码的解决方法_zhouml_msn的博客-CSDN博客_串口输出中文 但是我解决的方法正好和他的相反;程序中要打印的汉字在,MobaXterm中显示如下: 通过记事本打开main.c文件发现它是以ANSI格式保存的, 通过:文件- 另存为- 编码格式改成UTF-8,覆盖原来的文件 再重新编译,下载就正常显示中文字符
[单片机]
<font color='red'>keil</font>通过UART串口打印汉字到串口工具乱码的问题
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved