打印

大家帮我整理下思路,我彻底想不起来了。谢谢了

[复制链接]
1407|11
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
许世霞|  楼主 | 2012-5-24 17:07 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
51单片机里的SFR寄存器内容初始化了以后,各个寄存器值变了。掉电后,寄存器里的值是不是又恢复原来状态了。我看51单片机的寄存器属于RAM区,应该是恢复原来状态了。51单片机一上电程序就会自动跑起来,所以寄存器值就会被初始化的。

最近在用ARM搞混了,ARM的系统寄存器是属于RAM 还是ROM?应该也是RAM吧?但是不同的是,ARM程序一上电并没有跑起来,而是要通过指令来让其跑去来。

以上我说的对不?
沙发
Tinnal| | 2012-5-24 17:17 | 只看该作者
寄存器属于CPU内部电路,不属于用户RAM区。但和RAM的质是一样的。复位以后的状态,数据手册都会写得很精楚,自己去看。ARM也一样。

“ARM程序一上电并没有跑起来,而是要通过指令来让其跑去来。”
没有跑起来又怎么去执行你的“指令”呢??
只不过高端的ARM芯片(除M3、M0这种面向单片机应用的CPU),内部都不会带FLASH,特别的,如果外接的是NAND FLASH这种非线性FLASH,启动过程比单片机复杂而已。因此,这种场合都会配上一个BootLoader,负责把应用的代码全部搬到RAM去运行(如果接的是NOR FLASH,就和单片机的用法差不多,编程序-》烧FLASH-》程序直接在FLASH上运行)。

使用特权

评论回复
板凳
BitFu| | 2012-5-24 17:26 | 只看该作者
寄存器的性质和RAM是一样的,你可能想知道寄存和RAM是否是同一编址空间
CPU上电都会跑起来,除非没有时钟!

使用特权

评论回复
地板
forgot| | 2012-5-24 17:27 | 只看该作者
ARM有IROM,IROM有段初始化的固化代码

启动时要把考到IRAM里,然后才能进行相应的运行

使用特权

评论回复
5
Tinnal| | 2012-5-24 17:35 | 只看该作者
ARM有IROM,IROM有段初始化的固化代码

启动时要把考到IRAM里,然后才能进行相应的运行
forgot 发表于 2012-5-24 17:27

这个还真得看具体的CPU而定,ARM公司只做核,只负责从AHB总线取指令。至于怎么把指令喂到ARM嘴里,就得看CPU厂家了。
ATMEL采用的是ROM的方式,里头有最初的启动代码,负责把你前4K的代码拷到内部的4K SRAM运行,至于是4K以后的代码,则需要前4K的你的代码负责了搬运了。这个ROM代码还能通过USB或串口下载程序,是做得比较好的。
而三星的作法是通过硬件把前4K的代码拷到内部的4K SRAM运行,下程序麻,只能通过JTAG接口。
当然,如果你用的是NOR,你可以直接运行你的代码,而完全不用拷贝。

使用特权

评论回复
6
许世霞|  楼主 | 2012-5-24 20:41 | 只看该作者
哎呵呵。。。我用的少,确实这方面知道的太少了。
不过,后面那句话是我们的软件人员给我讲的。估计我说的跑起来和你们说的跑起来不是一个意思。
今天遇到一个问题就是关于这个话题的。几个GPIO用作按键控制输入的。但是一开始 没有做初始化的时候,但我上电我测量IO口的电平是不正确的。把IO初始化了以后,电平就正确了。但是掉电,再重新上电我再去测电平又不正确了,按说这个时候它应该自己跑起来执行初始化,然后我就应该测到正确的电平,可是没有。然后软件人员说上电了并不一定跑起来了,得他执行命令让它跑起来。(用的是LINIUX)
这个怎么解释呢?

使用特权

评论回复
7
Tinnal| | 2012-5-24 20:56 | 只看该作者
本帖最后由 Tinnal 于 2012-5-24 20:57 编辑

呵呵,明白了。
他说的“然后软件人员说上电了并不一定跑起来了”是指那个GPIO并不处于正确的工作状态,结合linux,他应该是在说那个驱动程序没有跑起来。
他说的“得他执行命令让它跑起来”是指初始化命令。对应到Linux,特定的硬件初始化是放在特定的设备驱动程序里头的(型如***.ko),如果你启动linux,但没用insmod ***.ko命令来装载这个驱动,则硬件就没有正确初始化了。(你可以把这条命令加入/etc/init.d/rcS,让他开机就自动执行)。

硬件一上电复位,各位寄存器就会被复位到默认值。是不能保存上电前的状态的。对于GPIO,默认态一般是输入状态。

使用特权

评论回复
8
许世霞|  楼主 | 2012-5-24 22:14 | 只看该作者
哦 ,我明白了
就是说一上电,操作系统跑起来了,但是那段执行按键的驱动程序没有跑起来。需要操作系统给一个命令执行。也可以用你最后面说的那个方法默认执行。
应该是这样的。我估计软件人员没有很熟悉命令。不然他应该给我设置一下的。
多谢多谢

使用特权

评论回复
9
Tinnal| | 2012-5-24 22:18 | 只看该作者
是的。

使用特权

评论回复
10
Tinnal| | 2012-5-24 22:21 | 只看该作者
所以以后发贴要把一些关键的点写出来,你们用上了LINUX这是一个很关键的点。因为LINUX的开发模型和单片机的开发模型很不一样。我一开始也按单片机的角度去考虑你的问题了。毕竟这个分坛讨论的问题9成9都是单片机的。

使用特权

评论回复
11
forgot| | 2012-5-25 09:23 | 只看该作者
说的对 5# Tinnal

使用特权

评论回复
12
许世霞|  楼主 | 2012-5-25 10:32 | 只看该作者
呵呵。我也是感觉到T说的是按照单片机的思路来的,我就赶紧补上关键点呵呵

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

439

主题

3781

帖子

4

粉丝