|
1金钱
本人准备用attribute at指令于外部sram初始地址0x68000000定义一个u32类型的a[300]数组,并且将0-299这300个数赋值到a数组中,同时每隔一秒显示到R61509VNLCD上,但是烧写之后数字无法显示。后来我尝试将数组大小减少至a[200],便能正常显示,但是外部SRAM不是有1M吗,为什么才300个4字节的数据就无法显示呢?或者说是不是我attribute指令使用的不正确,希望大神们能帮帮我。
以下是我main函数部分代码:
u32 a[300] __attribute__((at(0X68000000)));
//外部内存测试(最大支持1M字节内存测试)
void ExSRAM_Cap_Test(u16 x,u16 y)
{
u8 writeData = 0xf0, readData;
u16 cap=0;
u32 addr;
addr = 1024; //从1KB位置开始算起
LCD_ShowString(x,y,239,y+16,16,"ExSRAM Cap: 0KB");
while(1)
{
FSMC_SRAM_WriteBuffer(&writeData, addr, 1);
FSMC_SRAM_ReadBuffer(&readData,addr,1);
/* 查看读取到的数据是否跟写入数据一样 */
if(readData == writeData)
{
cap++;
addr += 1024;//每隔1KB写一个数字????
readData = 0;
if(addr > 1024 * 1024) //SRAM容量最大为1MB
{
break;
}
}
else
{
break;
}
}
LCD_ShowxNum(x+11*8,y,cap,4,16,0);//显示内存容量
printf("SRAM容量为:%dKB\r\n",cap);
}
int main()
{
u8 i=0;
u8 key;
// u8 read_buf[TEXT_LEN];
SysTick_Init(72);
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2); //中断优先级分组 分2组
LED_Init();
USART1_Init(9600);
TFTLCD_Init(); //LCD初始化
KEY_Init();
FSMC_SRAM_Init();
FRONT_COLOR=BLACK;
LCD_ShowString(10,10,tftlcd_data.width,tftlcd_data.height,16,"PRECHIN STM32F1");
LCD_ShowString(10,30,tftlcd_data.width,tftlcd_data.height,16,"www.prechin.net");
LCD_ShowString(10,50,tftlcd_data.width,tftlcd_data.height,16,"ExSRAM Test");
LCD_ShowString(10,70,tftlcd_data.width,tftlcd_data.height,16,"K_UP:Write K_DOWN:Read");
FRONT_COLOR=RED;
ExSRAM_Cap_Test(10,110);
// LCD_ShowString(10,130,tftlcd_data.width,tftlcd_data.height,16,"Write:");
// LCD_ShowString(10,150,tftlcd_data.width,tftlcd_data.height,16,"Read :");
for(i=0;i<300;i++)
{
a[i]=i;
}
while(1)
{
key=KEY_Scan(0);
if(key==KEY_UP)
{
for(i=0;i<300;i++)
{
LCD_ShowxNum(30,290,a[i],6,16,0);
delay_ms(1000);
}
}
else
delay_ms(10);
// while(1)
// {
// key=KEY_Scan(0);
// if(key==KEY_UP)
// {
// FSMC_SRAM_WriteBuffer(text_buf,0,TEXT_LEN);
//// printf("写入的数据是:%s\r\n",text_buf);
// LCD_ShowString(10+6*8,130,tftlcd_data.width,tftlcd_data.height,16,(u8 *)text_buf);
// }
// if(key==KEY_DOWN)
// {
// FSMC_SRAM_ReadBuffer(read_buf,0,TEXT_LEN);
//// printf("读取的数据是:%s\r\n",read_buf);
// LCD_ShowString(10+6*8,150,tftlcd_data.width,tftlcd_data.height,16,read_buf);
// }
i++;
if(i%20==0)
{
led1=!led1;
}
delay_ms(10);
}
}
我知道答案
本帖寻求最佳答案回答被采纳后将获得系统奖励 10 金钱 , 目前已有 1人回答
|
|