分类: 嵌入式
2010-07-16 18:41:43
正在改u-boot的代码,发现了奇怪的问题
1,步骤:我在代码中加入几条printf语句后,编译并烧写到板子上后,重启进入boot的命令行
现象:在命令行下任意输入某个命令后板子就挂掉了,串口上没有任何显示
修改:如果将新加入的这几行printf语句注释掉后,就恢复正常了
2,步骤:在函数内调用某个函数后,此函数中也有新加入的printf语句,编译并烧写到板子上后,重启进入boot的命令行
现象:同上
修改:将该函数注释掉后,恢复正常
问题已经解决,多谢木易大哥的提点,虽然没说到要害,但却启发了我,在第一阶段从onenand flash复制代码的时候,没有复制完全,原来的代码只复制了256K,而现在我的代码已经超过了256K,程序要是调用了这256K之后的代码,但内存中没有代码,那肯定就会造成楼上几位说的野指针。
代码如下:
|
推算如果1 page = 2K, 1 block = 64 pages, 那么这里只复制了256K,将以上代码中改为block < 3复制3block,编译下载之后,就一切OK了。
这里还有个疑问:
base += (2048 / sizeof(uint));这里为什么还要除以sizeof(uint)呢?除了之后base每次只增加512个字节,照这么算,不是只复制了64K吗?不知道是不是我想错了呢,有弄过onenand的朋友请解答下
因为base是uint型的指针。
它每次加1相当于char型指针加4
原贴请看我在CSDN上发的: