OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 6686|回复: 15

定义全局大数组的问题?

[复制链接]

2

主题

11

帖子

0

精华

初级会员

Rank: 2

积分
71
金钱
71
注册时间
2016-8-10
在线时间
15 小时
发表于 2016-8-10 16:51:29 | 显示全部楼层 |阅读模式
2金钱
本帖最后由 Alpha_Omega 于 2016-8-10 17:11 编辑

在程序中定义了一个10K的超大全局数组,没有问题,然后定义了一个5K的超大全局数组,也没有问题,但是再去定义一个5k的全局数组时就会出现错误,进入HardFault_Handler循环中,通过工具栏peripherals-》core peripherals-》Fault reports 看到是BUS FAULT  ----STKERR       但是 用的是STM32 F103RBT6 ——64K RAM   在startup中设置Stack_Size      EQU     0x00002000;Options for target中设置 1RAM1   0x20000000  size 0x10000  ;  程序编译后  Program Size: Code=14668 RO-data=2928 RW-data=60 ZI-data=28676   RAM被使用不到30K,   为什么会出现错误呢?

最佳答案

查看完整内容[请看2#楼]

可以先试试 把数组减小一点,然后再确定问题点。
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

56

主题

520

帖子

0

精华

高级会员

Rank: 4

积分
964
金钱
964
注册时间
2014-11-18
在线时间
160 小时
发表于 2016-8-10 16:51:30 | 显示全部楼层
可以先试试 把数组减小一点,然后再确定问题点。
自己选择的路,成家前走完。
回复

使用道具 举报

7

主题

333

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1838
金钱
1838
注册时间
2012-7-16
在线时间
504 小时
发表于 2016-8-10 16:57:25 | 显示全部楼层
代码贴出来看下。
回复

使用道具 举报

2

主题

11

帖子

0

精华

初级会员

Rank: 2

积分
71
金钱
71
注册时间
2016-8-10
在线时间
15 小时
 楼主| 发表于 2016-8-10 17:01:36 | 显示全部楼层
static u8 test[10*1024]={0};
static u8 test2[5*1024]={0};
static u8 test3[5*1024]={0};

int main(void)
{       
        SystemInit();
        delay_init(72);
        NVIC_Configuration();
        uart1_init(9600);
        LCD_Init();

        delay_ms(1500);

        POINT_COLOR=RED;       
        LCD_ShowString(40,0,"QR_ENCODE TEST");

        USART1_SendArray("hello world\n",strlen("hello world\n"));

        //DISPLAY_RENCODE_TO_TFT((u8 *)codetest);
        test[0]=1;
        test2[2]=1;       
        test3[3]=3;
       
        while (1)
        {
                ;
        }
}         其实是为了DISPLAY_RENCODE_TO_TFT函数,该函数中使用了许多全局大数组;报错,所以注掉后直接在main.c中定义超大数组测试,果然也报错;
回复

使用道具 举报

2

主题

11

帖子

0

精华

初级会员

Rank: 2

积分
71
金钱
71
注册时间
2016-8-10
在线时间
15 小时
 楼主| 发表于 2016-8-10 18:19:35 | 显示全部楼层
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165524
金钱
165524
注册时间
2010-12-1
在线时间
2116 小时
发表于 2016-8-10 20:24:00 | 显示全部楼层
仿真,看看是那一句代码进入fault的。
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

2

主题

11

帖子

0

精华

初级会员

Rank: 2

积分
71
金钱
71
注册时间
2016-8-10
在线时间
15 小时
 楼主| 发表于 2016-8-11 08:58:52 | 显示全部楼层
本帖最后由 Alpha_Omega 于 2016-8-11 09:01 编辑
正点原子 发表于 2016-8-10 20:24
仿真,看看是那一句代码进入fault的。

原子哥,仿真的话是没有问题的,程序完全通过并进入到我的while循环,串口打印窗口也输出了我的“hello world”字符串;用cortex-M3 jlink 调试就不行了,isp下载程序也没反应;
回复

使用道具 举报

117

主题

598

帖子

1

精华

资深版主

Rank: 8Rank: 8

积分
1702
金钱
1702
注册时间
2012-5-10
在线时间
439 小时
发表于 2016-8-11 09:03:41 | 显示全部楼层
编译的时候没说no space就不是内存不够,其他问题
如有技术问题,微信扫头像交流,STM32,JAVA,服务器
回复

使用道具 举报

19

主题

430

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1341
金钱
1341
注册时间
2016-4-22
在线时间
187 小时
发表于 2016-8-11 09:17:38 | 显示全部楼层
就这点代码,没看出问题。
硬件调试一下,在fault处设置断点,然后看堆栈上一步是哪里出的错。如果看不到,可以考虑添加一句汇编跳转上一句。
伤情最是晚凉天,憔悴斯人不堪怜。
邀酒摧肠三杯醉,寻香惊梦五更寒。
钗头凤斜卿有泪,荼蘼花了我无缘。
小楼寂寞新雨月,也难如钩也难圆。
回复

使用道具 举报

2

主题

19

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
366
金钱
366
注册时间
2016-1-15
在线时间
72 小时
发表于 2016-8-11 10:28:16 | 显示全部楼层
u8是  typedef unsigned          char uint8_t;  你改成u32试试
回复

使用道具 举报

2

主题

11

帖子

0

精华

初级会员

Rank: 2

积分
71
金钱
71
注册时间
2016-8-10
在线时间
15 小时
 楼主| 发表于 2016-8-11 10:41:13 | 显示全部楼层
会划水的小鱼 发表于 2016-8-11 10:28
u8是  typedef unsigned          char uint8_t;  你改成u32试试

试了一下,仍旧不行;代码已经改的十分简单了,仿真调试没有问题,在线调试总是不行;
#include "sys.h"
#include "usart.h"
#include "delay.h"
#include "string.h"

static u32 buff[1024*10]={0};
int main(void)
{
        SystemInit();
        delay_init(72);
        NVIC_Configuration();
        uart1_init(9600);
        delay_ms(1000);
        buff[0]++;
        USART1_SendArray("hello world\n",strlen("hello world\n"));
        while (1)
        {
                ;
        }
}
回复

使用道具 举报

2

主题

19

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
366
金钱
366
注册时间
2016-1-15
在线时间
72 小时
发表于 2016-8-11 11:02:34 | 显示全部楼层
Alpha_Omega 发表于 2016-8-11 10:41
试了一下,仍旧不行;代码已经改的十分简单了,仿真调试没有问题,在线调试总是不行;
#include "sys.h" ...

你的这个数组除了在这个main文件中,有在其他文件中使用吗
回复

使用道具 举报

2

主题

11

帖子

0

精华

初级会员

Rank: 2

积分
71
金钱
71
注册时间
2016-8-10
在线时间
15 小时
 楼主| 发表于 2016-8-11 11:05:03 | 显示全部楼层
会划水的小鱼 发表于 2016-8-11 11:02
你的这个数组除了在这个main文件中,有在其他文件中使用吗

没有;加了static的,但是加不加static 错误形式都一样;
回复

使用道具 举报

2

主题

19

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
366
金钱
366
注册时间
2016-1-15
在线时间
72 小时
发表于 2016-8-11 11:13:34 | 显示全部楼层
Alpha_Omega 发表于 2016-8-11 11:05
没有;加了static的,但是加不加static 错误形式都一样;

你在串口发送数组后再加一个1s延时,如果还不可以,那应该不是这段的问题了
回复

使用道具 举报

2

主题

11

帖子

0

精华

初级会员

Rank: 2

积分
71
金钱
71
注册时间
2016-8-10
在线时间
15 小时
 楼主| 发表于 2016-8-12 21:11:05 | 显示全部楼层
原来STM32F103RBT一直是128k FLASH 和20k SRAM ,果然还是内存的问题;
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165524
金钱
165524
注册时间
2010-12-1
在线时间
2116 小时
发表于 2016-8-12 21:18:18 | 显示全部楼层
楼主另外发了一个帖子,原来用的是RBT6,总共才20K内存
被你这样折腾完了。。。导致进入hardfault的。
换大容量的mcu!!
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-6-8 04:30

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表