求助:STM32F407存储全局变量大数组,编译错误,恳请指点

2019-07-20 21:08发布

STM32F407TFTLCD试验中存储类似几个A[3000],B[3000]这样的数组,定义为全局变量,编译错误提示无空间(no space),尝试用SRAM,更改option中IRAM的Start 0x68000000 Size 0xFFFFF,编译无错误,下载后黑屏, 尝试更改数组地址属性,
uint  F, i,j,V,m=4,n=300;
double  t,Dc[300]__attribute__((at(0X68000000))),B[30]__attribute__((at(0X68000000))),C[300]__attribute__((at(0X680002400))),G[300]__attribute__((at(0X68000000))),M[300]__attribute__((at(0X68000000))),r[300]__attribute__((at(0X68000000))),R[300]__attribute__((at(0X68000000))),d;        
//加上地址属性时定义不在片内RAM了

void main(void)
{  
       
        B[0]=0;
        C[0]=100;
        G[0]=100;
        M[0]=0;
        M[1]=0;//Vy
        M[2]=-10;//Vz
        d=0.1;
        t=0;
        NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);//设置系统中断优先级分组2
        delay_init(168);      //初始化延时函数
        uart_init(115200);        //初始化串口波特率为115200
        LED_Init();        //明明屏蔽掉也没什么关系,为什么所有的显示都有这个初始化呢?
        LCD_Init();           //初始化LCD FSMC接口
        FSMC_SRAM_Init;
        B[1]=B[0]+M[0]*t;//X(B[1])不断变化
        C[1]=C[0]+M[1]*t;
下面是显示
while((0<Dc[i])&&(Dc[i]<=10))
        {
        A[i]=atan(Y/X);
        A[i]=A[i]*180/PI;
        if(i%1==0)
                POINT_COLOR=BLACK;      //画笔颜 {MOD}:黑 {MOD}
            LCD_ShowString(30,20,210,24,16,"Angle:");//LCD_ShowString(u16 x,u16 y,u16 width,u16 height,u8 size,u8 *p),
            POINT_COLOR=RED;
        LCD_ShowxNum(30,50,A[i],8,16,0);
                POINT_COLOR=BLACK;      
                LCD_ShowString(30,80,200,16,16,"Time: s");
            POINT_COLOR=RED;
            LCD_ShowxNum(70,80,t,1,16,0);
            LED0=!LED0;
                delay_ms(250);       

编译错误, integer operation result is out of range,恳请大神帮忙指点


       

友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
11条回答
xiyou
1楼-- · 2019-07-21 21:15
 精彩回答 2  元偷偷看……
电子之旅
2楼-- · 2019-07-21 23:53
楼主用内存管理吧,不应该定义那么多大数组呀。
xiyou
3楼-- · 2019-07-22 01:59
 精彩回答 2  元偷偷看……
电子之旅
4楼-- · 2019-07-22 02:57
xiyou 发表于 2016-7-16 16:44
我需要在上面运行迭代运算,迭代次数需要3000,查阅资料将MDK的勾选IRAM,START改为0x200000c0,SIZE改为 ...

更改MDK的IRAM选项只是告诉MDK编译的时候可以使用这么的内存空间,但是实际上你的芯片不可能达到这么的内存。如果一定要以数组的形式进行算法算,那你估计只能使用外部SRAM了,把数组定义到外部SRAM。具体怎么定义可以参考原子哥的外部SRAM实验。
xiyou
5楼-- · 2019-07-22 03:34
电子之旅 发表于 2016-7-18 12:00
更改MDK的IRAM选项只是告诉MDK编译的时候可以使用这么的内存空间,但是实际上你的芯片不可能达到这么的内 ...

非常感谢,我把数组改小了,现在能成功运行了

一周热门 更多>