您的位置:首页 > 其它

新版数采仪开发问题全记录

2008-01-17 15:28 239 查看
*************************************************************

2008-01-16

* 下载后,第一次运行(在线跑),马上出现停机现象。

最后修改了demo.lnk中的内存分配,调整以下两个:

__HEAP_END = __SP_INIT-0x8000;

STKTOP = ADDR(.bss)+SIZEOF(.bss)+0x8000;

就再不出现停机现象了

* 在线跑时没有任何问题,但是烧写后跑,则处于停止状态。

因为程序中使用了文件系统,把文件系统注掉后问题解决。

调试后发现,由于文件系统使用了动态内存分配(malloc()函数),导致了该问题。

把内存分配函数修改为nucleus自己的函数后(NU_Allocate_Memory()),问题彻底解决。

2008-01-26

* 程序最近一直出现这样的问题:

在线跑时一切正常,但是烧写后跑,不能boot。

最后找的的解决办法很奇怪,我现在也不明白其中的道理。

原先的链接语句为:

dld -m6 -lc -o main.elf -tMCF52*FS ..\obj\int_5271.o ..\obj\crt0.o ..\obj\cache.o ..\obj\init.o

现在的链接语句为:

dld -m6 -lc -o main.elf -tMCF52*FS ..\obj\crt0.o ..\obj\cache.o ..\obj\init.o ..\obj\int_5271.o

2008-02-02

这两天又遇到了一个死机的问题,搞得我非常郁闷。

几经周折终于找到了问题所在:

原先的代码是这样的:

NU_HISR HISR_Control_Key;

#define HISR_Key_Stack_Size 10*1024

char HISR_Key_Stack[HISR_Key_Stack_Size];

NU_HISR HISR_Control_SerialPort;

#define HISR_SerialPort_Stack_Size 10*1024

char HISR_SerialPort_Stack[HISR_SerialPort_Stack_Size];

也就是说给两个高级中断分配了比较大的栈空间;一切运行正常。

但是,感觉到栈空间太大了,于是调整为这样

NU_HISR HISR_Control_Key;

#define HISR_Key_Stack_Size 1024

char HISR_Key_Stack[HISR_Key_Stack_Size];

NU_HISR HISR_Control_SerialPort;

#define HISR_SerialPort_Stack_Size 1024

char HISR_SerialPort_Stack[HISR_SerialPort_Stack_Size];

结果崩溃。

原因是在高级中断处理函数中确实用到了超过1024的变量。

经验教训:

在牵扯到内存空间分配的地方一定要慎重。

2008-08-05

程序在启动时,就会死机。而导致死机的原因居然是我在一个很安全的地方增加了一行代码。

看起来,似乎是代码段因为增加了这一行而变大,因此和某些段(例如堆栈段)产生了冲突 。

但是,继续增加了一些代码,该死机又不发生了。 很蹊跷。

仔细检查,还是找到一些问题。死机的地方在这里

。。。

enable_I2C_interrupt();

InitializeI2CBUS();

。。。

上述代码中初始化IIC模块在中断使能之后,因此在这之间的一段时间IIC模块的状态就很不确定,是不是这个原因导致的死机?

于是把代码改为下图,然后问题解决。

。。。

InitializeI2CBUS();

enable_I2C_interrupt();

。。。

结论:关于硬件驱动的时序至关重要;而且这次出错还有个提示,是说发生了伪中断,当时没有多加注意,后来看确实是发生了伪中断。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: