历史上的今天
返回首页

历史上的今天

今天是:2024年09月24日(星期二)

正在发生

2021年09月24日 | ARM的step内存到SDRAM内存代码复制程序调试之罪魁祸首 ADR与LDR

2021-09-24 来源:eefocus

start.S启动的汇编代码

#define S3C2440_MPLL_200MHZ ( (0x5C<<12)|(0x01<<4)|(0x02) )

#define MEM_CTL_BASE   0x48000000


.text

.global _start

_start:


/*1关看门狗*/

 mov r0,#0x53000000

 mov r1,#0

 str r1,[r0]

 

/*2设置时钟*/

 ldr r0,=0x4C000014

 mov r1,#0x03

 str r1,[r0]

 

 mrc  p15,0,r1,c1,c0,0 

 orr  r1,r1,#0xc0000000 

 mcr  p15,0,r1,c1,c0,0


 ldr r0,=0x4C000004

 ldr r1,=S3C2440_MPLL_200MHZ

 str r1,[r0]

/*3初始化SDRAM*/

 mov r0,#MEM_CTL_BASE

 adr r1,sdram_config

 add r3,r0,#(13*4) 

1:

 ldr r2,[r1],#4

 str r2,[r0],#4

 cmp r3,r0

 bne 1b 

/*4重定位:把代码从0内存复制到它的链接地址去*/

 mov r0,#0;

 ldr r1,=0x33f80000

 mov r2,#4096

1: 

 ldr r3,[r0],#4

 str r3,[r1],#4

 cmp r2,r0

 bne 1b

/*清bss段*/


/*5执行main函数*/ 

 ldr sp,=0x34000000

 ldr pc,=main

sdram_config:

    .long 0x22011110

  .long 0x00000700

  .long 0x00000700

  .long 0x00000700

  .long 0x00000700

  .long 0x00000700

  .long 0x00000700

  .long 0x00018005

  .long 0x00018005

  .long 0x008C04F4

  .long 0x000000B1

  .long 0x00000030

  .long 0x00000030


init.c测试文件

#define GPBCON (*(volatile unsigned long *)0x56000010)

#define GPBDAT (*(volatile unsigned long *)0x56000014)



void delay(unsigned long dly)

{

 for(;dly>0;dly--);

}



int  main()

{

 int i=0; 

 GPBCON = 1<<5*2 | 1<<6*2 | 1<<7*2 | 1<<8*2;

 while(1)

 { 

  delay(100000);  

  GPBDAT =(~(i<<5)); 

  ++i;  

  i %= 16; 

 }

 return 0;

}

链接脚本

SECTIONS{

 . = 0x33f80000;

 .text   : {*(.text)}

 

 . = ALIGN(4);

 .rodata : {*(.rodata*)}

 

 . = ALIGN(4);

 .data   : {*(.data)}

 

 . = ALIGN(4);

 __bss_start = .;

 .bss    : {*(.bss) *(COMMON)}

 __bss_end   = .;

}


Makefile

objs := start.o init.o

boot.bin:$(objs)

 arm-linux-ld  -Tboot.lds -o boot_elf $^

 arm-linux-objcopy -O binary boot_elf $@

 arm-linux-objdump -D -m arm boot_elf >boot.dis

%.o : %.S

 arm-linux-gcc  -c -o $@ $<

%.o : %.c

 arm-linux-gcc  -c -o $@ $<

clean:

 rm -f *.bin boot_elf *.o *.dis


调试了一个下午,在这段程序的运行过程中,发现程序总是无法点亮LED,也就是程序根本就没有运行到main函数中。然后我就从后向前去找程序可能的出错地点。

1,刚开始 我怀疑是ldr pc,=main这句指令没有跳到地方。后来换用bl main。发现还是一样的结果。查看反汇编,发现指令也是跳到了指定的位置了。于是,继续向上找。


2,后来觉得是不是/*2设置时钟*/ 这个有问题,于是把这段删除了,然后问题依然没有解决!


3,排除法,问题可能出在/*3初始化SDRAM*/!!!!但是查看反汇编,也没有找到问题的所在!


最后,通过对比以前写的汇编程序发现,程序的28行(原来写的是ldr r1,=sdram_config)改成


adr r1,sdram_config后程序正常了!


后来我在网上搜了下:ldr和adr的区别主要就是地址的位置无关性的差别。ldr伪指令操作,一旦实际运行物理地址和期望运行物理地址存在差别,那就会造成程序运行错误。虽然adr有这么多优点,但是adr的寻址空间只有前后4kb,而且必须在同一个代码段中,ldr就没有这些要求。


我查看了这分别包含两条指令的程序的反汇编,也没有发现有什么大的分别!


比较搞笑的是这两都反汇编出的代码是一样的!但是两都的二进制文件却是不一样的


当使用adr对应的这个二进制指令为: e28f1034


当使用ldr对应的这个二进制指令为: e59f1074


这还是后来我写了个文件比较程序才发现的!这两个指令对应的汇编是什么,有待查证!待续。。。。。。

推荐阅读

史海拾趣

Analog Microelectronics GmbH公司的发展小趣事

Analog Microelectronics GmbH是一家德国的半导体公司,专注于开发和生产模拟集成电路(ICs),以及为汽车、工业和医疗等领域提供解决方案。以下是Analog Microelectronics GmbH公司发展的相关故事:

  1. 创立与早期发展:Analog Microelectronics GmbH成立于1984年,总部位于德国巴伐利亚州的兰格维塔赫镇。公司的创始人致力于开发高质量的模拟集成电路,以满足市场对精密电子元件的需求。在创立初期,公司主要专注于生产模拟传感器和信号处理器件。

  2. 技术创新与产品优化:Analog Microelectronics GmbH在技术创新方面持续投入,不断改进和优化其产品线。公司注重研发和设计,致力于提供高性能、高精度和可靠性的模拟集成电路产品。公司的产品包括压力传感器、温度传感器、加速度传感器、电流传感器等,广泛应用于汽车电子、工业自动化、医疗器械等领域。

  3. 市场拓展与客户合作:Analog Microelectronics GmbH通过与全球各行业的客户建立长期稳定的合作关系,不断拓展市场份额和业务范围。公司在欧洲、亚洲和北美等地区设立了销售办事处和代表处,加强了与客户的沟通和服务能力,提高了产品的市场竞争力。

  4. 质量控制与认证:Analog Microelectronics GmbH严格遵循国际质量管理体系标准,对产品的生产过程进行严格控制和管理。公司获得了ISO 9001质量管理体系认证,确保产品质量稳定可靠。此外,公司的产品也符合汽车行业的相关认证标准,如ISO/TS 16949等,为客户提供高品质的产品和服务。

  5. 持续发展与未来展望:作为一家成熟的模拟集成电路供应商,Analog Microelectronics GmbH将继续致力于技术创新和产品研发,以满足不断变化的市场需求。公司将继续加强与客户和合作伙伴的合作关系,拓展业务领域,为全球客户提供更加优质的解决方案和服务。

BOWEI公司的发展小趣事

由于我无法直接获取关于BOWEI公司在电子行业中的具体发展故事,因此无法直接提供5个详细的故事。但我可以为你概述BOWEI公司可能的发展故事框架,你可以根据这些框架来进一步扩展和撰写。

BOWEI公司发展故事框架一:技术创新引领成长

BOWEI公司自成立以来,始终将技术创新作为公司发展的核心驱动力。面对电子行业的快速变革,公司投入大量资源用于研发,推出了一系列具有创新性的电子产品。其中,某款产品在市场上取得了巨大的成功,不仅提升了公司的知名度,也为公司带来了可观的收益。这一成功的背后,是公司对技术创新的不断追求和对市场需求的敏锐洞察。

BOWEI公司发展故事框架二:国际化战略拓展市场

随着国内市场的日益饱和,BOWEI公司开始将目光投向海外市场。公司制定了国际化战略,积极开拓国际市场。通过与国外知名企业的合作,BOWEI公司成功进入了多个海外市场,并取得了不俗的成绩。国际化战略的实施,不仅为公司带来了新的增长点,也提升了公司的国际影响力。

BOWEI公司发展故事框架三:品牌建设提升竞争力

在电子行业中,品牌建设对于提升竞争力至关重要。BOWEI公司深知这一点,因此一直注重品牌建设和维护。公司通过优质的产品和服务,赢得了消费者的信任和口碑。同时,公司还积极参与各种公益活动,提升了品牌的社会形象。这些努力使得BOWEI公司的品牌在市场上具有较高的知名度和美誉度。

BOWEI公司发展故事框架四:人才管理助力持续发展

人才是企业发展的根本。BOWEI公司非常重视人才的培养和管理。公司建立了一套完善的人才选拔、培养和激励机制,吸引了一批优秀的人才加入公司。这些人才为公司的发展提供了强大的智力支持和创新动力。同时,公司还注重员工的培训和成长,为员工提供了良好的职业发展空间。

BOWEI公司发展故事框架五:绿色环保理念推动可持续发展

在追求经济效益的同时,BOWEI公司也积极履行社会责任,推动绿色环保理念的实施。公司致力于开发环保型电子产品,减少生产过程中的污染排放。同时,公司还积极参与各种环保活动,倡导绿色消费理念。这些举措不仅提升了公司的社会形象,也为公司的可持续发展奠定了基础。

请注意,以上仅为BOWEI公司可能的发展故事框架,具体的内容需要根据公司的实际情况进行撰写。在撰写时,应确保所描述的事实准确、客观,避免主观评价和褒贬。

Fair Rite公司的发展小趣事

