標(biāo)題: 一個(gè)數(shù)組影響指示燈的閃爍是什么原因 [打印本頁]

作者: liyago    時(shí)間: 2022-8-8 23:34
標(biāo)題: 一個(gè)數(shù)組影響指示燈的閃爍是什么原因
本帖最后由 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];//這個(gè)數(shù)組設(shè)900以上就不閃燈了
void Timer1Init(void);


/******主函數(shù)****/                                                                                                                                                                        
void main()
{  
                Timer1Init();
                EA=1; //開總中斷
                while(1)
                {
                                if(k>led_pinlu)//上電正常慢閃燈,計(jì)數(shù)大于頻率和頻率不等于0是閃
                                {        
                                                k=0;
                                                lamp=!lamp;
                                }
                }
}


void Timer1Init(void)               
{
        AUXR &= 0x7F;                //定時(shí)器時(shí)鐘12T模式
        TMOD &= 0xF0;                //設(shè)置定時(shí)器模式
        TH0=(65535-9000)/256;        //10毫秒一次
        TL0=(65535-9000)%256;
        ET0=1;//開T0中斷
        TR0 = 1;                //定時(shí)器0開始計(jì)時(shí)               
        
}

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


全部程序如上,當(dāng)定義數(shù)組uint  remotedata[800];為800以下時(shí)程序運(yùn)行后LED燈閃,當(dāng)定義數(shù)組為900以上時(shí)LED燈就不閃了,求各位大俠指點(diǎn)迷津,謝謝了。。
用的芯片型號(hào) : STC15F2K08S2



作者: liyago    時(shí)間: 2022-8-9 00:16
用的芯片型號(hào) : STC15F2K08S2
作者: wulin    時(shí)間: 2022-8-9 06:38
內(nèi)存容量有限,remotedata[ ];雖然沒有被使用,但它把茅坑占滿了,別人無處拉便便
作者: 188610329    時(shí)間: 2022-8-9 08:23
不用900,只有896以上就出問題了吧?溢出了!
作者: lkc8210    時(shí)間: 2022-8-9 09:02
liyago 發(fā)表于 2022-8-9 00:16
用的芯片型號(hào) : STC15F2K08S2

此芯片有2048Byte SRAM
其中128Byte是data
下128Byte是idata
最后的1792Byte是xdata
900個(gè)uint 有1800個(gè)Byte
內(nèi)存溢出了
作者: tzs233    時(shí)間: 2022-8-9 09:20
RAM不夠了唄! 這個(gè)芯片只有2kRAM, 減去固定idata256字節(jié)  排外RAM區(qū)還有1800字節(jié)不到 那個(gè)數(shù)組i是nt型數(shù)據(jù)占了1800字節(jié) 你編譯器應(yīng)該也已經(jīng)警告過你了
作者: tzs233    時(shí)間: 2022-8-9 09:27
如果只是固定不變的數(shù)據(jù)就存放在ROM區(qū),用const code修飾。如非有必要存儲(chǔ)那么大的數(shù)字 可以把數(shù)組類型改為unsigned char型,否則只有更換更大ram型號(hào)芯片了
作者: 的花朵    時(shí)間: 2022-8-9 09:48
一共2k sram,900*2=1800差不多到臨界了,可能是sram用超了?編譯器沒報(bào)啥警告嗎
作者: yzwzfyz    時(shí)間: 2022-8-9 09:49
你有對(duì)數(shù)組操作嗎?
程序中沒有看到對(duì)數(shù)組的操作的部分。

作者: coody_sz    時(shí)間: 2022-8-9 09:53
數(shù)組定義沒有加xdata,你看看是不是這個(gè)問題?
作者: lhzw2001    時(shí)間: 2022-8-9 11:18
溢出了
作者: liyago    時(shí)間: 2022-8-9 11:55
wulin 發(fā)表于 2022-8-9 06:38
內(nèi)存容量有限,remotedata[ ];雖然沒有被使用,但它把茅坑占滿了,別人無處拉便便

