历史上的今天
返回首页

历史上的今天

今天是:2025年06月06日(星期五)

正在发生

2020年06月06日 | mini2440上一步步实现将ADS工程移植到keil MDK

2020-06-06 来源:eefocus

从买板子到现在,想想也有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

[cpp] view plaincopy

  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

[cpp] view plaincopy

  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

[cpp] view plaincopy

  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这句即可


最后,附上我修改好的完整版启动代码,这个是一劳永逸的,以后可以一直用

mini2440在MDK上完整启动代码

下载地址http://download.csdn.net/detail/googlemi/5176844

推荐阅读

史海拾趣

Gardner Denver公司的发展小趣事

Galaxy Semi-Conductor Co Ltd(尽管通常指的是三星电子在半导体领域的业务,但“Galaxy Semi-Conductor”并非一个直接对应的公司名,这里我们假设其代表三星电子的半导体部门)在电子行业中的发展可以通过以下几个关键故事来概述:

1. 苏州工业园区的崛起

三星半导体(中国)研究开发有限公司,作为三星电子在中国的重要研发基地,于2003年在苏州工业园区成立。这家公司由韩国三星电子株式会社独资兴办,注册资本达到450万美元,专注于电子零部件和集成电路的软件与硬件设计,以及电子产品解决方案的研发。随着公司的不断发展,它不仅在技术研发上取得了显著成果,还积极推动了半导体技术的本地化应用,成为三星电子全球研发网络中的重要一环。

2. 半导体技术的全球领先地位

三星半导体自1983年起就拥有了半导体全线工程技术,并迅速成为世界上第三个超大规模集成电路(VLSI)生产商。这一技术突破标志着三星在半导体领域的崛起。此后,三星持续投入研发,不断推动半导体技术的创新与发展。例如,三星在DRAM(动态随机存取存储器)和NAND Flash存储技术方面取得了全球领先地位,推出了多款具有划时代意义的行业标杆产品,如高性能的SSD固态硬盘,这些产品在全球范围内得到了广泛应用。

3. 绿色工厂的环保实践

三星电子一直致力于可持续发展,其半导体工厂也不例外。例如,三星电子(苏州)半导体有限公司在2019年入选了工业和信息化部绿色工厂名单。这家工厂在生产过程中注重节能减排,采用先进的环保技术和设备,有效降低了生产过程中的能耗和排放。同时,三星还积极推动绿色供应链管理,与供应商共同致力于环境保护和可持续发展。

4. 技术创新与产品多元化

三星半导体不仅在存储技术方面取得了卓越成就,还在其他多个领域进行了广泛的技术创新和产品多元化。例如,三星在移动处理器(如Exynos系列)和图像传感器(如ISOCELL系列)方面也取得了显著进展。这些产品不仅提升了三星自身产品的竞争力,还为全球电子行业的发展注入了新的活力。

5. 全球化布局与战略合作

三星半导体在全球范围内进行了广泛的布局,建立了多个研发中心和生产基地。这些基地不仅负责本地市场的产品研发和生产,还积极参与全球供应链的建设和合作。同时,三星还积极寻求与其他企业的战略合作,共同推动半导体技术的发展和应用。例如,三星与联发科技在移动平台上的合作,以及与红帽在CXL存储生态系统上的合作,都体现了三星在全球化布局和战略合作方面的远见卓识。

这些故事共同展示了三星半导体在电子行业中的发展历程和成就,也体现了其在技术创新、可持续发展和全球化布局方面的努力与贡献。

ALPS公司的发展小趣事

ALPS公司是一家日本电子制造商,成立于1948年,总部位于东京。以下是关于ALPS公司发展的五个相关故事:

  1. 创立与早期发展:ALPS公司最初成立时,是一家小规模的电子零部件制造商,专注于生产开关和其他电子元器件。在日本战后经济快速复苏的背景下,ALPS公司迅速发展壮大,成为当时日本电子行业的重要参与者之一。

  2. 技术创新与产品多样化:随着时间的推移,ALPS公司不断进行技术创新,扩展其产品线。除了开关和电子元器件外,公司还涉足了汽车电子、通信设备、家电、数字产品等领域,推出了各种多功能的产品,满足不同行业和消费者的需求。

  3. 全球化战略:为了进一步扩大市场份额,ALPS公司实施了全球化战略,逐步在世界各地建立了生产基地和销售网络。公司在亚洲、欧洲、北美等地设立了子公司和分支机构,与当地客户和合作伙伴紧密合作,拓展了国际市场。

  4. 产业布局与战略合作:除了自身产品开发和制造外,ALPS公司还通过战略合作和并购等方式进行产业布局,加强了自身在电子行业中的地位。公司与其他行业领先企业合作,共同开发新技术和产品,提升了市场竞争力。

  5. 环境保护与社会责任:作为一家负责任的企业,ALPS公司重视环境保护和社会责任,致力于减少环境污染和资源浪费。公司采取了各种措施,包括提高能源利用效率、推动循环经济和环保产品设计等,为可持续发展做出了积极贡献。

以上是关于ALPS公司发展的五个相关故事,这些故事展示了ALPS公司在技术创新、产品多样化、全球化战略、产业布局和环境保护方面的发展历程,以及其在电子行业中的重要地位和影响力。

Advanced Microelectronic Products Inc公司的发展小趣事

在电子行业竞争日益激烈的背景下,AMP公司面临着来自同行的巨大压力。为了应对这一挑战,公司进行了战略调整,将重心转向高端电子产品的研发和生产。通过不断提升产品性能和品质,AMP公司成功打造了多个高端品牌,并在细分市场中取得了显著优势。此外,公司还积极拓展新的应用领域,为未来发展奠定了坚实基础。

Comchip Technology公司的发展小趣事

面对日益激烈的市场竞争和不断变化的客户需求,Comchip Technology始终保持着创新精神。公司不断投入研发资源,开发新产品、新技术,以满足市场的不断变化。同时,公司还积极关注行业发展趋势和未来技术动向,为公司的长远发展做好战略布局。

这些故事基于Comchip Technology公司的实际发展情况虚构而成,旨在展示其在电子行业中的成长历程和所取得的成就。虽然这些故事可能并不完全准确或详尽,但它们能够提供一个关于该公司发展的大致框架和背景。

CONTTEK Group GmbH公司的发展小趣事

在技术创新的基础上,CONTTEK Group GmbH公司开始积极拓展市场。公司不仅在国内市场取得了良好的销售业绩,还积极开拓国际市场,与多家国际知名企业建立了合作关系。通过参加国际展览、建立海外销售网络等方式,公司的品牌影响力逐渐提升,产品也远销至全球各地。

FCT Electronics公司的发展小趣事

FCT Electronics的创立可以追溯到二十年前,当时电子行业正处于飞速发展的阶段。几位富有远见和创业精神的工程师看到了电子测试设备市场的巨大潜力,于是联手创立了FCT Electronics。公司最初的产品是一款简易的电路板测试仪,因其精准度高、操作简便而迅速在市场上占有一席之地。随着业务的不断拓展,FCT Electronics逐渐成为电子行业测试设备领域的佼佼者。

问答坊 | AI 解惑

10本学习arm的电子书

10本学习arm的电子书,学习arm不错的书哦…

查看全部问答>

IT从业者如何涨薪创业跳槽

搞计算机的人,有一个通病:成天对着键盘、对着代码,沟通能力比较差。引用霍霍的话说: 线上,猥琐得特厉害,不调戏三两花姑娘就心头不爽 线下,都沉默得可以变成羔羊了 下面,“小绵羊CK”在线上写个长篇大论,说说怎么加薪水。将来到线下找老 ...…

查看全部问答>

图片显示问题

我现在图片可以显示了,是在Onpaint函数里显示的,直接画了窗体上的。如果我想显示比我大的图怎么办? 我希望通过滑动条来显示? MFC不熟,谢谢指导,我加了滑动条,但滑动没效果的…

查看全部问答>

EBOOT的USB下载驱动问题,请教高手!

问题1:   if(pUSBCtrlAddr->OCSR1.out_pkt_rdy)     {                 fifoCnt=pUSBCtrlAddr->OFCR1.out_cnt_low;                 d ...…

查看全部问答>

关于ARM体系结构主存与辅存运行

对于ARM体系取指,是从程序存储器flash中直接取出去译码(像51那样),还是先把程序换入内存,指令从内存中读取? 金币不多,对不起!…

查看全部问答>

请问嵌入式到底学什么?

刚买了个2440的开发板,但不知道学什么了。 现在会基本的烧写UCOS2 系统进去。 突然不知道到底学什么。怎么学。 我的目标是以后去做驱动和系统,底层方面的,不想做应用软件。 驱动怎么学? 系统怎么学? 比如说UCOS2系统吧,我这里有源代 ...…

查看全部问答>

求助高手关于wince下对excel的操作

RT,目前要吧windows上的一个程序移植到wince上去,其他功能都实现了,唯独关于excel部分有些错误 windows上的方法是AfxOleInit()之后就用CWorksheet、CWorkBook.....这几个类操作,在windows上运行没有错误 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ...…

查看全部问答>

LPC2366的几个问题

1. LPC2366的三个VDD(DCDC)(3V3)引脚是否一定要接3.3V电源?周立功的资料说这三个引脚不使用可以悬空。。。但是当这三个引脚悬空时整个单片机根本就没有工作,H-JTAG无法识别芯片,ISP也无法连接,说明这三个脚应该是给内部某些关键模块供电的 ...…

查看全部问答>

LTC1605

各位大哥:         谁有LTC1605应用代码,在线等待。TKS!…

查看全部问答>

LPC2214 擦除问题

请问在擦除前是不是要用串口线把板子和主机相连. 第一次做,有点不明白,请高手指点一下. 怎么确实板子和主机已经连接成功了,成功又该怎么做. 谢谢!!…

查看全部问答>