搜索
bottom↓
回复: 17

只有一个ARM,还需要bootloader吗

[复制链接]

出0入0汤圆

发表于 2012-6-15 21:16:57 | 显示全部楼层 |阅读模式
用arm+晶振+电容和电阻焊接了一个最小系统,没有任何外置设备的
还需要bootloader或**init.s吗?
程序用jlink下载

阿莫论坛20周年了!感谢大家的支持与爱护!!

曾经有一段真挚的爱情摆在我的面前,我没有珍惜,现在想起来,还好我没有珍惜……

出0入0汤圆

发表于 2012-6-15 21:33:17 | 显示全部楼层
bootloader看你自己的需要,如果只是简单的学习,不需要。但是启动文件(配置模式,中断等)还是需要的,这是我的普通看法。

出0入0汤圆

 楼主| 发表于 2012-6-15 21:50:42 | 显示全部楼层
trump8510 发表于 2012-6-15 21:33
bootloader看你自己的需要,如果只是简单的学习,不需要。但是启动文件(配置模式,中断等)还是需要的,这 ...

非常感谢LS
启动文件是去网上下载还是下载了修改

有个疑问,我这种ARM用法和AVR,51一样,都是加上一个晶振,为什么AVR,51不需要启动代码,而ARM需要?

出0入0汤圆

发表于 2012-6-15 22:08:55 | 显示全部楼层
chary_5 发表于 2012-6-15 21:50
非常感谢LS
启动文件是去网上下载还是下载了修改

51其实也可以有

出0入0汤圆

 楼主| 发表于 2012-6-15 22:43:26 | 显示全部楼层
yunqian09 发表于 2012-6-15 22:08
51其实也可以有

多谢回复
那ARM必须要有启动代码吗??

出0入0汤圆

 楼主| 发表于 2012-6-15 23:01:03 | 显示全部楼层
启动代码是针对C语言,是把启动后入口点转入到C的main函数
如果是汇编语言,看来就不需要了

出0入0汤圆

发表于 2012-6-15 23:09:47 | 显示全部楼层
关注当中、、、、、、、、、、、、、、、、、

出0入0汤圆

 楼主| 发表于 2012-6-15 23:21:54 | 显示全部楼层
启动代码
为什么启动代码一定一要用汇编语言编写,启动代码的主要功能是什么?单片机不用启动代码,为什么arm要用启动代码?

------解决方案--------------------------------------------------------
最开始的几行代码要完成初始化中断向量,堆栈什么的。这些只能用汇编做。
------解决方案--------------------------------------------------------
CPU上电后会从IO空间的某地址取第一条指令。但此时:PLL没有启动,CPU工作频率为外部输入晶振频率,非常低;CPU工作模式、中断设置等不确定;存储空间的各个BANK(包括内存)都没有驱动,内存不能使用。在这种情况下必须在第一条指令处做一些初始化工作,这段初始化程序与操作系统独立分开,称之为bootloader。
一个嵌入式Bootloader最初始部分的代码几乎必须是用汇编语言写成的,因为开发板刚上电后没有准备好C程序运行环境,比如堆栈指针SP没有指到正确的位置。汇编代码应该完成最原始的硬件设备初始化,并准备好C运行环境,这样后面的功能就可以用C语言来写了。
------解决方案--------------------------------------------------------
1. C language 沒有 SP(Stack Pointer register), CPSR, CP15 等的控制指令, 若要初始化這些, 一定要用 Assembly code, 其它部份不是不能用 C language 實現, 但誠如 3L 所述, C language 的運行環境尚未準備好, 故 SP 必須先設好, Global Variable, standard library 都還不能使用.
2. 單片機沒有 OS 的觀念, 可以說全部都是在啟動代碼的模式.

Paul, Chao @ Techware

------解决方案--------------------------------------------------------
单片机不用启动代码,为什么arm要用启动代码?

上面大家都说了为什么ARM要用启动代码。

其实单片机也是有“启动代码”的。只不过这部分工作不需要单片机程序员自己来完成。

比如用Keil C编写单片机程序,针对指定型号的单片机启动代码由Keil来完成了。不需要我们干涉。

单片机程序只需要直接编写c部分的程序即可。

出0入0汤圆

 楼主| 发表于 2012-6-15 23:23:36 | 显示全部楼层
再贴一段

《ARM微控制器基础与实战》后面的例子一般都有提供汇编语言的版本,我试着用ADS 1.2编译连接之后用EasyJTAG进行仿真,结果可以正常运行。我的工程当中并没有包含启动代码Vectors.s、Init.s等文件,用AXD的反汇编窗口也可以看到0x40000000处开始就是我的汇编语言指令,那么是不是可以理解为用汇编语言写的代码不需要启动代码?请各位指点我这个初学者。
答 1:
re.启动代码主要是完成库函数的堆栈初始化和完成各种模式的初始化以及目标板的初始化。

使用汇编代码,需要注意异常向量表的位置。其它如堆栈分配什么的,就要用户自己设置了。我们的工程模板有专门使用汇编的,您可以参考一下。
答 2:
谢谢版主的回答刚刚看过了工程模板asm for lpc2100,有些明白了。看来基础实验的程序中只是没有使用启动代码而已,而不是不需要。

出0入0汤圆

 楼主| 发表于 2012-6-15 23:30:37 | 显示全部楼层
晕了,,这到底汇编语言写的还要不要启动代码

出0入0汤圆

发表于 2012-6-16 07:13:42 | 显示全部楼层
先烧录个程序进去看看啊.

出0入0汤圆

 楼主| 发表于 2012-6-16 12:25:14 | 显示全部楼层
程序烧录了,但发现串口出来的数据不正常,不是在程序里预设的数据,但是这些不正常的数据都是循环不变的。。。
郁闷了。。

出0入0汤圆

发表于 2012-6-16 13:04:48 | 显示全部楼层
启动代码是帮助进入C的正常运行,如果你全用汇编写,启动代码就是什么时钟配置,内存配置等等,要使用定时器还不是要初始化,这都是启动代码。

出0入0汤圆

 楼主| 发表于 2012-6-16 16:14:14 | 显示全部楼层
可是怎么在汇编里加入启动代码呢,我现在已经加了
        AREA        RESET, CODE, READONLY, ALIGN=9
        ENTRY
        CODE32

;*** memory allocate RAM ***
STACK        EQU        0x40000180        ;

出0入0汤圆

发表于 2012-6-16 18:39:09 | 显示全部楼层
chary_5 发表于 2012-6-15 23:30
晕了,,这到底汇编语言写的还要不要启动代码


当然要,只不过像51那些结构简单并且程序简单的那些,可以在使用中分配资源,而没必要统一初始化

例如,需要用中断的51,开头就有这么一句

ORG 0000H
JMP  100H
ORG 0013H
JMP  INT

这就是启动代码部分。
arm的结构复杂,启动代码也自然复杂了

出0入0汤圆

 楼主| 发表于 2012-6-16 21:18:55 | 显示全部楼层
keil uVersion 的startup.S启动代码是专门针对C语言的啊
我在建立工程时提示是否加入startup.S, 点 是之后,编译时就会出现找不到main函数的错误

出0入0汤圆

发表于 2012-6-18 11:10:39 | 显示全部楼层
其实是否需要bootloader这个主要是看楼主的应用需求。
建议楼主查看一下有关代码段,数据段相关的资料

出0入0汤圆

发表于 2012-6-20 13:18:00 | 显示全部楼层
楼主应该去了解一下,单片机启动的时候, 什么必须要有启动代码。。
启动代码是初始化你的硬件和MCU外围的,以便于程序能正常跑起来
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片。注意:要连续压缩2次才能满足要求!!】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-8-26 13:13

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表