遇到这个情况有可能是某一个数组太大,然后单片机内部数据存储区不够用,
所以可以把这个数据存在单片机外例如
int led[8][8]={
{1,1,1,1,1,1,1,1},//1
{1,0,0,0,0,0,0,1},//2
{1,0,0,0,0,0,0,1},//3
{1,0,0,0,0,0,0,1},//4
{1,0,0,0,0,0,0,1},//5
{1,0,0,0,0,0,0,1},//6
{1,0,0,0,0,0,0,1},//7
{1,1,1,1,1,1,1,1}//8
}
解决的办法是在变量前面加前缀xdata.改为
xdata int led[8][8]={
{1,1,1,1,1,1,1,1},//1
{1,0,0,0,0,0,0,1},//2
{1,0,0,0,0,0,0,1},//3
{1,0,0,0,0,0,0,1},//4
{1,0,0,0,0,0,0,1},//5
{1,0,0,0,0,0,0,1},//6
{1,0,0,0,0,0,0,1},//7
{1,1,1,1,1,1,1,1}//8
}
这样就可以了,如果是直接修改keil的配置,后面会发生另外的意外,如果使用这个办法不会发生那样的事情。所以这个方法应该更好,例如把数据全部存在外部,那么访问速度会更慢
//注意了:如果按照上面办法会发生另外的错误
因为使用如果要使用上面的方法,或者把keil的设置更改为large,最后在Proteus仿真的时候都要外接一个RAM才能够模拟,而初学者是没有学习怎么外接RAM的,所以最好可以这么改
unsiged char code led[8][8]={
{1,1,1,1,1,1,1,1},//1
{1,0,0,0,0,0,0,1},//2
{1,0,0,0,0,0,0,1},//3
{1,0,0,0,0,0,0,1},//4
{1,0,0,0,0,0,0,1},//5
{1,0,0,0,0,0,0,1},//6
{1,0,0,0,0,0,0,1},//7
{1,1,1,1,1,1,1,1}//8
}
这个code的意思:表示要把数据粗存在程序储存区,AT89C51单片机有64K之多,远远大于128B文章来源:https://www.toymoban.com/news/detail-621976.html
足够用了。文章来源地址https://www.toymoban.com/news/detail-621976.html
到了这里,关于单片机遇到“auto segment too large“怎么办的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!