可以认为应用程序总是从复位异常处理程序开始执行的,因此复位异常处理程序不需要返回。
请问这个如何理解?
如果不需要返回,那复位异常处理程序结束后,pc寄存器里面该存放的是什么呢?
15 个解决方案
#1
复位异常就是复位,当然没有什么返回一说了。
#2
应用程序总是从复位异常处理程序开始执行的,
这句话是不是理解为,系统加电启动进入idel task后,第一个应用程序从复位异常处理程序开始执行???不可能每个应用程序都从复位异常处理程序开始执行啊!!!!
我的理解对吗?麻烦解释一些,谢谢~
这句话是不是理解为,系统加电启动进入idel task后,第一个应用程序从复位异常处理程序开始执行???不可能每个应用程序都从复位异常处理程序开始执行啊!!!!
我的理解对吗?麻烦解释一些,谢谢~
#3
误导小朋友啊!
当它是放P好了。
当它是放P好了。
#4
应该理解成,复位后执行的第一条指令是从异常处理程序开始的,这里所说的应用程序,是包扩OS等任何底层的东西,因为OS本身也是应用程序。
#5
还是不太能理解。。。
最直接的,复位异常处理程序结束后,pc寄存器里面该存放的是什么?
要是这样跟我说了我还理解不了,我就真决定当它放p了~
呵呵~~
谢谢~
最直接的,复位异常处理程序结束后,pc寄存器里面该存放的是什么?
要是这样跟我说了我还理解不了,我就真决定当它放p了~
呵呵~~
谢谢~
#6
我本人认为这句话没有任何的语义、语法、逻辑上的错误,如果和上下文结合起来的话,它应该说的正是一个事实。
不过“复位异常处理程序结束后,pc寄存器里面该存放的是什么?”这个问题无法回答,因为根据系统方案的不同这个答案是不确定的。你只要记住一个事实,复位异常处理程序不需要返回,也不能返回。
#7
从头开始,pc中放的就是从头开始的地址.
#8
应该是从复位处,进入初始化,然后就运行你自己的程序了。
当然不用保存PC了,没用
当然不用保存PC了,没用
#9
感谢各位大哥的回答,我已经明白了!
但是又遇到另一个问题了。。。
分为两个部分的bootloader中,stage1中可以将stage2的镜像拷贝到RAM中执行。看到一个文档说可以拷贝到地址最高的RAM中,但是系统的内存映像不是在stage2中才检测的吗?这样的话,stage1如何保证它从flash拷贝到的目的地址一定是真实存在的呢?
但是又遇到另一个问题了。。。
分为两个部分的bootloader中,stage1中可以将stage2的镜像拷贝到RAM中执行。看到一个文档说可以拷贝到地址最高的RAM中,但是系统的内存映像不是在stage2中才检测的吗?这样的话,stage1如何保证它从flash拷贝到的目的地址一定是真实存在的呢?
#10
资料上叙述了测试一个内存空间是否真的存在的方法,其具体步骤如下:
1. 先保存 memory page 一开始两个字的内容。
2. 向这两个字中写入任意的数字。比如:向第一个字写入 0x55,第 2 个字写入 0xaa。
3. 然后,立即将这两个字的内容读回。显然,我们读到的内容应该分别是 0x55 和 0xaa。如果不是,则说明这个 memory page 所占据的地址范围不是一段有效的 RAM 空间。
4. 再向这两个字中写入任意的数字。比如:向第一个字写入 0xaa,第 2 个字中写入 0x55。
5. 然后,立即将这两个字的内容立即读回。显然,我们读到的内容应该分别是 0xaa 和 0x55。如果不是,则说明这个 memory page 所占据的地址范围不是一段有效的 RAM 空间。
6. 恢复这两个字的原始内容。测试完毕。
我的疑问是,如果写的地址在物理上不存在真实空间,不会出错吗??
谢谢~
1. 先保存 memory page 一开始两个字的内容。
2. 向这两个字中写入任意的数字。比如:向第一个字写入 0x55,第 2 个字写入 0xaa。
3. 然后,立即将这两个字的内容读回。显然,我们读到的内容应该分别是 0x55 和 0xaa。如果不是,则说明这个 memory page 所占据的地址范围不是一段有效的 RAM 空间。
4. 再向这两个字中写入任意的数字。比如:向第一个字写入 0xaa,第 2 个字中写入 0x55。
5. 然后,立即将这两个字的内容立即读回。显然,我们读到的内容应该分别是 0xaa 和 0x55。如果不是,则说明这个 memory page 所占据的地址范围不是一段有效的 RAM 空间。
6. 恢复这两个字的原始内容。测试完毕。
我的疑问是,如果写的地址在物理上不存在真实空间,不会出错吗??
谢谢~
#11
我自己想了想,是不是这样的??
bootloader访问一个不存在的地址是没有问题的,不就是一些电平什么的,不存在就拉倒呗。
在平时C语言的编写中访问不存在的地址会出问题,其实是因为操作系统已经将可用的RAM空间检测过了,C语言程序如果运行在操作系统之上,这时候C程序访问一个不存在的地址空间(保护模式)时,操作系统就发出非法的信息,导致c程序运行失败。相反如果运行在实模式下是不会因为这点导致运行失败的,不过这时候访问得到的数据是无效的,c程序也无法顺利运行就是了。
是这样的嘛?谢谢~
bootloader访问一个不存在的地址是没有问题的,不就是一些电平什么的,不存在就拉倒呗。
在平时C语言的编写中访问不存在的地址会出问题,其实是因为操作系统已经将可用的RAM空间检测过了,C语言程序如果运行在操作系统之上,这时候C程序访问一个不存在的地址空间(保护模式)时,操作系统就发出非法的信息,导致c程序运行失败。相反如果运行在实模式下是不会因为这点导致运行失败的,不过这时候访问得到的数据是无效的,c程序也无法顺利运行就是了。
是这样的嘛?谢谢~
#12
没遇到过这种情况.
#13
#14
学习了
#15
上海银洋电子有限公司
专营SAMSUNG&ST--ARM芯片批发,工程师送样
公司采购芯片的找我
专营:三星ARM-32微处理器ARM7-ARM9-ARM11 三星SDRAM FLASH储存器 ST32位处理器-STM32F103系列
业务代表:张明
QQ:1569164539
MB:15900733302(上海移动)
专营SAMSUNG&ST--ARM芯片批发,工程师送样
公司采购芯片的找我
专营:三星ARM-32微处理器ARM7-ARM9-ARM11 三星SDRAM FLASH储存器 ST32位处理器-STM32F103系列
业务代表:张明
QQ:1569164539
MB:15900733302(上海移动)
#1
复位异常就是复位,当然没有什么返回一说了。
#2
应用程序总是从复位异常处理程序开始执行的,
这句话是不是理解为,系统加电启动进入idel task后,第一个应用程序从复位异常处理程序开始执行???不可能每个应用程序都从复位异常处理程序开始执行啊!!!!
我的理解对吗?麻烦解释一些,谢谢~
这句话是不是理解为,系统加电启动进入idel task后,第一个应用程序从复位异常处理程序开始执行???不可能每个应用程序都从复位异常处理程序开始执行啊!!!!
我的理解对吗?麻烦解释一些,谢谢~
#3
误导小朋友啊!
当它是放P好了。
当它是放P好了。
#4
应该理解成,复位后执行的第一条指令是从异常处理程序开始的,这里所说的应用程序,是包扩OS等任何底层的东西,因为OS本身也是应用程序。
#5
还是不太能理解。。。
最直接的,复位异常处理程序结束后,pc寄存器里面该存放的是什么?
要是这样跟我说了我还理解不了,我就真决定当它放p了~
呵呵~~
谢谢~
最直接的,复位异常处理程序结束后,pc寄存器里面该存放的是什么?
要是这样跟我说了我还理解不了,我就真决定当它放p了~
呵呵~~
谢谢~
#6
我本人认为这句话没有任何的语义、语法、逻辑上的错误,如果和上下文结合起来的话,它应该说的正是一个事实。
不过“复位异常处理程序结束后,pc寄存器里面该存放的是什么?”这个问题无法回答,因为根据系统方案的不同这个答案是不确定的。你只要记住一个事实,复位异常处理程序不需要返回,也不能返回。
#7
从头开始,pc中放的就是从头开始的地址.
#8
应该是从复位处,进入初始化,然后就运行你自己的程序了。
当然不用保存PC了,没用
当然不用保存PC了,没用
#9
感谢各位大哥的回答,我已经明白了!
但是又遇到另一个问题了。。。
分为两个部分的bootloader中,stage1中可以将stage2的镜像拷贝到RAM中执行。看到一个文档说可以拷贝到地址最高的RAM中,但是系统的内存映像不是在stage2中才检测的吗?这样的话,stage1如何保证它从flash拷贝到的目的地址一定是真实存在的呢?
但是又遇到另一个问题了。。。
分为两个部分的bootloader中,stage1中可以将stage2的镜像拷贝到RAM中执行。看到一个文档说可以拷贝到地址最高的RAM中,但是系统的内存映像不是在stage2中才检测的吗?这样的话,stage1如何保证它从flash拷贝到的目的地址一定是真实存在的呢?
#10
资料上叙述了测试一个内存空间是否真的存在的方法,其具体步骤如下:
1. 先保存 memory page 一开始两个字的内容。
2. 向这两个字中写入任意的数字。比如:向第一个字写入 0x55,第 2 个字写入 0xaa。
3. 然后,立即将这两个字的内容读回。显然,我们读到的内容应该分别是 0x55 和 0xaa。如果不是,则说明这个 memory page 所占据的地址范围不是一段有效的 RAM 空间。
4. 再向这两个字中写入任意的数字。比如:向第一个字写入 0xaa,第 2 个字中写入 0x55。
5. 然后,立即将这两个字的内容立即读回。显然,我们读到的内容应该分别是 0xaa 和 0x55。如果不是,则说明这个 memory page 所占据的地址范围不是一段有效的 RAM 空间。
6. 恢复这两个字的原始内容。测试完毕。
我的疑问是,如果写的地址在物理上不存在真实空间,不会出错吗??
谢谢~
1. 先保存 memory page 一开始两个字的内容。
2. 向这两个字中写入任意的数字。比如:向第一个字写入 0x55,第 2 个字写入 0xaa。
3. 然后,立即将这两个字的内容读回。显然,我们读到的内容应该分别是 0x55 和 0xaa。如果不是,则说明这个 memory page 所占据的地址范围不是一段有效的 RAM 空间。
4. 再向这两个字中写入任意的数字。比如:向第一个字写入 0xaa,第 2 个字中写入 0x55。
5. 然后,立即将这两个字的内容立即读回。显然,我们读到的内容应该分别是 0xaa 和 0x55。如果不是,则说明这个 memory page 所占据的地址范围不是一段有效的 RAM 空间。
6. 恢复这两个字的原始内容。测试完毕。
我的疑问是,如果写的地址在物理上不存在真实空间,不会出错吗??
谢谢~
#11
我自己想了想,是不是这样的??
bootloader访问一个不存在的地址是没有问题的,不就是一些电平什么的,不存在就拉倒呗。
在平时C语言的编写中访问不存在的地址会出问题,其实是因为操作系统已经将可用的RAM空间检测过了,C语言程序如果运行在操作系统之上,这时候C程序访问一个不存在的地址空间(保护模式)时,操作系统就发出非法的信息,导致c程序运行失败。相反如果运行在实模式下是不会因为这点导致运行失败的,不过这时候访问得到的数据是无效的,c程序也无法顺利运行就是了。
是这样的嘛?谢谢~
bootloader访问一个不存在的地址是没有问题的,不就是一些电平什么的,不存在就拉倒呗。
在平时C语言的编写中访问不存在的地址会出问题,其实是因为操作系统已经将可用的RAM空间检测过了,C语言程序如果运行在操作系统之上,这时候C程序访问一个不存在的地址空间(保护模式)时,操作系统就发出非法的信息,导致c程序运行失败。相反如果运行在实模式下是不会因为这点导致运行失败的,不过这时候访问得到的数据是无效的,c程序也无法顺利运行就是了。
是这样的嘛?谢谢~
#12
没遇到过这种情况.
#13
#14
学习了
#15
上海银洋电子有限公司
专营SAMSUNG&ST--ARM芯片批发,工程师送样
公司采购芯片的找我
专营:三星ARM-32微处理器ARM7-ARM9-ARM11 三星SDRAM FLASH储存器 ST32位处理器-STM32F103系列
业务代表:张明
QQ:1569164539
MB:15900733302(上海移动)
专营SAMSUNG&ST--ARM芯片批发,工程师送样
公司采购芯片的找我
专营:三星ARM-32微处理器ARM7-ARM9-ARM11 三星SDRAM FLASH储存器 ST32位处理器-STM32F103系列
业务代表:张明
QQ:1569164539
MB:15900733302(上海移动)