core is locked-up

[复制链接]
7369|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
 楼主| xddl 发表于 2010-6-18 09:38 | 显示全部楼层
在线等待中........
期待呀:(
ST_ARM 发表于 2010-6-18 09:38 | 显示全部楼层
你程序的问题
 楼主| xddl 发表于 2010-6-18 09:43 | 显示全部楼层
什么问题?能不能具体一些?不行的话,我把程序发给你
谢谢
 楼主| xddl 发表于 2010-6-18 09:45 | 显示全部楼层
我发现,出现问题的程序有个特点,使用SWITCH语句,带有很多的CASE
 楼主| xddl 发表于 2010-6-18 09:49 | 显示全部楼层
能提示一下是哪一类问题也好呀,
比如:是栈溢出?内存越界?还是其他的运行时刻问题?

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

谢谢谢谢
 楼主| xddl 发表于 2010-6-18 10:39 | 显示全部楼层
没人知道吗?:'(
 楼主| xddl 发表于 2010-6-19 14:30 | 显示全部楼层
终于有人出来了。不管怎么样,先谢谢了。
实际上,早些时候,也有个项目,用STM32F101C8,编译器也是IAR 5.4,也出现了这个现象,原来以为是仿真的问题,就去掉仿真器,全速运行,发现还是会死机,偶然把编译选项从low编程medium,就可以了。

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

实在是不知道什么原因。

我决定换编译器试试了
司徒老鹰 发表于 2010-6-20 15:30 | 显示全部楼层
我发现,出现问题的程序有个特点,使用SWITCH语句,带有很多的CASE
xddl 发表于 2010-6-18 09:45
我就是经历过
司徒老鹰 发表于 2010-6-20 15:30 | 显示全部楼层
有时都说不出为啥
 楼主| xddl 发表于 2010-6-20 16:41 | 显示全部楼层
:D
看来我不孤立呀

还在继续等待中,看看那位高人有办法
ST_ARM 发表于 2010-6-20 16:57 | 显示全部楼层
你只提供这这一点点信息,根本不可能解决你的问题,你要提供你的项目的配置信息,你的代码相关操作:就是说你在程序中执行了哪些操作。这样综合所有的信息才能解决你的问题。

如果你什么也不提供,在这里叫,白叫!
vigia 发表于 2010-6-20 21:53 | 显示全部楼层
switch case用的多的时候,我也碰到过问题的。

不过代码全变成ffff了有点夸张,没碰到过,还是仔细调一调吧。
yybj 发表于 2010-6-21 10:46 | 显示全部楼层
SWITH语句我也有过用过很多的时候呀,没出过错误
 楼主| xddl 发表于 2010-6-21 12:48 | 显示全部楼层
配置信息,不是列在上面了吗?程序,太长了,不好列出来。
至于操作,基本上就是串口:从串口收到数据,根据数据进行判断,然后再通过串口返回另一组数据。所有的数据都在内存中,应该说,基本上不涉及硬件相关的(除了串口)
香水城 发表于 2010-6-21 13:49 | 显示全部楼层
出现这种事情的可能性太多,没有人能够只根据配置信息就能知道是什么问题。

LZ最好还是寻着Hardfault这个线索倒查一下,看看是因为什么原因进入了HardFault_Handler,然后再查找为什么会出现这样的原因。
 楼主| xddl 发表于 2010-6-22 14:27 | 显示全部楼层
似乎找到原因了。
为了减少内存占用,在程序中用了:#pragma pack(1)

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

另外,以前没用过KEIL,这次试用了一下,感觉KEIL有一点比IAR好,就是在仿真运行的时候,可以增加查看变量,如果运行中变量发生变化,不用设置断点,变化自己就在WATCH窗口可以看到,很好。
 楼主| xddl 发表于 2010-6-22 14:28 | 显示全部楼层
是不是这个原因,还要继续验证,谢谢诸位
礦ision 发表于 2010-9-16 17:59 | 显示全部楼层
可能是icf文件里的堆栈设得太小
无冕之王 发表于 2010-9-16 18:11 | 显示全部楼层
这个问题难道楼主三个月都没有解决??
您需要登录后才可以回帖 登录 | 注册

本版积分规则

30

主题

91

帖子

1

粉丝
快速回复 在线客服 返回列表 返回顶部