سلام متوجه مشکل شدم اینکه چطور حل شد رو میگم شاید به کار کسی بیاد.اگر برای راه اندازی SDcard در هر مدی (spi/native) از کتابخانه خود Keil وهمچنین از RTX استفاده میکنید حتما باید: 1-روال خواندن ، نوشتن و... از SDcard در یک task انجام بشه. 2-کتابخانه هایی مثل RTL,FILE_CONFIG حتما با ورژن کامپایلرتون همخونی داشته باشه بهتر بگم از همون نسخه ای استفاده کنید که در کاپایلر هست.به مقدار Stack_Size و Heap_Size دقت کنید صفر نباشن
کد:
Heap_Size EQU 0x00000500
کد:
static char acBuffer[0x1000];int APP_GetData(void * p, const U8 ** ppData, unsigned NumBytes, U32 Off)
{
FILE * phFile;
unsigned int NumBytesRead;
phFile = (FILE *)p;
if (NumBytes > sizeof(acBuffer)) {
NumBytes = sizeof(acBuffer);
}
NumBytesRead = fread(acBuffer,sizeof(char),NumBytes,phFile);
*ppData = (unsigned char *)acBuffer;
return NumBytesRead;
}
int APP_GetData2(void * p, const U8 ** ppData, unsigned NumBytes, U32 Off)
{
FILE * phFile;
unsigned int NumBytesRead;
U8 * pData;
pData = (U8 *)*ppData;
phFile = (FILE *)p;
NumBytesRead = fread(pData,sizeof(char),NumBytes,phFile);
return NumBytesRead;
}
__task void SDcard(void)
{
FILE *Fptr=NULL;
unsigned char rw[50];
while(1)
{
if(read==2)
{
Fptr = fopen ("BackGround.bmp","r");
GUI_BMP_DrawEx(APP_GetData,Fptr,0,0);
fclose(Fptr);
read=0;
}
else if(read==3)
{
Fptr = fopen ("SettingOn.png","r");
GUI_PNG_DrawEx(APP_GetData2,Fptr,0,0);
fclose(Fptr);
read=0;
}
GUI_X_Delay(1);
}
}