OpenEdv-开源电子网

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

请教原子哥一个有关lcd显示的问题

[复制链接]

1

主题

3

帖子

0

精华

新手入门

积分
27
金钱
27
注册时间
2012-2-4
在线时间
0 小时
发表于 2012-2-16 10:33:17 | 显示全部楼层 |阅读模式

程序非常的简单,就是先定义一个数组初始化了其中的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

我想问问原子哥,这是为什么呢,以为内存不够的原因么? 怎么解决。




正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165371
金钱
165371
注册时间
2010-12-1
在线时间
2110 小时
发表于 2012-2-16 10:38:15 | 显示全部楼层
回复【楼主位】zhangxinhu:
---------------------------------
在单片机里面定义这么大的常量数组,无异于自杀.
随着你数组容量的增大,死的就越来越快了.最后直接就死了.

看看别人的帖子:http://www.openedv.com/posts/list/189.htm?fromAll=0
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

1

主题

3

帖子

0

精华

新手入门

积分
27
金钱
27
注册时间
2012-2-4
在线时间
0 小时
 楼主| 发表于 2012-2-18 21:30:19 | 显示全部楼层
那就是单片机中不能进行这么大的数组的运算是吧,那可以通过使用内部闪存来解决么?因为我看你的最后一个综合实验也有非常大的数据,Program Size: Code=65962 RO-data=7158 RW-data=1040 ZI-data=15792  都比我的那个大。不知道可不可以?
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165371
金钱
165371
注册时间
2010-12-1
在线时间
2110 小时
发表于 2012-2-18 21:44:57 | 显示全部楼层
回复【3楼】zhangxinhu:
---------------------------------
你先搞清楚SRAM和FLASH的区别.
大数组,不需要改动的,可以用关键字const.这样就定义在flash里面.不占用SRAM.
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

1

主题

3

帖子

0

精华

新手入门

积分
27
金钱
27
注册时间
2012-2-4
在线时间
0 小时
 楼主| 发表于 2012-2-18 22:12:42 | 显示全部楼层
SRAM和FLASH区别我知道个大概,SRAM就是静态随即存储器,和我们平时所说的内存差不多吧,FLASH应该就是类似于硬盘一样的存储介质吧。你说的没错可以将大数组定义在FLASH里面而不占用SRAM,我也正是这么想的,我还有点不太明白的是,当程序读取FLASH当中的数据时那么这些数据不是都在SRAM里了此时SRAM空间又不够用了?
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165371
金钱
165371
注册时间
2010-12-1
在线时间
2110 小时
发表于 2012-2-18 23:51:06 | 显示全部楼层
回复【5楼】zhangxinhu:
---------------------------------
那些是固定的数据.无法改变的!!!
就和一个常量一个意思.
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-2-24 22:02

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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