当所有的系统初始化工作完成之后,就需要把程序流程转入主应用程序,即呼叫主应用程序。最简单的一种情况是:
IMPORT main
B main
直接从启动代码跳转到应用程序的主函数入口,当然主函数名字可以由用户随便定义。
在ARM ADS环境中,还另外提供了一套系统级的呼叫机制。
IMPORT __main
B __main
__main()是编译系统提供的一个函数,负责完成库函数的初始化和初始化应用程序执行环境,最后自动跳转到main()。所以说,前者是库函数,后者就是我们自己编写的main()主函数;
因此我们用的B __main其实是执行库函数,然后该库函数再调用我们的main() 函数,因此在单步调试时会看到先要跑一段程序(其实是库函数),然后再单步到我们自己的main函数(这个同时也说明如果有B __main 则就对应必须有main函数,否则编译出错),如果我们用 B main来进入我们的主函数的话,那在单步调试时就看到直接进入到我们自己的main函数了,中间不会看到其他程序;
那么用B __main和用B main 这两这进入我们的main函数方式有什么不同呢?
如果采用前者则会由编译器加入一段"段拷贝"程序,即我们说的从加载域到执行域转化程序;而采用后者就没有这个了,因此如果要进行 "段拷贝"只能自己动手编写程序来实现了,完成段拷贝后就可以进入我们的主函数了,当然这个主函数不一定是叫做main(),可以起个其他好听的名字,这个有别于使用B __main方式;不管采用哪种方式进入我们的程序,都要有一段"段拷贝"程序,跑完了段拷贝后才能可以进入我们主程序了!(顺便提一下:startup.s这个文件并没有所谓的"段拷贝"功能,再看也无益!)
对含有启动程序来说,"执行地址与加载地址相同"不容易实现:
如果执行地址与加载地址相同哪当然不需要做"段拷贝",但是个人理解编译器还会加入"段拷贝"程序(如果用B __main的话),只是因为条件不满足而不执行而已;但是对含有启动程序来说,"执行地址与加载地址相同"就不容易了.因为启动程序是要烧到非易失存储器里,用来在上电执行的,而这个程序必定会有RW段,如果RW放在非易失存储器,如FLASH,那就不好实现RW功能了,因此要给RW移动到能够实现RW功能的存储器,如SRAM等.因此,对含有启动程序来说,"执行地址与加载地址相同"就不容易实现;程序的入口点在C 库中的__main 处,在该点,库代码执行以下操作:
1. 将非零(只读和读写)运行区域从其载入地址复制到运行地址。
2. 清零ZI 区域。
3. 跳转到__rt_entry。
关键字:Arm main() _main()
引用地址:
Arm中main()和_main()的区别
推荐阅读最新更新时间:2024-11-03 17:52
在ARM处理器中实现SMTP协议的嵌入式远程通讯模式
在本课题中,通过SMTP协议的方式提供了一种新的嵌入式远程通讯模式。即在ARM处理器中实现SMTP协议,并通过双绞线连接到Internet上。在该平台上开发的远程控制设备或仪器仪表实现了通过Internet进行数据的远程传输,在任意一台上网的计算机上都可以通过Internet对其进行远程监视和控制。 项目中选择了基于ARM体系结构的32位微处理器,介绍了模块的各组成部分,包括基于ARM的硬件结构模型、软件结构、SMTP的基本结构及其运行机制。并详细分析了ARM系统中嵌入式SMTP软件模块的具体实现和调试过程。 1.系统整体结构 在系统中,将SMTP服务器引入到ARM的平台上实现嵌入式SMTP服务器(Embed
[单片机]
基于ARM与电力线载波技术的广场照明系统设计
O 引言 目前大空间的广场或教室等场所的照明系统绝大部分都采用完全照明的方式,即使只有某个部分区域有人活动也会开放全部的照明设备,从而造成了巨大的电能浪费。因此设计了基于ARM9和电力线载波通信技术相结合的控制系统,能够实时检测大空间中各区域人员活动情况,并根据控制指令以及事先设好的算法控制相应区域的照明设备点亮及照明时间,并能够对控制信息、照明情况进行记录,便于管理与查询。这样在人员较少的时候,大空间中只有局部区域照明设备点亮,从而实现大幅度节约电能。 1 硬件组成及原理 为了更好地实现控制与节能,将广场照明系统分为若干个区域,每个区域都由一个单片机从机系统负责单独控制。广场分区照明系统总体结构如图1所示,整个系
[单片机]
详析单片机、ARM、FPGA嵌入式的特点及区别
单片机的特点: (1)受集成度限制,片内存储器容量较小,一般内ROM:8KB以下; (2)内RAM:256KB以内。 (3)可靠性高 (4)易扩展 (5)控制功能强 (6)易于开发 ARM的特点: (1) 自带廉价的程序存储器(FLASH)和非易失的数据存储器(EEPROM)。这些存储器可多次电擦写,使程序开发实验更加方便,工作更可靠。 (2) 高速度,低功耗。在和M51单片机外接相同晶振条件下,AVR单片机的工作速度是M51单片机的30-40倍;并且增加了休眠功能及CMOS技术,使其功耗远低于M51单片机。 (3) 工业级产品。具有大电流输出可直接驱动SSR和继电器,有看门狗定时器
[单片机]
解读ARM7内核微控制器LPC2148以太网接口电路
嵌入式主控模块采用了基于ARM7TDMI-S内核的微控制器LPC2148,集成度非常高。内嵌40kB的片内静态RAM和512kB的片内 Flash存储器,片内集成ADC、DAC转换器,看门狗,实时时钟RTC,2个UART,2个I2C还有SPI等多个总线接口,及USB2.0全速接口。方便扩展USB接口、JTAG调试接口、触摸屏,外扩芯片少,而且采用超小的LQFP64封装,使得仪器的微型化得到了保证。而且电路相对简单,降低了开发和生产的成本。芯片可以实现最高60MHz的工作频率,有着较强的功能,能够满足嵌入式系统μC/OS—II及人性化的人机界面的要求。本设计中 LPC2148所有的接口都有使用。 以太网接口部分采用了具有
[单片机]
Arm Helium技术—提升机器学习能力与信号处理性能
Arm Helium技术作为一种全新的M-Profile Vector Extension矢量扩充方案,能为Armv8.1-M架构带来经过强化的计算能力 新架构能够将最小型边缘设备的机器学习能力提升15倍,以及将信号处理性能提升5倍 新架构针对下一代Cortex-M处理器而设计,适用于需在本地进行决策的小型嵌入式设备 Arm宣布针对其下一代Armv8.1-M架构推出基于M-Profile Vector Extension (MVE)矢量扩充方案的Arm Helium技术。这一全新技术能够帮助开发者简化软件开发流程,并显著提升未来Cortex-M系列处理器的机器学习能力与信号处理性能。 业界正在加速推动创建一个拥有万
[物联网]
SC16IS752在ARM扩展串口中的应用
嵌入式设备中串口是最常用、最简单的接口,如何扩展CPU的串口,对于多功能嵌入式设备有着重要意义。SC16IS752是NXP公司推出带I2C/SPI总线接口转双通道UART的转换芯片,可提供高达5Mbit/s的速率,兼容广泛使用的16C450,有利于软件的移植和编写。本文中微控制器采用NXP公司推出的LPC2214,基于16/32位ARM7TDMI-STM 的内核, 144脚封装,极低的功耗, 特别适用于工业控制等。 SC16IS752的主要特性如下: ●工作电压:3.3或2.5V, 工作温度范围:-40~+85°C,低功耗, 3.3V的睡眠电流小于30uA; ●两个全双工UART,64字节的FIFO,完全可编程的字符格式,R
[单片机]
基于ARM-LPC2368的网络接口的设计与实现
1 引言 随着Internet技术的迅速发展,人们对信息共享的要求也不断提高。目前,嵌入式系统已经渗透到我们生活的每个角落,它与网络的完美结合,为我们共享信息提供了很大的便利。PHILIPS公司的LPC2368是一款优秀的微处理器,基于它的嵌入式系统如果没有以太网接口,那么其应用价值也就会大打折扣。因此,就整个系统而言,以太网接口电路应是必不可少的,但同时也是相对较复杂的。 以太网接口电路主要由MAC控制器和物理层接口(Physical Layer,PHY)两大部分构成。LPC2368内嵌一个以太网控制器,支持精简的媒体独立接口(Reduced Media Independent Interface,RMII)和带缓冲DM
[单片机]
ROS在ARM上的编译
ROS(robot operaring system)作为移动机器人软件架构,近几年得到了越来越广泛的应用,但是大部分应用是基于X86架构的处理器,怎么样将这么强大的工具和应用极为广泛的ARM处理器结合在一起,是现在很多开发者急于解决的问题。我作为ROS的初学者最近也尝试了一把ROS 的arm移植,纠结了四五天,不过最后还是成功了。 虽然现在针对非X86架构的处理器产生了一些ROS的应用方案,比如eros(http://www.ros.org/wiki/eros)、rosserial(http://www.ros.org/wiki/rosserial)等方式,后者是针对Arduino的,前者玩了几天,没搞清楚是怎么用的,
[单片机]