stm32f407用keil5编译,结构体数组和数组过大,超过512字节,程序可编译,无法运行

2019-07-20 07:49发布

stm32f407用keil5编译,结构体数组和数组过大,超过512字节,程序可编译,无法运行
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
6条回答
正点原子
1楼-- · 2019-07-20 08:30
 精彩回答 2  元偷偷看……
扫地僧WX
2楼-- · 2019-07-20 09:28
本帖最后由 扫地僧WX 于 2018-6-6 14:58 编辑

#include "system.h"
#include "SysTick.h"
#include "led.h"
#include "usart.h"
#include "tftlcd.h"
#include "key.h"
#include "spi.h"
#include "flash.h"
#include "api2.h"
#include "string.h"

//要写入到25Q128的字符串数组
const u8 text_buf[]="www.prechin.net";
#define TEXT_LEN sizeof(text_buf)

struct Student
{
        int num;
        char name[20];
        float score[3];
        float aver;
};

#define Max_LenBuf                5120 //程序可编译,无法运行
typedef struct
{
        u32 curNo;
        u8 buf[Max_LenBuf];  //Max_LenBuf小于224可以运行
}CMD_UART;


#define Max_No                513 //程序可编译,无法运行
int main()
{
        u32 i=0;
        u32 j=0;
        u8 key;
        u8 buf[Max_No];  //Max_No小于512可以运行
        void input(struct Student stu[]);
        void init_api1( CMD_UART uCmd[]);

    void print(struct Student stud);
    struct Student stu[3];
    struct Student *p=stu;
        CMD_UART uCmd[MaxNoPort];
        CMD_UART *k = uCmd;
        SysTick_Init(168);
        NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);  //中断优先级分组 分2组
        LED_Init();
        USART1_Init(9600);
        printf("******* ");
        while(1){
                input(p);
                init_api1(k);
                printf("debug ");
                //check_CMD();
                //for(j=0;j<Max_LenBuf;j++){
                        //printf("%x",uCmd[0].buf[j]);
                       
                //}
                for(j=0;j<Max_No;j++){
                        buf[j]=(u8)(j%256);
                        printf("%x ",buf[j]);
                        if(j%32==31){
                                printf(" ");
                        }
                       
                }
                printf(" ");
        }
}

void input(struct Student stu[])
{
    int i;
    printf("请依次输入学生编号,姓名,三个科目成绩: ");
    for (i=0;i<3;i++)
    {
        //scanf("%d %s %f %f %f",&stu.num, &stu.name, &stu.score[0], &stu.score[1], &stu.score[2]);
        stu.aver = (stu.score[0]+stu.score[1]+stu.score[2])/3.0;
    }
}
void clear_buffer(CMD_UART uCmd[],u8 port)
{
        u32 i,j,u;
        port = port % MaxNoPort;
        for(i=0;i<Max_LenBuf;i++){
                uCmd[port].buf =i;
                printf("u[%d].buf[%d]:%d      ",port,i,uCmd[port].buf );
                if((i%4)==3){
                        printf(" ");
                }
        }
}
void init_api1( CMD_UART uCmd[])
{
       
        u32 port;
        for(port=0;port<MaxNoPort;port++){
                printf("test......%02x ",port);
                uCmd[port].posCMD = 0;
                uCmd[port].posBuf = 0;
                uCmd[port].posTrans = 0;
                uCmd[port].curNoBuf = 0;
                uCmd[port].curNoPort = 0;
                clear_buffer(uCmd,port);
        }       
}

扫地僧WX
3楼-- · 2019-07-20 10:24
 精彩回答 2  元偷偷看……
borrow1988
4楼-- · 2019-07-20 14:58
 精彩回答 2  元偷偷看……
扫地僧WX
5楼-- · 2019-07-20 18:50
正点原子 发表于 2018-6-6 14:45
加大堆栈。但是很不好的解决办法。
用内存管理吧。

怎么使用内存管理
扫地僧WX
6楼-- · 2019-07-20 21:05
borrow1988 发表于 2018-6-6 22:40
修改.S

怎么修改.s

一周热门 更多>