硬件平台:STM32F429I-DISCORVERY
软件平台:KEIL MDK5.0
要使用STM32F429I-DISCORVERY中的SDRAM作为内存使用(主要是让其作为堆内存使用)
看过STM32F429I-DISCORVERY套件中配置SDRAM的例子,而且有stm32f429i_discovery_sdram.c文件,但是不知道如何设置MDK。
int i,j; class Test { public: int X,Y; Test(int x,int y) { X = x; Y = y; } }; int main(void) { SDRAM_Init(); for(i = 0;i<100000;i++) { Test *ptest = new Test(1,1);//测试是否能在SDRAM中分配内存并且使用 } while(1) { }
这个是MDK中的配置,请教如何进行设置?
起始MDK就我上面的图设置就可以了,还要分配一下堆内存(在.s文件下点击右边窗口的Configuration Wizard,设置一下HeapSize,只要0x100就可以了,不然进不了Main函数)。
测试程序如下:
46 #include "stm32f4xx_conf.h" #include "stm32f429i_discovery_sdram.h" #include <rt_heap.h> //_init_alloc #define IS42S16400J_SIZE 0x400000 #define HEAP_BASE SDRAM_BANK_ADDR #define HEAP_TOP (SDRAM_BANK_ADDR+IS42S16400J_SIZE) int i,j; class Test { public: int X,Y; char cs[10000]; Test(int x,int y) { X = x; Y = y; } }; Test *ptest = 0; int main(void) { // RCC_ClocksTypeDef clock; // RCC_GetClocksFreq(&clock); SDRAM_Init(); _init_alloc(HEAP_BASE, HEAP_TOP); // 设置堆空间 int *p = new int[16000]; for(i = 0;i<10000;i++) { ptest = new Test(1,1);//测试是否能在SDRAM中分配内存并且使用 j = ptest->Y; //delete ptest; } while(1) { j++; } }
当然程序会飞掉,主要是看ptest 的地址有没有达到或接近0xD0400000,如果接近了那么SDRAM作为堆内存就实验成功!
给学习的同学一点参考。