久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 8570|回復: 17
打印 上一主題 下一主題
收起左側

51單片機會不會因為定義太多變量導致無法運行呢

  [復制鏈接]
跳轉到指定樓層
樓主
ID:479896 發表于 2019-3-18 00:43 來自手機 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
51單片機會不會因為  定義太多東西  而導致無法運行呢??             如果有。這么辦???         
分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復

使用道具 舉報

來自 2#
ID:401564 發表于 2019-3-18 23:37 | 只看該作者
就看你是什么變量了
如果是全局變量,這肯定是有上限的,就看單片機的RAM
但如果是局部變量,只要函數不要嵌套太多,那幾乎是沒有上限的
局部變量只在調用函數時用到當前地址,返回之后,這個地址就會空出來了
比如你有兩個延時函數,A和B
A函數里面用到變量  i
B函數里面也用到  i
當調用完A之后,再調用B,那么,實際上 i 只占用了一個地址

評分

參與人數 1黑幣 +50 收起 理由
admin + 50 回帖助人的獎勵!

查看全部評分

回復

使用道具 舉報

板凳
ID:362076 發表于 2019-3-18 07:41 | 只看該作者
不嚴格的說,只要你的變量總數不超過單片機的RAM范圍,就沒有什么影響。否則只能換用較大RAM的型號或者優化代碼。

評分

參與人數 1黑幣 +80 收起 理由
admin + 80 回帖助人的獎勵!

查看全部評分

回復

使用道具 舉報

地板
ID:277550 發表于 2019-3-18 07:44 | 只看該作者
肯定會的,,,精簡程序、精簡邏輯
回復

使用道具 舉報

5#
ID:164602 發表于 2019-3-18 07:54 | 只看該作者
如果定義變量太多而無法運行的話,程序在編譯時就會提示、報錯了,不會讓程序在執行過程中出問題。如果 報錯了,可以增加內存(外掛)的方法修改,或者選用RAM大的芯片。
回復

使用道具 舉報

6#
ID:492922 發表于 2019-3-18 08:33 | 只看該作者
可以在變量或者數組前加一個code標志位,將變量存儲位置由ram轉為flash中。
回復

使用道具 舉報

7#
ID:94031 發表于 2019-3-18 08:42 | 只看該作者
如果定義太多東西,超過了內存容量,就會導致無法運行,那就要優化,不要定義太多東西。要不就換內存大的單片機。
回復

使用道具 舉報

8#
ID:492935 發表于 2019-3-18 09:24 | 只看該作者
不會哦
回復

使用道具 舉報

9#
ID:458411 發表于 2019-3-18 09:53 | 只看該作者
精煉是比較好的
回復

使用道具 舉報

10#
ID:491577 發表于 2019-3-18 11:21 | 只看該作者
如果變量多要加關鍵字xdata,如:u8 xdata cs[512]; 不加編譯會報錯,如果編譯能夠通過一般沒有問題,我的程序有2千個變量都沒有問題,STC8單片機,4k內存。
回復

使用道具 舉報

11#
ID:493158 發表于 2019-3-18 13:58 | 只看該作者
變量數量要小于單片機的RAM最大值,除此外還必須留有一定空閑的RAM空間給堆棧使用,否則可能造成堆棧溢出,程序跑飛。
回復

使用道具 舉報

12#
ID:493158 發表于 2019-3-18 14:11 | 只看該作者
seasonLin 發表于 2019-3-18 13:58
變量數量要小于單片機的RAM最大值,除此外還必須留有一定空閑的RAM空間給堆棧使用,否則可能造成堆棧溢出, ...

如果RAM空間內存不夠,可以嘗試以下方法:
1. 能用局部變量,就不用全局變量。
2. 函數嵌套不要過多(嵌套過多會浪費部分RAM)
3. 能用const類型的常量,就不用全局變量或者局部變量
4. 用部分flash替代RAM使用,僅適用于變量修改頻率超低的情況下,想想flash寫壽命,就知道當前產品合不合適使用該方式了。
回復

使用道具 舉報

13#
ID:492967 發表于 2019-3-18 14:25 | 只看該作者
單片機也是有一定內存的  如果超出內存范圍  肯定是不行的
回復

使用道具 舉報

14#
ID:339010 發表于 2019-3-18 14:30 | 只看該作者
我之前也遇到過這樣的問題,解決辦法有兩種:一是優化代碼,減少全局變量的定義,可以用指針替代;另外一種就是增加輔助存儲器,這樣也是可以解決的。
回復

使用道具 舉報

15#
ID:492576 發表于 2019-3-18 17:49 | 只看該作者
1  單片機一個引腳有多個功能是不會引起混亂的     因為它們是分時使用的
    或使用了這個功能   就不允許使用另一種功能了。
2  例如:   
    單片機的P0口的8 個引腳 即作為低8位地址總線   又作為8位數據總線
    它們不會發生沖突     在ALE為低電平時,P0口的8 個引腳作為低8位地址總線
    當ALE為高電平時,P0口的8 個引腳作為8位數據總線使用。
    是分時使用的  即不同的時間做為不同的引腳使用   所以在使用上是不會發生沖突

    還有 當P3.0和P3.1作為串口的數據輸入輸出線使用時,就不能作為一般I/O口使用了。
    也不會發生沖突的。
回復

使用道具 舉報

16#
ID:275449 發表于 2019-3-18 18:02 | 只看該作者
不會   但是變量太多會導致編譯器無法編譯通過  可以嘗試修改優化等級和大小模式
回復

使用道具 舉報

17#
ID:493415 發表于 2019-3-18 18:42 | 只看該作者
一般是不會的,大多數編寫的程序遠小于其上限的大小
回復

使用道具 舉報

18#
ID:98526 發表于 2019-3-19 09:42 | 只看該作者
如果idata變量用得過多,而且中斷或者函數嵌套嚴重的話,會造成堆棧溢出。然后產生懷疑人生的不可預知的程序錯誤。
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

手機版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 中日韩毛片 | 免费一区二区三区在线视频 | 免费骚视频 | 日本不卡一区二区三区在线观看 | 亚洲风情在线观看 | www成人免费| 日韩国产一区二区三区 | 国产小视频自拍 | 一级黄色影片在线观看 | 全免费a级毛片免费看视频免 | 久久久久久久久久久91 | 国产福利在线免费观看 | 伊人久久综合 | 日本精品一区二区在线观看 | 日本高清中文字幕 | 狠狠狠干 | 欧美日韩a | 久久国产精品一区 | 久草免费在线视频 | 人人爽人人爽人人片av | 亚洲永久字幕 | 黄视频在线网站 | 超碰精品在线 | 欧美一区二区三区在线观看 | 91在线视频观看免费 | 粉嫩av | 不卡一区| 欧美日韩国产一区二区 | 亚洲高清在线免费观看 | 久久久久久久国产精品视频 | 色毛片| 午夜精品福利视频 | 日韩欧美1区2区 | 国产精品久久久久久影视 | 日本一区二区高清不卡 | 青娱乐av| www.日韩| 97超碰站 | 丁香久久 | 日韩毛片 | 久久精品国产免费高清 |