2 mydreamrykui mydreamRykui 于 2014.11.23 23:50 提问

arm7 lpc2292 程序跑飞

最近在lpc2292上开发, 碰到一个奇怪的问题,百思不得其解。对申请的一个数组的size从512到256后,程序竟然跑飞了,由于使用到了以太网,可以看到的现象是以太网连接灯显示一直是亮暗,也就是程序一直在不断重启。单步调试发现,在一个函数返回的时候出的问题,这个函数主要就是实现对一个结构体变量的赋值工作,函数本身没什么问题,感觉是内存出问题,不知道有没有碰到过这样的问题的高手们?求给个思路之类的~多谢多谢

2个回答

zhanglianpin
zhanglianpin   2014.11.24 08:20

系统有操作系统吗?若多任务可考虑任务堆栈溢出问题,若单任务可查看系统初始化时堆栈空间的大小及对齐方式等信息。根据我的经验,先仔细排查程序运行逻辑错误(比如数组越界,空指针等)。再排查堆栈大小及对齐方式。

zhanglianpin
zhanglianpin 回复mydreamRykui: 像BANK的使用 你查看一下datasheet 的EMC相关章节,一般需要初始化的。你看看是否使用之前未初始化好。还有这些一般和系统启动模式有关,还有和链接器链接有关。
3 年多之前 回复
mydreamRykui
mydreamRykui 还有一个问题,把这个数组放到外部RAM上(BANK0),程序跑不起来了,而程序其他的一些大的缓冲区都放在这上面却没有问题。
3 年多之前 回复
mydreamRykui
mydreamRykui 没有操作系统,今天查了一下,是底层一个关中断和开中断导致的错误。。不过海鸥
3 年多之前 回复
tractor_man
tractor_man   2014.11.24 12:11

加我qq306257206,把你的那个函数发给我 我帮你看看

Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!
其他相关推荐
ARM7 的启动
..\keil\arm\..\startup.s是keil提供的通用的启动代码,可以满足大多数的使用要求。Vectors LDR PC, Reset_Addr LDR PC, Undef_Addr LDR PC, SWI_Addr LDR PC, PAbt_Addr LDR PC, DAbt_AddrNOP
教你如何找到导致程序跑飞的指令
调试嵌入式程序时,你是否遇到过程序跑飞最终导致硬件异常中断的问题?遇到这种问题是否感觉比较难定位?不知道问题出在哪里,没有办法跟踪?尤其是当别人的程序踩了自己的内存,那就只能哭了:(
51系列单片机程序跑飞的学习
一、 程序运行跑飞现象: 单片机中的程序计数器(PC)的值出乎我们所需要的,发生了异常的偏移,脱离了原本设定好的程序要执行的位置,进入原定程序以外的区域,例如:程序的空白区、程序以外的空间或者是某种死循环中。 二、 跑飞的影响: 使指令的地址码和操作码发生改变,而PC把操作码当作指令来执行,操作码改变就代表着将执行错误的指令;或者PC的值指向一个不符合逻辑关系的指令或非程序的区域,会造成运行
程序跑飞原因分析
通常我们程序跑飞的原因有以下几个方面:  1,memset/ memcpy使用错误  错误代码  aucCpyLength=NAME_DATA_LENGTH- ((wucCdTextCmdBufferPara.stTagCmdPara.ucPageNo+1)*TAG_PAGE_LENGTH);  memset(pucCpyDestAdress + TAG_PAGE_LENGTH,0x00,
单片机程序跑飞的原因
1.意外中断。 是否打开了某个中断,但是没有响应和清除中端标志,导致程序一直进入中断,造成死机假象。 2. 中断变量处理不妥。 若定义某些会在中断中修改的全局变量,这时要注意两个问题:首先为了防止编译器优化中断变量,要在这些变量定义时前加 volatile,其次在主循环中读取中断变量前应该首先关闭全局中断,防止读到一半被中断给修改了,读完之后再打开全局中断;否则出现造成数据乱套。
嵌入式调试ARM程序跑飞现象的跟踪
最近在调试2410的过程中,经常出现程序跑飞的现象,跟踪进行后发现。。。所以决定把它记录下来。 现象: 调试用的是技创ARM仿真器(兼容multi-ICE)和ADS1.2,板子外扩NandFLASH(装有Bootload)和SDRAM。当将程序烧到FLASH运行时会出现无规律的死机。用仿真器仿真时情况是这样:当CPU复位后,第一次装载程序执行时,情况与烧到FLASH运行时一样。但如果将运行的程
STM32+ucosll程序跑飞问题解决办法
STM32单片机移植ucosll程序,运行几个小时之后跑飞。 ucsll创建4个任务,OSQPend()消息队列任务,1s定时任务,2s定时任务,按键扫描任务。其中OSQPend()消息队列任务优先级最高,用于接收各中断消息,由于消息队列在没有消息时会将任务挂起,所有没有添加延时函数。 一开始怀疑堆栈溢出,将单片机栈区扩大,各任务堆栈也扩大,仍然无效。 多次测试发现,程序跑飞后OSQPend
STM32 jtag调试程序时程序跑飞
问题描述:在使用jtag对某软件进行调试的时候,
消除单片机复位及程序跑飞影响的措施
提出解决单片机复位及程序跑飞影响的措施
看门狗防止程序跑飞
void main(){ init_system(); ... enable_whatchdog();...while(1){ ...feed_dog();}}程序跑飞掉的话,就不会喂狗,引起复位。