找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1296|回复: 21
打印 上一主题 下一主题
收起左侧

一个数组影响指示灯的闪烁是什么原因

  [复制链接]
跳转到指定楼层
楼主
本帖最后由 liyago 于 2022-8-9 00:16 编辑

#include "STC15Fxxxx.h"
#include "intrins.h"
#define uint unsigned int


sbit lamp=P3^7; //指示灯
uint i,k=0;
uint led_pinlu=50;//
uint  remotedata[800];//这个数组设900以上就不闪灯了
void Timer1Init(void);


/******主函数****/                                                                                                                                                                        
void main()
{  
                Timer1Init();
                EA=1; //开总中断
                while(1)
                {
                                if(k>led_pinlu)//上电正常慢闪灯,计数大于频率和频率不等于0是闪
                                {        
                                                k=0;
                                                lamp=!lamp;
                                }
                }
}


void Timer1Init(void)               
{
        AUXR &= 0x7F;                //定时器时钟12T模式
        TMOD &= 0xF0;                //设置定时器模式
        TH0=(65535-9000)/256;        //10毫秒一次
        TL0=(65535-9000)%256;
        ET0=1;//开T0中断
        TR0 = 1;                //定时器0开始计时               
        
}

void time0()interrupt 1
{
        k++;
}


全部程序如上,当定义数组uint  remotedata[800];为800以下时程序运行后LED灯闪,当定义数组为900以上时LED灯就不闪了,求各位大侠指点迷津,谢谢了!!!
用的芯片型号 : STC15F2K08S2


分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏1 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:95375 发表于 2022-8-9 00:16 | 只看该作者
用的芯片型号 : STC15F2K08S2
回复

使用道具 举报

板凳
ID:213173 发表于 2022-8-9 06:38 | 只看该作者
内存容量有限,remotedata[ ];虽然没有被使用,但它把茅坑占满了,别人无处拉便便
回复

使用道具 举报

地板
ID:624769 发表于 2022-8-9 08:23 来自手机 | 只看该作者
不用900,只有896以上就出问题了吧?溢出了!

评分

参与人数 1黑币 +15 收起 理由
wpppmlah + 15 回帖助人的奖励!

查看全部评分

回复

使用道具 举报

5#
ID:161164 发表于 2022-8-9 09:02 | 只看该作者
liyago 发表于 2022-8-9 00:16
用的芯片型号 : STC15F2K08S2

此芯片有2048Byte SRAM
其中128Byte是data
下128Byte是idata
最后的1792Byte是xdata
900个uint 有1800个Byte
内存溢出了

评分

参与人数 1黑币 +15 收起 理由
wpppmlah + 15 回帖助人的奖励!

查看全部评分

回复

使用道具 举报

6#
ID:509408 发表于 2022-8-9 09:20 | 只看该作者
RAM不够了呗! 这个芯片只有2kRAM, 减去固定idata256字节  排外RAM区还有1800字节不到 那个数组i是nt型数据占了1800字节 你编译器应该也已经警告过你了

评分

参与人数 1黑币 +15 收起 理由
wpppmlah + 15 回帖助人的奖励!

查看全部评分

回复

使用道具 举报

7#
ID:509408 发表于 2022-8-9 09:27 | 只看该作者
如果只是固定不变的数据就存放在ROM区,用const code修饰。如非有必要存储那么大的数字 可以把数组类型改为unsigned char型,否则只有更换更大ram型号芯片了
回复

使用道具 举报

8#
ID:248705 发表于 2022-8-9 09:48 | 只看该作者
一共2k sram,900*2=1800差不多到临界了,可能是sram用超了?编译器没报啥警告吗

评分

参与人数 1黑币 +15 收起 理由
wpppmlah + 15 回帖助人的奖励!

查看全部评分

回复

使用道具 举报

9#
ID:123289 发表于 2022-8-9 09:49 | 只看该作者
你有对数组操作吗?
程序中没有看到对数组的操作的部分。
回复

使用道具 举报

10#
ID:1034262 发表于 2022-8-9 09:53 | 只看该作者
数组定义没有加xdata,你看看是不是这个问题?
回复

使用道具 举报

11#
ID:203661 发表于 2022-8-9 11:18 | 只看该作者
溢出了
回复

使用道具 举报

12#
ID:95375 发表于 2022-8-9 11:55 | 只看该作者
wulin 发表于 2022-8-9 06:38
内存容量有限,remotedata[ ];虽然没有被使用,但它把茅坑占满了,别人无处拉便便

一直没留意内存的影响,谢谢了!
回复

使用道具 举报

13#
ID:95375 发表于 2022-8-9 11:57 | 只看该作者
188610329 发表于 2022-8-9 08:23
不用900,只有896以上就出问题了吧?溢出了!

实测是887就不行了,真是内存小的问题
回复

使用道具 举报

14#
ID:95375 发表于 2022-8-9 12:07 | 只看该作者
lkc8210 发表于 2022-8-9 09:02
此芯片有2048Byte SRAM
其中128Byte是data
下128Byte是idata

谢谢了,一直没注意这方面的问题。
回复

使用道具 举报

15#
ID:95375 发表于 2022-8-9 12:12 | 只看该作者
tzs233 发表于 2022-8-9 09:20
RAM不够了呗! 这个芯片只有2kRAM, 减去固定idata256字节  排外RAM区还有1800字节不到 那个数组i是nt型数据 ...



STC15Fxx.7z (2.17 KB, 下载次数: 3)

STC15Fxxxx.7z (7.38 KB, 下载次数: 2)

用STC15Fxx.H会出现警告,用STC15Fxxxx.H就算数组是几万都不警告。

回复

使用道具 举报

16#
ID:95375 发表于 2022-8-9 12:14 | 只看该作者
tzs233 发表于 2022-8-9 09:27
如果只是固定不变的数据就存放在ROM区,用const code修饰。如非有必要存储那么大的数字 可以把数组类型改为 ...

这个数组要写入数据的,unsigned char不是比unsigned int还小吗?
回复

使用道具 举报

17#
ID:95375 发表于 2022-8-9 12:15 | 只看该作者
祖国的花朵 发表于 2022-8-9 09:48
一共2k sram,900*2=1800差不多到临界了,可能是sram用超了?编译器没报啥警告吗

是超了,用错了头文件。
回复

使用道具 举报

18#
ID:95375 发表于 2022-8-9 12:20 | 只看该作者
yzwzfyz 发表于 2022-8-9 09:49
你有对数组操作吗?
程序中没有看到对数组的操作的部分。

这里数组没操作,纯属占坑的,所以没考虑运行内存,STC15F2K08S2程序空间有8K都不行,换STC15F2K32S2有32K程序空间也是一样,所以还是SRAM小的问题。
回复

使用道具 举报

19#
ID:95375 发表于 2022-8-9 12:24 | 只看该作者
coody_sz 发表于 2022-8-9 09:53
数组定义没有加xdata,你看看是不是这个问题?

加xdata也不行
回复

使用道具 举报

20#
ID:95375 发表于 2022-8-9 12:53 | 只看该作者
SOP28封装的没有比这更大内存的了
回复

使用道具 举报

21#
ID:624769 发表于 2022-8-9 19:25 | 只看该作者
liyago 发表于 2022-8-9 12:12
用STC15Fxx.H会出现警告,用STC15Fxxxx.H就算数组是几万都不警告。

你没出警告,不是头文件的问题,是你KEIL设置问题。
KEIL 如下,选择正确的芯片型号,并且在 XRAM 这里打勾,超出了就会出警告了。反之则不会警告。


回复

使用道具 举报

22#
ID:95375 发表于 2022-8-10 18:34 | 只看该作者
188610329 发表于 2022-8-9 19:25
你没出警告,不是头文件的问题,是你KEIL设置问题。
KEIL 如下,选择正确的芯片型号,并且在 XRAM 这里 ...

确实是这样,编译器有好多坑是平时不留意的
回复

使用道具 举报

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

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

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