发 帖  
原厂入驻New
申请华秋企业认证 多层板首单免费打样!
30s提交资料,10分钟通过审核(免费赔付+顺丰包邮)>>立即报名
[问答] 为什么将数组大小改为12x11就显示lcd为白屏了?
80 LCD 数组 编译
分享
程序非常的简单,就是先定义一个数组初始化了其中的12x5个,然后让lcd显示第1行,第4列的数字(小数点后两位),程序如下
#include <STM32f10x_lib.h>
#include "sys.h"
#include "usart.h"  
#include "delay.h"
#include "lcd.h"   

int main(void)
{  
     float propertiestot[12][5]= {{1 ,            22064000,      647.1400,        0.34437,      18.0150},            
                                           {2 ,             3399000,      126.2600,        0.03593,      28.0000},            
                                           {3 ,             7386000,      304.2100,        0.22394,      44.0100},              
                                           {4 ,             4599000,      190.5500,        0.01140,      16.0430},            
                                           {5 ,             4872000,      305.3300,        0.09909,      30.0700},            
                                           {6 ,             4246000,      369.8500,        0.15611,      44.0970},            
                                           {7 ,             3640000,      407.8500,        0.18465,      00.0000},              
                                           {8 ,             3784000,      425.1400,        0.19777,      58.1240},              
                                           {9 ,             3196000,      433.7500,        0.19528,      00.0000},              
                                           {10,             3370000,      460.3900,        0.22606,      00.0000},            
                                           {11,             3364000,      469.6900,        0.24983,      00.0000},              
                                           {12,             3020000,      507.8500,        0.29600,      00.0000}};            
         
Stm32_clock_Init(9);//系统时钟设置
delay_init(72);  //延时初始化
uart_init(72,9600); //串口1初始化  
  LCD_Init();
OINT_COLOR=RED;
while(1)
{
   IF(propertiestot[0][3]<0)
   {LCD_ShowString(100,150,"-");}
   else
   {LCD_ShowString(100,150,"+");}
   LCD_ShowNum(110,150,abs(propertiestot[0][3]),2,18);
   LCD_ShowString(130,150,".");
   LCD_ShowNum(138,150,(abs(10*propertiestot[0][3]))%10,1,18);
   LCD_ShowNum(146,150,(abs(100*propertiestot[0][3]))%10,1,18);
   delay_ms(10000);
}
   
}
然后调试
Program Size: Code=9496 RO-data=3208 RW-data=16 ZI-data=608  
显示结果为:0.34
没有问题
现在其他的都不变将这个数组的大小改为12x9,即只将上述程序中的 float propertiestot[12][5]改为float propertiestot[12][9]
然后调试
Program Size: Code=9496 RO-data=3400 RW-data=16 ZI-data=608
显示结果为:0.34
也没有问题
然后做法同上,将这个数组大小改为12x10, 即只将上述程序中的 float propertiestot[12][9]改为float propertiestot[12][10]
然后调试
Program Size: Code=9496 RO-data=3448 RW-data=16 ZI-data=608  
结果显示为白屏,没有任何数字
同样的将数组大小改为12x11也显示为白屏
同样的将数组大小改为12x12这时候连白屏也不显示了直接黑屏。
(注意以上改动在keil 4软件中编译均没有问题)
用库函数版本的keil---keil 4在线调试,一步步的运行,运行几步之后就出现一下问题:
*** error 65: access violation at 0x1FFFFFFC : no 'write' permission
我想问问原子哥,这是为什么呢,以为内存不够的原因么? 怎么解决。
0
2019-10-17 20:02:19   评论 分享淘帖 邀请回答

相关问题

5个回答
在单片机里面定义这么大的常量数组,无异于自杀.
随着你数组容量的增大,死的就越来越快了.最后直接就死了.
看看别人的帖子:http://www.openedv.com/posts/list/189.htm?fromAll=0
2019-10-18 08:10:21 评论

举报

那就是单片机中不能进行这么大的数组的运算是吧,那可以通过使用内部闪存来解决么?因为我看你的最后一个综合实验也有非常大的数据,Program Size: Code=65962 RO-data=7158 RW-data=1040 ZI-data=15792  都比我的那个大。不知道可不可以?
2019-10-18 08:22:13 评论

举报

你先搞清楚SRAM和FLASH的区别.
大数组,不需要改动的,可以用关键字const.这样就定义在flash里面.不占用SRAM.
2019-10-18 08:36:03 评论

举报

SRAM和FLASH区别我知道个大概,SRAM就是静态随即存储器,和我们平时所说的内存差不多吧,FLASH应该就是类似于硬盘一样的存储介质吧。你说的没错可以将大数组定义在FLASH里面而不占用SRAM,我也正是这么想的,我还有点不太明白的是,当程序读取FLASH当中的数据时那么这些数据不是都在SRAM里了此时SRAM空间又不够用了?
2019-10-18 08:44:34 评论

举报

那些是固定的数据.无法改变的!!!
就和一个常量一个意思.
2019-10-18 08:50:07 评论

举报

只有小组成员才能发言,加入小组>>

32个成员聚集在这个小组

加入小组

创建小组步骤

关闭

站长推荐 上一条 /7 下一条

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