新版数采仪开发问题全记录
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();
。。。
结论:关于硬件驱动的时序至关重要;而且这次出错还有个提示,是说发生了伪中断,当时没有多加注意,后来看确实是发生了伪中断。
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();
。。。
结论:关于硬件驱动的时序至关重要;而且这次出错还有个提示,是说发生了伪中断,当时没有多加注意,后来看确实是发生了伪中断。
相关文章推荐
- 开发遇到问题全记录【增量】
- 2012/09/25记录今天开发的几个问题
- 记录IOS开发中遇到的问题以及解决方法
- Android Webview遇到的问题——记新版广告墙开发
- 项目开发问题记录
- Win64 Driver开发问题记录(二)
- 移动端页面使用单位的问题:关于px、百分比、em、rem开发中逐渐转换的问题记录
- Win64 Driver开发问题记录(三)
- Android开发问题记录——“The connection to adb is down...”
- android开发记录1 GridView加载大量本地图片的bitmap的回收问题
- 使用Spring + Struts + Hibernate开发网站 -- 问题记录
- spring cloub 开发中遇到的问题记录
- Android 开发中在各种问题的记录
- Sharepoint开发中问题,记录一下
- Android 内核驱动开发 问题记录(二)
- 记录android ndk配置及开发过程中出现过的问题及解决方法
- web前端开发遇到问题记录
- Eclipse用于Android开发(问题记录)
- android camera开发的一些问题记录
- vs程序开发问题记录(二)