This discussion has been locked.
You can no longer post new replies to this discussion. If you have a question you can start a new discussion

问题1:MTS请教各位: 软件能判断ARM系统是上电冷启动复位还是运行中热复位吗? 问题2: 请教:为什么上电冷启动复位时RAM中的内容是随机的? 而当热复位时RAM中的内容却一定保持在热复位前的内容状态?

问题1:MTS请教各位: 软件能判断ARM系统是上电冷启动复位还是运行中热复位吗?

问题2: 请教:为什么上电冷启动复位时RAM中的内容是随机的? 而当热复位时RAM中的内容却一定保持在热复位前的内容状态? (所说RAM是指复位后未被启动程序覆盖的RAM区)

微信群中的讨论摘要:

1@Terry  通过查看RAM中预设的复位标记位来判断是上电复位还是热复位,似乎不可靠? 因为上电冷复位后RAM中的内容是随机的,不能做为判断依据。

2:系统运行中的复位,都是热复位,包括看门狗

3@MTS 你先指明是ARM的哪类产品?AP还是MCU

4@SimonLuk 主要是集成ARM内核的SOC,包括McU。那个问题是否由RAM内存控制器的硬件设计决定? 各个系统都是一样的?

5:有人写过这样的博客,你的问题应该和ram,arm的设计有关,至于为何得细看了

6@Terry 那篇博客我看到了,它是通过在RAM中设置标志位来判断是上电冷启动复位还是热复位。我觉得有点问题,就像它博客中所说的“上电复位冷启动后内外RAM的内容是随机的",但它却以这个随机不确定的RAM标志位作为判断依据?

7@MTS 在实际应用中,好像没有不对ram进行初始化,而使用其中的内容。纠结这个问题的应用背景是什么呢? 

8:无论是热启动还是冷启动。程序开始执行,肯定首先是对ram进行初始化。

9:不用纠结热复位还是冷启动,对于reset,要搞清的是,无论通过何种方式触发的reset,作用域在哪?

10SRAM的原理,参考RS触发器。AP那边的结构我不清楚,MCU这边很简单,图我上次都给你看过了,无论什么形式的系统复位,最后执行的动作都是相同一个(备份域复位例外)。复位后,寄存器恢复复位值,RAM也会在初始化代码的作用下清空。

11@MTS 我不明白你纠结复位后保留RAM内容的目的是什么。复位原本的目的,就是让芯片重新开始。如果只是要“从头”开始,写段asm代码,改变寄存器的值就可以了

12@SimonLuk 复位后保留RAM内容的目的是“程序重运行,但RAM中指定位置的数据要保留不变,可被重新调用。(RAM中指定位置的数据不能初始化清0)

13:@MTS  写代码要假设复位后ram是随机内容,既不是0,也不是原来的内容不变。其他免谈。否则可靠性就是儿戏。

14:@傻孩子  对于DRAM,由于复位保持时间和刷新时间等问题,内容可能会丢失。对于SRAM,只要保持不断电、不写,内容就不会变,这是RS触发器的原理。

15@SimonLuk 硬件是硬件,软件要可靠,要逻辑确定就,要可移植性强,要偷懒,就必须做这种假设。太依赖具体某一平台的硬件特性,就是给软件工程师自己找麻烦。

16@MTS 你的编程思想值得商榷。你是要把地球用原子弹炸掉,然后只留一片诺亚方舟?

17@MTS 那就使用带电ram

18@MTS  想要检查是否复位,不用检查RAM的内容,那是20年前单片机的做法。现在只要检查Systick就够了,只要复位,Systick必定从0开始。

19@SimonLuk  还有,Systick是否为0貌似不一定的……我要找菜式家族确认下

20@傻孩子 SystickVal寄存器,复位后会清零的

21@SimonLuk 真的不一定的,有一个掉电保护模式,不太常见,但真的有

22@傻孩子  噢,那可能是AP吧,MCU没有

23@SimonLukMCU有的,我去确认过的

24@傻孩子  MCU只有备份域吧

25@SimonLuk  嗯,类似。但醒来的时候和复位大体类似。但部分寄存器可能不为0

26@Williamgao systick的计数值,在复位后是否清零?Cortex-MSysTick寄存器,复位后一定是0么?

27@傻孩子 备份域的寄存器是不清零的

28@傻孩子   systick 文档写的是unkown

29@SimonLuk 结论有了,所以,不能依赖这个值。你依赖,出问题,arm只能一脸懵逼。经验结论和design specTRM)你信谁?——ARM说我不管。如果你不相信今天的讨论,请发邮件到support-core@arm.com

30@傻孩子  我回去翻手册,有写的。这个值我是确认过的

31@SimonLuk  具体核确认过其实是两回事……因为specunknown ,所以,做实现的人可以给他0,也可以不管(悬浮)

32@傻孩子  复位后,Systick VAL值硬件上确实是Unknow,但是只要没有另外定义,初始化的时候,就会清零。

Parents
  • 说明:上面的记录未标明发言人, 重新整理如下:  谢谢大家.

    问题1:MTS请教各位:软件能判断ARM系统是上电冷启动复位还是运行中热复位吗?

    问题2: MTS请教:为什么上电冷启动复位时RAM中的内容是随机的? 而当热复位时RAM中的内容却一定保持在热复位前的内容状态? (所说RAM是指复位后未被启动程序覆盖的RAM区)。

    微信群中的讨论摘要:

    1Terry : @MTS有人写过这样的博客blog.csdn.net/.../8950593,你的问题应该和ram,arm的设计有关,至于为何得细看了

    2MTS: @Terry 那篇博客我看到了,它是通过在RAM中设置标志位来判断是上电冷启动复位还是热复位。我觉得有点问题,就像它博客中所说的“上电复位冷启动后内外RAM的内容是随机的",但它却以这个随机不确定的RAM标志位作为判断依据?

    3MTS : 请教:为什么上电冷启动复位时RAM中的内容是随机的? 而当热复位时RAM中的内容却一定保持在热复位前的内容状态? (所说RAM是指复位后未被启动程序覆盖的RAM区)。

    4:  SimonLuk : @MTS 你先指明是ARM的哪类产品?AP还是MCU

    5MTS : @SimonLuk 主要是集成ARM内核的SOC,包括McU。那个问题是否由RAM内存控制器的硬件设计决定? 各个系统都是一样的?

    6MTS :  系统运行中的复位,都是热复位,包括看门狗.

    7:姚家湾: @MTS  在实际应用中,好像没有不对ram进行初始化,而使用其中的内容。纠结这个问题的应用背景是什么呢? 

    8:姚家湾: 无论是热启动还是冷启动。程序开始执行,肯定首先是对ram进行初始化。

    9bunny:  不用纠结热复位还是冷启动,对于reset,要搞清的是,无论通过何种方式触发的reset,作用域在哪?

    10SimonLuk : @MTS  SRAM的原理,参考RS触发器。AP那边的结构我不清楚,MCU这边很简单,图我上次都给你看过了,无论什么形式的系统复位,最后执行的动作都是相同一个(备份域复位例外)。复位后,寄存器恢复复位值,RAM也会在初始化代码的作用下清空。

    11SimonLuk : @MTS  我不明白你纠结复位后保留RAM内容的目的是什么。复位原本的目的,就是让芯片重新开始。如果只是要“从头”开始,写段asm代码,改变寄存器的值就可以了

    12MTS : @SimonLuk 复位后保留RAM内容的目的是“程序重运行,但RAM中指定位置的数据要保留不变,可被重新调用。(RAM中指定位置的数据不能初始化清0)

    13:傻孩子:  @MTS  写代码要假设复位后ram是随机内容,既不是0,也不是原来的内容不变。其他免谈。否则可靠性就是儿戏。

    14:SimonLuk : @傻孩子  对于DRAM,由于复位保持时间和刷新时间等问题,内容可能会丢失。对于SRAM,只要保持不断电、不写,内容就不会变,这是RS触发器的原理。

    15:傻孩子: @SimonLuk  硬件是硬件,软件要可靠,要逻辑确定就,要可移植性强,要偷懒,就必须做这种假设。太依赖具体某一平台的硬件特性,就是给软件工程师自己找麻烦。

    16SimonLuk: @MTS 你的编程思想值得商榷。你是要把地球用原子弹炸掉,然后只留一片诺亚方舟?

    17:姚家湾: @MTS 那就使用带电ram

    18SimonLuk:@MTS  想要检查是否复位,不用检查RAM的内容,那是20年前单片机的做法。现在只要检查Systick就够了,只要复位,Systick必定从0开始。

    19:傻孩子: @SimonLukSystick是否为0貌似不一定的……我要找菜式家族确认下

    20SimonLuk:@傻孩子 SystickVal寄存器,复位后会清零的

    21:傻孩子: @SimonLuk 真的不一定的,有一个掉电保护模式,不太常见,但真的有

    22SimonLuk: @傻孩子  噢,那可能是AP吧,MCU没有

    23:傻孩子: @SimonLukMCU有的,我去确认过的

    24SimonLuk: @傻孩子  MCU只有备份域吧

    25:傻孩子: @SimonLuk  嗯,类似。但醒来的时候和复位大体类似。但部分寄存器可能不为0

    26:傻孩子: @Williamgao  systick的计数值,在复位后是否清零?Cortex-MSysTick寄存器,复位后一定是0么?

    27SimonLuk: @傻孩子 备份域的寄存器是不清零的

    28Williamgao : @傻孩子   systick 文档写的是unkown

    29:傻孩子: @SimonLuk 结论有了,所以,不能依赖这个值。你依赖,出问题,arm只能一脸懵逼。经验结论和design specTRM)你信谁?——ARM说我不管。如果你不相信今天的讨论,请发邮件到support-core@arm.com

    30SimonLuk:@傻孩子  我回去翻手册,有写的。这个值我是确认过的

    31:傻孩子: @SimonLuk  具体核确认过其实是两回事……因为specunknown ,所以,做实现的人可以给他0,也可以不管(悬浮)

    32SimonLuk:@傻孩子  复位后,Systick VAL值硬件上确实是Unknow,但是只要没有另外定义,初始化的时候,就会清零。

    33:黄勤明_Tranmin 磨石 : @傻孩子  @SimonLuk   自己SDRAM设个变量不就好了

    34:傻孩子: @黄勤明_Tranmin 磨石   本质上依赖sram,不靠谱。还是要芯片厂商提供靠谱的reset  reason register

    35: MTS: @傻孩子  赞同你的观点: “写代码要假设复位后ram是随机内容,既不是0,也不是原来的内容不变。其他免谈。否则可靠性就是儿戏。”

    36: MTS: 上电冷复位和热复位都是一样的都要假设复位后ram是随机内容”.  很多人都错误认为: 热复位后未覆盖的ram内容是与热复位前一样的.

Reply
  • 说明:上面的记录未标明发言人, 重新整理如下:  谢谢大家.

    问题1:MTS请教各位:软件能判断ARM系统是上电冷启动复位还是运行中热复位吗?

    问题2: MTS请教:为什么上电冷启动复位时RAM中的内容是随机的? 而当热复位时RAM中的内容却一定保持在热复位前的内容状态? (所说RAM是指复位后未被启动程序覆盖的RAM区)。

    微信群中的讨论摘要:

    1Terry : @MTS有人写过这样的博客blog.csdn.net/.../8950593,你的问题应该和ram,arm的设计有关,至于为何得细看了

    2MTS: @Terry 那篇博客我看到了,它是通过在RAM中设置标志位来判断是上电冷启动复位还是热复位。我觉得有点问题,就像它博客中所说的“上电复位冷启动后内外RAM的内容是随机的",但它却以这个随机不确定的RAM标志位作为判断依据?

    3MTS : 请教:为什么上电冷启动复位时RAM中的内容是随机的? 而当热复位时RAM中的内容却一定保持在热复位前的内容状态? (所说RAM是指复位后未被启动程序覆盖的RAM区)。

    4:  SimonLuk : @MTS 你先指明是ARM的哪类产品?AP还是MCU

    5MTS : @SimonLuk 主要是集成ARM内核的SOC,包括McU。那个问题是否由RAM内存控制器的硬件设计决定? 各个系统都是一样的?

    6MTS :  系统运行中的复位,都是热复位,包括看门狗.

    7:姚家湾: @MTS  在实际应用中,好像没有不对ram进行初始化,而使用其中的内容。纠结这个问题的应用背景是什么呢? 

    8:姚家湾: 无论是热启动还是冷启动。程序开始执行,肯定首先是对ram进行初始化。

    9bunny:  不用纠结热复位还是冷启动,对于reset,要搞清的是,无论通过何种方式触发的reset,作用域在哪?

    10SimonLuk : @MTS  SRAM的原理,参考RS触发器。AP那边的结构我不清楚,MCU这边很简单,图我上次都给你看过了,无论什么形式的系统复位,最后执行的动作都是相同一个(备份域复位例外)。复位后,寄存器恢复复位值,RAM也会在初始化代码的作用下清空。

    11SimonLuk : @MTS  我不明白你纠结复位后保留RAM内容的目的是什么。复位原本的目的,就是让芯片重新开始。如果只是要“从头”开始,写段asm代码,改变寄存器的值就可以了

    12MTS : @SimonLuk 复位后保留RAM内容的目的是“程序重运行,但RAM中指定位置的数据要保留不变,可被重新调用。(RAM中指定位置的数据不能初始化清0)

    13:傻孩子:  @MTS  写代码要假设复位后ram是随机内容,既不是0,也不是原来的内容不变。其他免谈。否则可靠性就是儿戏。

    14:SimonLuk : @傻孩子  对于DRAM,由于复位保持时间和刷新时间等问题,内容可能会丢失。对于SRAM,只要保持不断电、不写,内容就不会变,这是RS触发器的原理。

    15:傻孩子: @SimonLuk  硬件是硬件,软件要可靠,要逻辑确定就,要可移植性强,要偷懒,就必须做这种假设。太依赖具体某一平台的硬件特性,就是给软件工程师自己找麻烦。

    16SimonLuk: @MTS 你的编程思想值得商榷。你是要把地球用原子弹炸掉,然后只留一片诺亚方舟?

    17:姚家湾: @MTS 那就使用带电ram

    18SimonLuk:@MTS  想要检查是否复位,不用检查RAM的内容,那是20年前单片机的做法。现在只要检查Systick就够了,只要复位,Systick必定从0开始。

    19:傻孩子: @SimonLukSystick是否为0貌似不一定的……我要找菜式家族确认下

    20SimonLuk:@傻孩子 SystickVal寄存器,复位后会清零的

    21:傻孩子: @SimonLuk 真的不一定的,有一个掉电保护模式,不太常见,但真的有

    22SimonLuk: @傻孩子  噢,那可能是AP吧,MCU没有

    23:傻孩子: @SimonLukMCU有的,我去确认过的

    24SimonLuk: @傻孩子  MCU只有备份域吧

    25:傻孩子: @SimonLuk  嗯,类似。但醒来的时候和复位大体类似。但部分寄存器可能不为0

    26:傻孩子: @Williamgao  systick的计数值,在复位后是否清零?Cortex-MSysTick寄存器,复位后一定是0么?

    27SimonLuk: @傻孩子 备份域的寄存器是不清零的

    28Williamgao : @傻孩子   systick 文档写的是unkown

    29:傻孩子: @SimonLuk 结论有了,所以,不能依赖这个值。你依赖,出问题,arm只能一脸懵逼。经验结论和design specTRM)你信谁?——ARM说我不管。如果你不相信今天的讨论,请发邮件到support-core@arm.com

    30SimonLuk:@傻孩子  我回去翻手册,有写的。这个值我是确认过的

    31:傻孩子: @SimonLuk  具体核确认过其实是两回事……因为specunknown ,所以,做实现的人可以给他0,也可以不管(悬浮)

    32SimonLuk:@傻孩子  复位后,Systick VAL值硬件上确实是Unknow,但是只要没有另外定义,初始化的时候,就会清零。

    33:黄勤明_Tranmin 磨石 : @傻孩子  @SimonLuk   自己SDRAM设个变量不就好了

    34:傻孩子: @黄勤明_Tranmin 磨石   本质上依赖sram,不靠谱。还是要芯片厂商提供靠谱的reset  reason register

    35: MTS: @傻孩子  赞同你的观点: “写代码要假设复位后ram是随机内容,既不是0,也不是原来的内容不变。其他免谈。否则可靠性就是儿戏。”

    36: MTS: 上电冷复位和热复位都是一样的都要假设复位后ram是随机内容”.  很多人都错误认为: 热复位后未覆盖的ram内容是与热复位前一样的.

Children