国产成人精品无码青草_亚洲国产美女精品久久久久∴_欧美人与鲁交大毛片免费_国产果冻豆传媒麻婆精东

15158846557 在線咨詢 在線咨詢
15158846557 在線咨詢
所在位置: 首頁 > 營銷資訊 > 網(wǎng)站運營 > 最大化使用51的RAM空間

最大化使用51的RAM空間

時間:2023-05-07 11:30:01 | 來源:網(wǎng)站運營

時間:2023-05-07 11:30:01 來源:網(wǎng)站運營

最大化使用51的RAM空間:真正能用于產(chǎn)品的代碼為非阻塞代碼,需要做分層和隔離,為此使用了隊列結構,另外為了標志各個狀態(tài),使用大量的變量,這些都增加了RAM存儲器的消耗,由于51的資源很有限,如何才能最大化的發(fā)揮RAM空間呢?本文來探討這個問題。

初衷

筆者最近設計了一款鍵盤矩陣的模塊,使用51單片機作為編碼器,檢測哪一個按鍵被按下,是長按,還是短按,并通過串口輸出其鍵值,這樣在其他的復雜的工程中,只需要直接用主處理器的串口讀取鍵值并做相應的操作即可。這樣就避免每次都根據(jù)不同的項目在主處理器上做大量的程序改動了,更換鍵盤也不會引起很大的改動。

而主處理器只需要預留一個串口即可,硬件平臺變化后,不會影響IO口的規(guī)劃,而如果直接使用主處理器,比如STM32,來控制鍵盤需要占用9個IO引腳,在不同的項目中切換時都需要重新規(guī)劃IO口。

圖1:鍵盤矩陣實物圖 [1]

代碼采用了非阻塞代碼,并做了分層和隔離,為此使用了隊列結構,另外為了標志各個狀態(tài),使用了大量的變量,這些都增加了RAM存儲器的消耗,由于51的資源很有限,如果不做調(diào)整就會報錯:

那么如何最大化發(fā)揮51單片機RAM的空間呢?

使用bit定義變量,或“降級”變量的類型

51提供bit定義,對于原來使用char、int的變量,如果其值只是0或者1,那么將其改為bit類型。

//滿洲里國峰電子科技 guofengdianzi.com//微信:GuoFengDianZi//已下代碼基于STC89C52#define KEY_NOT_PRESSED 0 //之前做好的庫函數(shù)中的變量定義char Key11_Value=KEY_NOT_PRESSED;//修改為bit類型bit Key11_Value=KEY_NOT_PRESSED;同樣的如果變量的范圍不需要那么大,將其降級,比如從int型修改為char型。

//滿洲里國峰電子科技 guofengdianzi.com//微信:GuoFengDianZi//已下代碼基于STC89C52//之前做好的庫函數(shù)中的變量定義static unsigned int Key11TimerS,Key11TimerL;//"降級“變量的類型static unsigned char Key11TimerS,Key11TimerL;

減小緩存的大小

在非阻塞代碼的結構中經(jīng)常會用到隊列、堆棧這樣的結構,用作緩存,具體表現(xiàn)為一個數(shù)組,在RAM大小有限的情況下,應根據(jù)實際需要適當剪裁緩存區(qū)的大小,例如本案例中,鍵盤為慢速輸入設備,而設備功能單一只是對按鍵鍵值傳輸,因此,可以將按鍵緩存區(qū)和串口緩存區(qū)的大小減小。

//滿洲里國峰電子科技 guofengdianzi.com//微信:GuoFengDianZi//已下代碼基于STC89C52#define TXBUF_SIZE 64//例如串口發(fā)送緩存unsigned char TX_BUFF[TXBUF_SIZE];//可考慮將TXBUF_SIZE的大小改小//#define TXBUF_SIZE 8然而修改了發(fā)送緩存的大小后,使用printf需要注意,例如:

//滿洲里國峰電子科技 guofengdianzi.com//微信:GuoFengDianZi//已下代碼基于STC89C52#define TXBUF_SIZE 4//例如串口發(fā)送緩存unsigned char TX_BUFF[TXBUF_SIZE];printf("------"):使用串口助手打印:

圖2:緩存不夠,打印不完整

從圖2中可以看出值只打印出了5個橫線,說明緩存太小,后面幾個橫線打印不出來,這種情況在打印漢字的時候會出現(xiàn)亂碼,需要注意。

將大型的數(shù)組放在外部RAM

STC89C52提供256字節(jié)的外部RAM,可以將大型的數(shù)組,緩存區(qū)放入其中,使用xdata關鍵字,例如上面的串口緩存區(qū):

//滿洲里國峰電子科技 guofengdianzi.com//微信:GuoFengDianZi//已下代碼基于STC89C52#define TXBUF_SIZE 64//例如串口發(fā)送緩存unsigned char xdata TX_BUFF[TXBUF_SIZE];//可考慮將TXBUF_SIZE的大小改小//#define TXBUF_SIZE 8作者:瀟灑的電磁波(專業(yè):射頻芯片設計、雷達系統(tǒng)、嵌入式。歡迎大家項目合作交流。)

微信:GuoFengDianZi

引用:

[1]:鍵盤矩陣+編碼器,串口通信-淘寶網(wǎng)

關鍵詞:空間,使用

74
73
25
news

版權所有? 億企邦 1997-2025 保留一切法律許可權利。

為了最佳展示效果,本站不支持IE9及以下版本的瀏覽器,建議您使用谷歌Chrome瀏覽器。 點擊下載Chrome瀏覽器
關閉