欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136

標題: 一個數組影響指示燈的閃爍是什么原因 [打印本頁]

作者: liyago    時間: 2022-8-8 23:34
標題: 一個數組影響指示燈的閃爍是什么原因
本帖最后由 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



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

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

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

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

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

謝謝了,一直沒注意這方面的問題。
作者: liyago    時間: 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就算數組是幾萬都不警告。


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

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

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

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

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

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



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

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




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