裸奔程序为何会跑飞呐,请看究竟
2010-10-22 16:36
225 查看
经常在论坛里面,看到一些人说“程序跑飞了!”。以前我真不太理解这个词语,刚才看了个帖子,觉得有点收获,就写下来,希望对各位同仁有所帮助, 所谓“程序跑飞了”,就是程序找不到正确的地址去寻找应该执行的指令,这通常是在中断跳转,MMU设置相关。下面这个帖子就是这个原因。
http://topic.csdn.net/u/20090517/14/4664821b-b0b5-4142-bbf7-5a38e630e18a.html?seed=1566368328
引用 13 楼 xajhuang 的回复:
这个肯定不是,ARM中断产生后,会自动跳转到对应的中断地址,比如复位时跳到0,ISR 跳到 ISR 异常入口,当中断产生时,代码不是直接跳到中断程序中,而是进行了一次类似复位的操作,然后根据对应的中断异常再执行处理。
所以一般仿真器是不会自动找到中断程序的,一般的做法是在启动代码初始化完成,并且使能中断前,用MMU把你代码的ResetHandle地址映射到0地址,这样仿真器就能找到中断函数入口而不会跑飞。
还有一种可能就…
xajhuang 牛人说的很对!!!一般调试器不支持中断跳转的,可以通过MMU处理后支持调试器。
引用 18 楼 CBEMA 的回复:
搞定了,呵呵。每次弄明白了以后,都觉得自己很弱。
的确是mmu的问题。我把程序应映射到0x30000000的位置执行的话,必须在mmu中做一些处理,使得程序在取指的时候,能到0x30000000的位置开始。实际上,我以前改来改去程序经常跳到0x8或是0x4的位置,我就应该意识到内存映射出了问题。
现在我把程序放在0x0的位置开始跑,就ok了。这里不用启动mmu管理。
不过对于mmu的了解还是太少了,还得练啊,学武无止境哦,学学周伯通!做个武痴又如何?
http://topic.csdn.net/u/20090517/14/4664821b-b0b5-4142-bbf7-5a38e630e18a.html?seed=1566368328
引用 13 楼 xajhuang 的回复:
这个肯定不是,ARM中断产生后,会自动跳转到对应的中断地址,比如复位时跳到0,ISR 跳到 ISR 异常入口,当中断产生时,代码不是直接跳到中断程序中,而是进行了一次类似复位的操作,然后根据对应的中断异常再执行处理。
所以一般仿真器是不会自动找到中断程序的,一般的做法是在启动代码初始化完成,并且使能中断前,用MMU把你代码的ResetHandle地址映射到0地址,这样仿真器就能找到中断函数入口而不会跑飞。
还有一种可能就…
xajhuang 牛人说的很对!!!一般调试器不支持中断跳转的,可以通过MMU处理后支持调试器。
引用 18 楼 CBEMA 的回复:
搞定了,呵呵。每次弄明白了以后,都觉得自己很弱。
的确是mmu的问题。我把程序应映射到0x30000000的位置执行的话,必须在mmu中做一些处理,使得程序在取指的时候,能到0x30000000的位置开始。实际上,我以前改来改去程序经常跳到0x8或是0x4的位置,我就应该意识到内存映射出了问题。
现在我把程序放在0x0的位置开始跑,就ok了。这里不用启动mmu管理。
不过对于mmu的了解还是太少了,还得练啊,学武无止境哦,学学周伯通!做个武痴又如何?
相关文章推荐
- 今天突然针对网站程序逻辑为何有两个模板寻个究竟
- 为何我在 asp 程序内使用 msgbox,程序出错说没有权限收藏
- 第一个裸奔程序——跑马灯
- 为何不能用j2me开发CDC程序?
- 究竟为何诺基亚会开发Android手机?
- 我们为何采用安装包方式而不是编译或二进制方式安装新程序/软件呢?
- 写一个每秒接收 100 万数据包的程序究竟有多难?
- 64位系统下,一个32位的程序究竟可以申请到多少内存,4GB还是更多?
- Android Launcher研究(二)-----------Launcher为何物,究竟是干什么的
- 程序执行效率为何如此低下呢?
- 只能把YouTube当主场的波士顿动力,究竟为何被隔绝在现实之外?
- Jlink+RVDS单步调试 ARM11(S3C6410)裸奔程序
- 第一个裸奔程序——跑马灯
- linux下,一个运行中的程序,究竟占用了多少内存?
- 为何多线程就能提高Java程序的执行效率
- 究竟为何诺基亚会开发Android手机?
- 在Linux上,编写一个每秒接收100万UDP数据包的程序究竟有多难
- 政务领域中小程序为何开始独领风骚?
- TQ2440裸奔程序建立工程进行仿真过程及注意事项
- 独家报道:众说纷纭 云安全究竟为何物? 推荐