LPC2148读写SD卡时无法解决的问题
大家好,读写SD卡时,能正确读写,可是LCD却不能正常显示,怀疑可能是堆栈溢出。先上源程序吧。/*SD卡读写测试*/
#include"../wav_player/fatfs/diskio.h"
#include"../wav_player/TFT/TFT018.h"
#include<stdio.h>
int main(void)
{
BYTE i,src,tar;
BacklightOn(); //点亮LCD背光灯
LCD_Init(); //LCD初始化
LCD_Clear_Screen(Blue); //清屏,以蓝色为背景
LCD_PutString(0,0,"LCD Ok",Yellow,Blue); //输出LCD OK
//while(1); //测试点1
for(i=0;i<40;i++) src=48+i; //向src数组填入数据
LCD_PutString(0,16,src,Yellow,Blue); //将src中的内容输出到LCD屏背景蓝色,字体黄色
//while(1); //测试点2
i=disk_initialize(0); //SD卡初始化
if(i==0) LCD_PutString(80,0,"SD OK",Yellow,Blue); //返回0,初始化成功,输出 SD OK
else LCD_PutString(80,0,"SD NO",Yellow,Blue); //非0,初始化失败,输出 SD
//while(1); //测试点3
i=disk_write(0,src,8,1); //将src中的内容写入SD卡第8扇区
if(i==0) LCD_PutString(0,48,"WT OK",Yellow,Blue); //返回0,写入成功 ,输出WT OK
else LCD_PutString(0,48,"WT NO",Yellow,Blue); //非0,写入失败,输出WT NO
//while(1); //测试点4
i=disk_read(0,tar,8,1); //将刚才写入第8扇区的src的内容读出到tar数组 问题出在这一步
if(i==0) LCD_PutString(80,48,"RT OK",Yellow,Blue); //返回0,读出成功,输出RT OK
else LCD_PutString(80,48,"RT NO",Yellow,Blue);//非0,读出失败,输出RT NO
//while(1); //测试点5
LCD_PutString(0,64,tar,Cyan,Blue); //将读出的数据输出到LCD屏
while(1);
};
运行之后,LCD屏是空白的,但是如果不动数组tar,则这个程序是正常的。
经过我自己的测试,在测试点4是正常,到测试点5就出现LCD空白。
如果将上面程序中的所有tar 改成 src,则程序运行正常,SD卡读写正常。
所以我怀疑是数组溢出了,但是不知道怎么解决这个问题。
感谢您的阅读,希望有高人帮忙解答! 自己研究了一中午,发现如果将两个数组 src和tar声明为static类型,程序就正常运行。问题解决了,可是原因还不知道,期待高手的解答。 就是栈溢出了。如果不声明为static类型,会把src与tar都放在栈内存中,这样一下子就吃掉了1024字节的栈。如果是static类型的,则会为它俩分配专用的内存。建议复习一下C语言变量作用域与生命期相关的知识 回复【2楼】bluelucky
就是栈溢出了。如果不声明为static类型,会把src与tar都放在栈内存中,这样一下子就吃掉了1024字节的栈。如果是static类型的,则会为它俩分配专用的内存。建议复习一下c语言变量作用域与生命期相关的知识
-----------------------------------------------------------------------
呵呵,谢谢前辈的指点。不过编译器是怎么分配栈的啊?我定义了这么大的变量,应该给分配这么大的栈啊。如果声明为static的话,那就是存放在堆里面,会不会出现堆溢出呢。
呵呵,回头一定要好好看看这一部分,哎,嵌入式系统,就是要在内存方面斤斤计较的。
页:
[1]