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