STM32新添数组后程序启动失败,删减数组后正常

STM32新添数组导致程序启动失败,删减数组后正常

如图,在一次开发过程中,需要显示图片并且单片机要执行较为繁重的运算任务,然而在新添一次数组后编译和烧录都正常,然而运行却失败了——根本不执行任何动作
删除数组后正常——然而却是并不一定要是新添的那一个
比对输出数据如下:
比对的图片
不难看到的是:
RW-data较大于先前
因此我推测很可能是这一部分的数据溢出从而导致了该故障但我假设我不知道这是什么
因此我先查询datasheet得知:
芯片datasheet
然而我的程序应该不能填满64K的闪存-因此我暂时将程序过大而导致的原因暂时排除在选项中
那么为了解决这个问题,就应该查它到底是什么
假设我完全不知道它的含义
因此我应该先查询它的帮助文档
1
请添加图片描述

在这里插入图片描述
键入相关的值
在这里插入图片描述
一个一个看
在这里插入图片描述
寻找到该文档
翻译结果如下:
在这里插入图片描述
大概上知道了这是什么:
RW指的应该是RAM部分
而我还有很多的ROM空间并且这部分数组我不需要更改它的数据
那么,我应该怎么做才能让这些原本写入RAM的数据进入ROM
于是我开始搜索
搜索内容如下:在这里插入图片描述
结果如下:

unsigned char//我原来的方式
const unsigned char//搜索结果

多了一个关键词:const
于是我将其应用到我的代码上

const unsigned char T0[]=
{

0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xE0,0xE0,0xE0,0xFC,0xFC,0xFC,0x1C,0x1C,0x1C,
0x1C,0x1C,0x1C,0xFC,0xFC,0xFC,0xE0,0xE0,0xE0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x00,0x00,0x00,
0x3F,0x3F,0x3F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x7E,0x7E,0x7E,
0x00,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0x03,0x03,0x1F,0x1F,0x1F,0x1C,0x1C,0x1C,
0x1C,0x1C,0x1C,0x1F,0x1F,0x1F,0x03,0x03,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,//0
};

但是这还不够
如果你的编译器报错
你需要在使用到它的函数定义的.c和.h文件进行更改

void AAA (u8 DAT[])
{
		//原版代码
}
void AAA (const u8 DAT[])
{
		//修正后代码
}
/*
以上是函数在.c文件里的修改
同样的,你也需要在头文件里修改
修改方式类似于上面的
*/

再次编译:
在这里插入图片描述
RO-data的值有变化
烧录后运行正常
问题解决!

总结
如果一些不需要更改的数据很大,那么可以尝试将其放入ROM当中
需要在前面新添:const
但是需要对应用的函数进行修改

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值