久久中文视频-久久中文网-久久中文亚洲国产-久久中文字幕久久久久-亚洲狠狠成人综合网-亚洲狠狠婷婷综合久久久久
右欄
歡迎您:游客!請先
登錄
或
注冊
風格
恢復默認設置
|
展區
文件集瀏覽
圖片集瀏覽
Flash瀏覽
音樂集瀏覽
電影集瀏覽
|
搜索
|
社區游戲中心
曙海教育集團論壇
→
單片機專區
→
單片機初中級
→ 關于c51內存優化的帖子問題
新的主題
投票帖
交易帖
小字報
下一主題 >>
<< 上一主題
共有
7994
人關注過本帖
樹形
打印
主題:關于c51內存優化的帖子問題
wangxinxin
小
大
1樓
個性首頁
|
博客
|
信息
|
搜索
|
郵箱
|
主頁
|
UC
加好友
發短信
等級:青蜂俠
帖子:
1393
積分:14038
威望:0
精華:0
注冊:
2010-11-12 11:08:23
關于c51內存優化的帖子問題
Post By:2010-12-7 14:50:06
以下內容含腳本,或可能導致頁面不正常的代碼
天祥老師原帖如下: 對 51 <span class="t_tag" onclick="tagshow(event)" href="tag.php?name=%B5%A5%C6%AC%BB%FA">單片機</span>內存的認識,很多人有誤解,最常見的是以下兩種 ① 超過變量128后必須使用compact模式編譯 實際的情況是只要內存占用量不超過 256.0 就可以用 small 模式編譯 ② 128以上的某些地址為特殊寄存器使用,不能給<span class="t_tag" onclick="tagshow(event)" href="tag.php?name=%B3%CC%D0%F2">程序</span>用 與 <img alt="" src="http://www.51c51.com/bbs/images/smilies/default/titter.gif" border="0" smilieid="9"/>C 機不同,51 單片機不使用線性編址,特殊寄存器與 RAM 使用重復的重復的地址。但訪問時采用不同的<span class="t_tag" onclick="tagshow(event)" href="tag.php?name=%D6%B8%C1%EE">指令</span>,所以并不會占用 RAM 空間。 由于內存比較小,一般要進行內存優化,盡量提高內存的使用效率。 以 Keil C 編譯器為例,small 模式下未指存儲類型的變量默認為data型,即直接尋址,只能訪問低 128 個字節,但這 128 個字節也不是全為我們的程序所用,寄存器 R0-R7必須映射到低RAM,要占去 8 個字節,如果使用寄存組切換,占用的更多。 所以可以使用 data 區最大為 120 字節,超出 120 個字節則必須用 idata 顯式的指定為間接尋址,另外堆棧至少要占用一個字節,所以極限情況下可以定義的變量可占 247 個字節。當然,實際應用中堆棧為一個字節肯定是不夠用的,但如果<span class="t_tag" onclick="tagshow(event)" href="tag.php?name=%C7%B6%CC%D7">嵌套</span>調用層數不深,有十幾個字節也夠有了。 為了驗上面的觀點,寫了個例子 #define LEN 120 data UCHAR tt1[LEN]; idata UCHAR tt2[127]; void main() { UCHAR i,j; for(i = 0; i < LEN; ++i ) { j = i; tt1[j] = 0x55; } } 可以計算 R0-7(8) + tt1(120) + tt2(127) + SP(1) 總共 256 個字節 <span class="t_tag" onclick="tagshow(event)" href="tag.php?name=keil">keil</span> 編譯的結果如下: Program Size: data=256.0 xdata=0 code=30 creating hex file from ".\Debug\Test"... ".\Debug\Test" - 0 Error(s), 0 Warning(s). (測試環境為 XP + Keil C 7.5) 這段代碼已經達到了內存分配的極限,再定義任何全局變量或將數組加大,編譯都會報錯 107 這里要引出一個問題:為什么變量 i、j 不計算在內? 這是因為 i、j 是局部變量,編譯器會試著將其優化到寄存器 Rx 或棧。問題也就在這了,如果局部變量過多或定義了局部數組,編譯器無法將其優化,就必須使用 RAM 空間,雖然全局變量的分配經過精心計算沒有超出使用范圍,仍會產生內存溢出的錯誤! 而編譯器是否能成功的優化變量是根據代碼來的 上面的代碼中,循環是<a style="TEXT-DECORATION: underline" href="http://www.sogou.com/sogoupedia?query=%D3%B7" target="_blank"><font color="#0000ff">臃</font></a>腫的,變量 j 完全不必要,那么將代碼改成 UCHAR i; UCHAR j; for(i = 0; i < LEN; ++i ) { tt1<i> = 0x55; } 再編譯看看,出錯了吧! 因為編譯器不知道該如何使用 j,所以沒能優化,j 須占 RAM 空間,RAM 就溢出了。 (<span class="t_tag" onclick="tagshow(event)" href="tag.php?name=%D6%C7%C4%DC">智能</span>一點的編譯器會自動將這個無用的變量去掉,但這個不在討論之列了) ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// <font color="#f73809" size="5">我現在仿照上面那個列子</font> <font color="#f73809" size="5">#include<reg52.h></font> <font color="#f73809" size="5">#define LEN 120 data UCHAR tt1[LEN]; idata UCHAR tt2[127]; void main() { UCHAR i,j; for(i = 0; i < LEN; ++i ) { j = i; tt1[j] = 0x55; } } </font> <font color="#f73809" size="5">在smalll模式下編譯怎么出現這樣的錯誤,在compact 和larger也出線這樣的結果,怎么回事?</font> <font color="#f73809" size="5">Build target 'Target 1' assembling STARTUP.A51... linking... *** WARNING L1: UNRESOLVED EXTERNAL SYMBOL SYMBOL: ?C_START MODULE: STARTUP.obj (?C_STARTUP) *** WARNING L2: REFERENCE MADE TO UNRESOLVED EXTERNAL SYMBOL: ?C_START MODULE: STARTUP.obj (?C_STARTUP) ADDRESS: 000DH Program Size: data=9.0 xdata=0 code=15 creating hex file from "neicun"... "neicun" - 0 Error(s), 2 Warning(s).</font> <font color="#f73809" size="5">兩個警告 我認為那兩個只是c編譯器把他當作警告了,其實應該是錯誤.</font> <font color="#f73809" size="5">警告1:沒有引用外部變量</font> <font color="#f73809" size="5">警告2:應該也是關于外部變量的事</font> <font color="#f73809" size="5">我定義的data 和idata都是C52自帶的RAM (256Byte)沒有定義外部變量,怎么說我引用了外部變量呢?</font> <font color="#f73809" size="5">謝謝大家!!!</font> </i>
說明:
上面顯示的是代碼內容。您可以先檢查過代碼沒問題,或修改之后再運行.
支持
(
0
)
中立
(
0
)
反對
(
0
)
單帖管理
舉報帖子
使用道具
|
引用
|
回復
下一主題 >>
<< 上一主題
返回版面帖子列表
關于c51內存優化的帖子問題
回復標題:
上傳附件:
簽名
:
不顯示
顯示
RSS2.0
Xhtml無圖版
Xslt無圖版
Copyright © 2000 - 2009
曙海
教育集團
Powered By
曙海教育集團
Version 2.2
頁面執行時間 0.01563 秒, 3 次數據查詢
主站蜘蛛池模板:
深夜福利网址
|
国产精品无码久久久久
|
精品免费在线视频
|
在线人成精品免费视频
|
一级毛片一片毛
|
亚洲欧美日韩精品久久亚洲区色播
|
日本久久精品视频
|
91精品国产福利尤物免费
|
国产精品国产亚洲精品看不卡
|
女在床上被男的插爽叫视频
|
国产欧美亚洲精品一区
|
久草青青
|
久久久久久久网站
|
在线国产网站
|
99色播
|
国产精品热久久毛片
|
欧美国产日本精品一区二区三区
|
免费人成观看在线网
|
亚洲特一级毛片
|
91精品国产综合久久欧美
|
成人精品综合免费视频
|
一级做a爰片性色毛片男
|
2021国产精品系列一区二区
|
国产精品午夜波多野结衣性色
|
久久99热精品免费观看k影院
|
久草在在线视频
|
欧美一级在线免费观看
|
在线观看国产一区二区三区
|
国产精品久久久久久久久久一区
|
久草福利在线观看
|
成人网18免费下
|
国产男女免费完整视频
|
日韩美一区二区三区
|
在线观看日韩www视频免费
|
欧美一区二区不卡视频
|
久久精品成人欧美大片免费
|
亚洲综合中文
|
日本美女福利视频
|
国产系列在线播放
|
美女毛片在线看
|
亚洲综合精品一区二区三区中文
|