打印

core is locked-up

[复制链接]
6073|19
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
xddl|  楼主 | 2010-6-18 09:24 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
具体情况为:
1、我的ICF文件如下:
define symbol __ICFEDIT_intvec_start__ = 0x08000000;
define symbol __ICFEDIT_region_ROM_start__ = 0x08000000 ;
define symbol __ICFEDIT_region_ROM_end__   = 0x0807FFFF;
define symbol __ICFEDIT_region_RAM_start__ = 0x20000000;
define symbol __ICFEDIT_region_RAM_end__   = 0x20002800;

define symbol __ICFEDIT_size_cstack__ = 0x800;
define symbol __ICFEDIT_size_heap__   = 0x100;

define memory mem with size = 4G;
define region ROM_region   = mem:[from __ICFEDIT_region_ROM_start__   to __ICFEDIT_region_ROM_end__];
define region RAM_region   = mem:[from __ICFEDIT_region_RAM_start__   to __ICFEDIT_region_RAM_end__];
define block CSTACK    with alignment = 8, size = __ICFEDIT_size_cstack__   { };
define block HEAP      with alignment = 8, size = __ICFEDIT_size_heap__     { };

initialize by copy { readwrite };
do not initialize  { section .noinit };

place at address mem:__ICFEDIT_intvec_start__ { readonly section .intvec };

place in ROM_region   { readonly };
place in RAM_region   { readwrite,
                        block CSTACK, block HEAP };

似乎不应该有地址错误。
2、使用JLINK进行仿真时,经常进入HardFault_Handler,debug窗口出现core is locked-up,然后,只有重新下载,才可以继续仿真。
3、但是,发现汇编栏的汇编代码全部变成0xFFFFFFFF。
4、使用JLINK-RAM查看8000000地址的数据,发现从8001400到8001800,全部是0XFF。也就是说,这部分代码损坏了?

换了JLINK的驱动,不灵。编译器是IAR 5.4

1.JPG (385.1 KB )

1.JPG
沙发
xddl|  楼主 | 2010-6-18 09:38 | 只看该作者
在线等待中........
期待呀:(

使用特权

评论回复
板凳
ST_ARM| | 2010-6-18 09:38 | 只看该作者
你程序的问题

使用特权

评论回复
地板
xddl|  楼主 | 2010-6-18 09:43 | 只看该作者
什么问题?能不能具体一些?不行的话,我把程序发给你
谢谢

使用特权

评论回复
5
xddl|  楼主 | 2010-6-18 09:45 | 只看该作者
我发现,出现问题的程序有个特点,使用SWITCH语句,带有很多的CASE

使用特权

评论回复
6
xddl|  楼主 | 2010-6-18 09:49 | 只看该作者
能提示一下是哪一类问题也好呀,
比如:是栈溢出?内存越界?还是其他的运行时刻问题?

编译的时候,没问题,甚至连警告都几乎没有

谢谢谢谢

使用特权

评论回复
7
xddl|  楼主 | 2010-6-18 10:39 | 只看该作者
没人知道吗?:'(

使用特权

评论回复
8
xddl|  楼主 | 2010-6-19 14:30 | 只看该作者
终于有人出来了。不管怎么样,先谢谢了。
实际上,早些时候,也有个项目,用STM32F101C8,编译器也是IAR 5.4,也出现了这个现象,原来以为是仿真的问题,就去掉仿真器,全速运行,发现还是会死机,偶然把编译选项从low编程medium,就可以了。

这两个程序的因为处理的是通讯状态,主要特点就是有大量的SWITCH,而且相应的CASE也比较多。出问题的地方,就是某一个CASE,一进去,就变成全FF了,再往下运行,就进入“严重错误”中断,死掉了。

实在是不知道什么原因。

我决定换编译器试试了

使用特权

评论回复
9
司徒老鹰| | 2010-6-20 15:30 | 只看该作者
我发现,出现问题的程序有个特点,使用SWITCH语句,带有很多的CASE
xddl 发表于 2010-6-18 09:45
我就是经历过

使用特权

评论回复
10
司徒老鹰| | 2010-6-20 15:30 | 只看该作者
有时都说不出为啥

使用特权

评论回复
11
xddl|  楼主 | 2010-6-20 16:41 | 只看该作者
:D
看来我不孤立呀

还在继续等待中,看看那位高人有办法

使用特权

评论回复
12
ST_ARM| | 2010-6-20 16:57 | 只看该作者
你只提供这这一点点信息,根本不可能解决你的问题,你要提供你的项目的配置信息,你的代码相关操作:就是说你在程序中执行了哪些操作。这样综合所有的信息才能解决你的问题。

如果你什么也不提供,在这里叫,白叫!

使用特权

评论回复
13
vigia| | 2010-6-20 21:53 | 只看该作者
switch case用的多的时候,我也碰到过问题的。

不过代码全变成ffff了有点夸张,没碰到过,还是仔细调一调吧。

使用特权

评论回复
14
yybj| | 2010-6-21 10:46 | 只看该作者
SWITH语句我也有过用过很多的时候呀,没出过错误

使用特权

评论回复
15
xddl|  楼主 | 2010-6-21 12:48 | 只看该作者
配置信息,不是列在上面了吗?程序,太长了,不好列出来。
至于操作,基本上就是串口:从串口收到数据,根据数据进行判断,然后再通过串口返回另一组数据。所有的数据都在内存中,应该说,基本上不涉及硬件相关的(除了串口)

使用特权

评论回复
16
香水城| | 2010-6-21 13:49 | 只看该作者
出现这种事情的可能性太多,没有人能够只根据配置信息就能知道是什么问题。

LZ最好还是寻着Hardfault这个线索倒查一下,看看是因为什么原因进入了HardFault_Handler,然后再查找为什么会出现这样的原因。

使用特权

评论回复
17
xddl|  楼主 | 2010-6-22 14:27 | 只看该作者
似乎找到原因了。
为了减少内存占用,在程序中用了:#pragma pack(1)

可能是用的地方不是太合适造成的。

另外,以前没用过KEIL,这次试用了一下,感觉KEIL有一点比IAR好,就是在仿真运行的时候,可以增加查看变量,如果运行中变量发生变化,不用设置断点,变化自己就在WATCH窗口可以看到,很好。

使用特权

评论回复
18
xddl|  楼主 | 2010-6-22 14:28 | 只看该作者
是不是这个原因,还要继续验证,谢谢诸位

使用特权

评论回复
19
礦ision| | 2010-9-16 17:59 | 只看该作者
可能是icf文件里的堆栈设得太小

使用特权

评论回复
20
无冕之王| | 2010-9-16 18:11 | 只看该作者
这个问题难道楼主三个月都没有解决??

使用特权

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

本版积分规则

30

主题

89

帖子

1

粉丝