0
问答首页 最新问题 热门问题 等待回答标签广场
我要提问

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

51单片机里的SFR寄存器内容初始化了以后,各个寄存器值变了。掉电后,寄存器里的值是不是又恢复原来状态了。我看51单片机的寄存器属于RAM区,应该是恢复原来状态了。51单片机一上电程序就会自动跑起来,所以寄存器值就会被初始化的。

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

以上我说的对不?
提问者:pdsoa 地点:- 浏览次数:2760 提问时间:05-13 02:01
我有更好的答案
提 交
8条回答
vmuwuerds 05-15 13:15
寄存器属于CPU内部电路,不属于用户RAM区。但和RAM的质是一样的。复位以后的状态,数据手册都会写得很精楚,自己去看。ARM也一样。

“ARM程序一上电并没有跑起来,而是要通过指令来让其跑去来。”
没有跑起来又怎么去执行你的“指令”呢??
只不过高端的ARM芯片(除M3、M0这种面向单片机应用的CPU),内部都不会带FLASH,特别的,如果外接的是NAND FLASH这种非线性FLASH,启动过程比单片机复杂而已。因此,这种场合都会配上一个BootLoader,负责把应用的代码全部搬到RAM去运行(如果接的是NOR FLASH,就和单片机的用法差不多,编程序-》烧FLASH-》程序直接在FLASH上运行)。
jiecai5388 05-22 16:38
寄存器的性质和RAM是一样的,你可能想知道寄存和RAM是否是同一编址空间
CPU上电都会跑起来,除非没有时钟!
YY599566 05-22 01:36
ARM有IROM,IROM有段初始化的固化代码

启动时要把考到IRAM里,然后才能进行相应的运行
skdmmmmm 05-13 13:12
哎呵呵。。。我用的少,确实这方面知道的太少了。
不过,后面那句话是我们的软件人员给我讲的。估计我说的跑起来和你们说的跑起来不是一个意思。
今天遇到一个问题就是关于这个话题的。几个GPIO用作按键控制输入的。但是一开始 没有做初始化的时候,但我上电我测量IO口的电平是不正确的。把IO初始化了以后,电平就正确了。但是掉电,再重新上电我再去测电平又不正确了,按说这个时候它应该自己跑起来执行初始化,然后我就应该测到正确的电平,可是没有。然后软件人员说上电了并不一定跑起来了,得他执行命令让它跑起来。(用的是LINIUX)
这个怎么解释呢?
lgjmjx 05-22 06:55


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

硬件一上电复位,各位寄存器就会被复位到默认值。是不能保存上电前的状态的。对于GPIO,默认态一般是输入状态。
fb3544 05-21 22:17
哦 ,我明白了
就是说一上电,操作系统跑起来了,但是那段执行按键的驱动程序没有跑起来。需要操作系统给一个命令执行。也可以用你最后面说的那个方法默认执行。
应该是这样的。我估计软件人员没有很熟悉命令。不然他应该给我设置一下的。
多谢多谢
风动影随 05-20 14:43
所以以后发贴要把一些关键的点写出来,你们用上了LINUX这是一个很关键的点。因为LINUX的开发模型和单片机的开发模型很不一样。我一开始也按单片机的角度去考虑你的问题了。毕竟这个分坛讨论的问题9成9都是单片机的。
60user77 05-16 18:47
呵呵。我也是感觉到T说的是按照单片机的思路来的,我就赶紧补上关键点呵呵
撰写答案
提 交
1 / 3
1 / 3