一直沒留意內(nèi)存的影響,謝謝了!
作者: liyago    時(shí)間: 2022-8-9 11:57
188610329 發(fā)表于 2022-8-9 08:23
不用900,只有896以上就出問題了吧?溢出了!

實(shí)測是887就不行了,真是內(nèi)存小的問題
作者: liyago    時(shí)間: 2022-8-9 12:07
lkc8210 發(fā)表于 2022-8-9 09:02
此芯片有2048Byte SRAM
其中128Byte是data
下128Byte是idata

謝謝了,一直沒注意這方面的問題。
作者: liyago    時(shí)間: 2022-8-9 12:12
tzs233 發(fā)表于 2022-8-9 09:20
RAM不夠了唄! 這個(gè)芯片只有2kRAM, 減去固定idata256字節(jié)  排外RAM區(qū)還有1800字節(jié)不到 那個(gè)數(shù)組i是nt型數(shù)據(jù) ...



STC15Fxx.7z (2.17 KB, 下載次數(shù): 3)

STC15Fxxxx.7z (7.38 KB, 下載次數(shù): 2)

用STC15Fxx.H會(huì)出現(xiàn)警告,用STC15Fxxxx.H就算數(shù)組是幾萬都不警告。


作者: liyago    時(shí)間: 2022-8-9 12:14
tzs233 發(fā)表于 2022-8-9 09:27
如果只是固定不變的數(shù)據(jù)就存放在ROM區(qū),用const code修飾。如非有必要存儲(chǔ)那么大的數(shù)字 可以把數(shù)組類型改為 ...

這個(gè)數(shù)組要寫入數(shù)據(jù)的,unsigned char不是比unsigned int還小嗎?
作者: liyago    時(shí)間: 2022-8-9 12:15
祖國的花朵 發(fā)表于 2022-8-9 09:48
一共2k sram,900*2=1800差不多到臨界了,可能是sram用超了?編譯器沒報(bào)啥警告嗎

是超了,用錯(cuò)了頭文件。
作者: liyago    時(shí)間: 2022-8-9 12:20
yzwzfyz 發(fā)表于 2022-8-9 09:49
你有對(duì)數(shù)組操作嗎?
程序中沒有看到對(duì)數(shù)組的操作的部分。

這里數(shù)組沒操作,純屬占坑的,所以沒考慮運(yùn)行內(nèi)存,STC15F2K08S2程序空間有8K都不行,換STC15F2K32S2有32K程序空間也是一樣,所以還是SRAM小的問題。
作者: liyago    時(shí)間: 2022-8-9 12:24
coody_sz 發(fā)表于 2022-8-9 09:53
數(shù)組定義沒有加xdata,你看看是不是這個(gè)問題?

加xdata也不行
作者: liyago    時(shí)間: 2022-8-9 12:53
SOP28封裝的沒有比這更大內(nèi)存的了
作者: 188610329    時(shí)間: 2022-8-9 19:25
liyago 發(fā)表于 2022-8-9 12:12
用STC15Fxx.H會(huì)出現(xiàn)警告,用STC15Fxxxx.H就算數(shù)組是幾萬都不警告。

你沒出警告,不是頭文件的問題,是你KEIL設(shè)置問題。
KEIL 如下,選擇正確的芯片型號(hào),并且在 XRAM 這里打勾,超出了就會(huì)出警告了。反之則不會(huì)警告。



作者: liyago    時(shí)間: 2022-8-10 18:34
188610329 發(fā)表于 2022-8-9 19:25
你沒出警告,不是頭文件的問題,是你KEIL設(shè)置問題。
KEIL 如下,選擇正確的芯片型號(hào),并且在 XRAM 這里 ...

確實(shí)是這樣,編譯器有好多坑是平時(shí)不留意的




歡迎光臨 (http://www.torrancerestoration.com/bbs/) Powered by Discuz! X3.1