在SRAM中,我的函数是可以把原来的数据写进去,然后再读回来,但是,
我的SRAM是1M的,在基地址0x68000000的基础上偏移超过1M之后,数据依然可以读回来,这是怎么回事?
部分代码如下:
sram.c
[mw_shl_code=c,true]#include "sys.h"
#include "stm32f4xx.h"
/*
作用:往某一个地址写一个字节的数据
*/
void Sram_Write(u32 address,u8 c){
u32 *p ;
p = ((u32 *)(address + 0x68000000));
(*p) = c;
}
/*
作用:从某一个地址读一个字节的数据
*/
u8 Sram_Read(u32 address){
u32 *p;
p = ((u32 *)(address + 0x68000000));
return (*p);
}[/mw_shl_code]
test.c
[mw_shl_code=c,true]#include "sys.h"
#include "delay.h"
#include "led.h"
#include "usart.h"
#include "lcd.h"
#include "beep.h"
#include "sram.h"
/*
本实验的目的是:
从外部的SRAM的某一个地址中写入一个字节的数据,
然后从这个地址中再把这个数据读取出来显示在串口上,
根据写和读的数据是否一致来判断我们的SRAM是否驱动成功了;
*/
int main(void){
Stm32_Clock_Init(336,8,2,7);//设置时钟,168MHZ
delay_init(168); //初始化延时函数
LED_Init();
uart_init(84-1,115200);
lcd_init();
Sram_Init();
while(1){
u8 i;
/*
1MB = 1024*1024 = 0X100 000;
当访问0x100 000地址时,这地址已经不再SRAM上了,但是还可以访问得到,这是为什么?
*/
Sram_Write(0x100000,30);
i = Sram_Read(0x100000);
printf("i=%d
",i);
delay_ms(1000);
}
}
[/mw_shl_code]
注:其输出结果为30,说明写和读正确;但是超出其地址访问,为何还能访问呢?
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
一周热门 更多>