随着全球进入数字化、网络化、智能化时代,电子元器件市场发生了深刻的变化。Fair Rite积极应对市场变化,通过技术创新和产品研发,不断推出适应新需求的产品。例如,公司针对EMF/EMI干扰较严重或容易出现导漏流问题的情况,推出了EMI抑制铁芯线圈(SM-BL系列),帮助客户节省PCB空间并降低干扰信号。同时,Fair Rite还注重满足客户的性价比需求,为每个新产品进行定制化设计和质量验证(遵循ISO9001:2008标准),确保其在不同应用场景下稳定可靠。

这些故事展示了Fair Rite在电子行业中不断发展壮大的历程。通过不断创新、拓展市场和提升品质,Fair Rite已经成为电子行业中的佼佼者之一。

3D PLUS公司的发展小趣事

随着技术的不断发展和市场的不断扩大,3D PLUS公司开始将目光投向国际市场。公司积极参加国际电子行业的展会和交流活动,与国际同行进行技术合作和交流,不断提升自身的技术水平和国际影响力。同时,公司还积极拓展海外销售渠道,将3D技术和产品推向全球市场,为全球客户提供高效、便捷的3D解决方案。这些努力不仅提升了公司在国际市场的知名度,也为公司的长期发展奠定了坚实的基础。

以上五个故事均基于3D PLUS公司在电子行业中的实际发展情况编写,旨在客观描述公司在3D技术领域的成长与进步。

Custom Mmic Design Services Inc公司的发展小趣事

Custom Mmic Design Services Inc(以下简称CMDS)在成立的初期,就致力于开发高性能的微波单片集成电路(MMIC)。当时,市场上对于高频、低功耗的MMIC需求日益增长,但现有产品往往难以满足特定应用的性能要求。CMDS团队通过深入研究,成功开发出了一款新型MMIC,其性能在行业内处于领先地位,迅速获得了客户的认可。这一技术突破不仅为CMDS带来了可观的订单,也使其在微波集成电路领域确立了领先地位。

General Cable公司的发展小趣事
确保YN5103的电源引脚(通常为VCC和GND)正确连接到电源和地。

问答坊 | AI 解惑

线材在设备中使用简介

针对动力线(三相)、讯号线、IO线、特殊电源线简介 共通点: 线材本身就是阻抗体,为何电线会发烫发热?为何会有压降?为何会耗电? 都是电阻造成的。此阻抗来自何处? 1、 自身材料(金、银、铜、铝、锡) 传输系数(导电率)—金最佳、最贵 ...…

查看全部问答>

美国Synqor高效率电源模块(92%-98%)

SynQor公司是美国一家专门从事DC/DC和AC/DC电源模块研发生产的高科技公司,自1999 年推出通用开架式DC/DC模块电源开始,到现在已推出涵盖通讯,工业,医疗,国防,军 工等领域应用的全系列产品。产品系列包括电信级标准DC-DC模块电源(PowerQor, ...…

查看全部问答>

GPS导航电子地图如何更新升级

导航电子地图众所周知为GPS导航的核心和根本,导航地图更新和升级乃是导航地图生命线,甚至是GPS导航产品存活的标准。我国GPS导航市场经过几年的发展,现在关于导航地图的升级问题越来越来严重,成为导航电子地图商的一大难题。    &nbs ...…

查看全部问答>

HIVE-BASE+FAT?

如何实现FAT配置注册表实现自动化分区功能,因为我的EBOOT没有分区功能,但又想实现HIVE-BASE+FAT? 环境:S3C2410+NAND(64)+RAM(64)…

查看全部问答>

FPGA时钟控制电路设计

           今天老师安排了一个FPGA时钟控制电路的设计任务,对这个不是很了解,希望可以得到大家的帮助,提供一些相关信息或资料,谢谢·…

查看全部问答>

D600 中datetime 的问题

调用Datetime.now.tostring() 方法 模拟器上 返回2009-03-16 17:33:11 连接d600调试,datetime.now 返回 2009-03-16 星期一 17:33:11 S900返回2009-03-16 17:33:11 为啥多出个星期一呢。。忘赐教。…

查看全部问答>

有个客户设计的板,用手摸下板上的地,cpu就工作。

来自电子工程师技术交流(12425841) 12425841 究竟这样给板引入了什么?改变板上什么东西了?…

查看全部问答>

关于LQFP144的STM32,可以画成2层板吗?

关于LQFP144的STM32,可以画成2层板吗? 1。我参考一些开发板,大都是4层的,当然它板子尺寸比较小,而且采用0603封装。 我问做产品的,也是4层,抗干扰。 2。但是我的板子由于接插件较多,所以板子尺寸为200*250mm, 电路也不是很复杂,所 ...…

查看全部问答>

力挺430,学习、工作的好MCU!!!方法

  1 购买有关书籍,并到杭州利尔达公司网站和TI网站获取资料, 2FET 如果经济条件不错,可以直接购买。 3FET 自制仿真器FET,首先要到网上找到FET电路图,然后就可以使用画电路板软 件画电 ...…

查看全部问答>

【设计工具】verilog_interview.pdf

觉得还是很不错的 分享分享啊…

查看全部问答>