色哟哟视频在线观看-色哟哟视频在线-色哟哟欧美15最新在线-色哟哟免费在线观看-国产l精品国产亚洲区在线观看-国产l精品国产亚洲区久久

電子發燒友App

硬聲App

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示
電子發燒友網>電子資料下載>嵌入式開發>51單片機一般如何進行內存優化?實例+要點資料下載

51單片機一般如何進行內存優化?實例+要點資料下載

2021-04-03 | pdf | 100.91KB | 次下載 | 2積分

資料介紹

51單片機的內存優化最常見的是以下兩種 ① 超過變量128后必須使用compact模式編譯,實際的情況是只要內存占用量不超過 256.0 就可以用 small 模式編譯 ② 128以上的某些地址為特殊寄存器使用,不能給程序用.與 PC 機不同,51 單片機不使用線性編址,特殊寄存器與 RAM 使用重復的重復的地址。但訪問時采用不同的指令,所以并不會占用 RAM 空間。 ③是否把一些固定的代碼存貯到了CODE區。如果把沒變化的數據也存儲到DATA去,就太浪費了! 由于內存比較小,一般要進行內存優化,盡量提高內存的使用效率。 以 Keil C 編譯器為例,small 模式下未指存儲類型的變量默認為data型,即直接尋址,只能訪問低 128 個字節,但這 128 個字節也不是全為我們的程序所用,寄存器 R0-R7必須映射到低RAM,要占去 8 個字節,如果使用寄存組切換,占用的更多。 所以可以使用 data 區最大為 120 字節,超出 120 個字節則必須用 idata 顯式的指定為間接尋址,另外堆棧至少要占用一個字節,所以極限情況下可以定義的變量可占 247 個字節。當然,實際應用中堆棧為一個字節肯定是不夠用的,但如果嵌套調用層數不深,有十幾個字節也夠有了。 為了驗上面的觀點,寫了個例子 #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 個字節 keil 編譯的結果如下: 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 空間,雖然全局變量的分配經過精心計算沒有超出使用范圍,仍會產生內存溢出的錯誤! 而編譯器是否能成功的優化變量是根據代碼來的。 上面的代碼中,循環是臃腫的,變量 j 完全不必要,那么將代碼改成 UCHAR i; UCHAR j; for(i = 0; i < LEN; ++i ) { tt1[i] = 0x55; } 再編譯看看,出錯了吧!因為編譯器不知道該如何使用 j,所以沒能優化,j 須占 RAM 空間,RAM 就溢出了。(智能一點的編譯器會自動將這個無用的變量去掉,但這個不在討論之列了)。另外,對 idata 的定義的變量最好放在 data 變量之后,對于這一種定義 uchar c1; idata uchar c2; uchar c3; 變量 c2 肯定會以間接尋址,但它有可能落在 data 區域,就浪費了一個可直接尋址的空間。 變量優化一般要注意幾點: ①讓盡可能多的變量使用直接尋址,提高速度 假如有兩個單字節的變量,一個長119的字符型數組 因為總長超過 120 字節,不可能都定義在 data 區 按這條原則,定義的方式如下: ata UCHAR tab[119]; data UCAHR c1; idata UCHaR c2; 但也不是絕的,如果 c1, c2 需要以極高的頻率訪問,而 tab 訪問不那么頻繁,則應該讓訪問量大的變量使用直接尋址: data UCAHR c1; data UCHaR c2; idata UCHAR tab[119]; 這個是要根據具體項目需求來確定的 ②提高內存的重復利用率 就是盡可能的利用局部變量,局部變量還有個好處是訪問速度比較快 由前面的例子可以看出,局部變量 i, j 是沒有單獨占用內存的 子程序中使用內存數目不大的變量盡量定義為局部變量 ③對于指針數組的定義,盡可能指明存儲類型 盡量使用無符號類型變量 一般指針需要一個字節額外的字節指明存儲類型 8051 系列本身不支持符號數,需要外加庫來處理符號數,一是大大降低程序運行效率,二是需要額外的內存 ④避免出現內存空洞 可以通過查看編譯器輸出符號表文件(.M51)查看 對前面的代碼,M51文件中關于內存一節如下: * * * * * * * D A T A M E M O R Y * * * * * * * REG 0000H 0008H ABSOLUTE "REG BANK 0" DATA 0008H 0078H UNIT ?DT?TEST IDATA 0080H 007FH UNIT ?ID?TEST IDATA 00FFH 0001H UNIT ?STACK 第一行顯示寄存器組0從地址0000H開始,占用0008H個字節 第二行顯示DATA區變量從0008H開始,占用0078H個字節
下載該資料的人也在下載 下載該資料的人還在閱讀
更多 >

評論

查看更多

下載排行

本周

  1. 1感應筆電路圖
  2. 0.06 MB   |  7次下載  |  免費
  3. 2美的電磁爐維修手冊大全
  4. 1.56 MB   |  5次下載  |  5 積分
  5. 3Cortex-M3/M4F指令集技術用戶手冊
  6. 2.28MB   |  3次下載  |  免費
  7. 4SMD LED選型手冊 貼片燈珠
  8. 5.47 MB   |  3次下載  |  免費
  9. 5基于PLC的拉絲機張力控制系統研究
  10. 0.14 MB   |  2次下載  |  5 積分
  11. 6LZC3106G高性能諧振控制器中文手冊
  12. 1.29 MB   |  1次下載  |  1 積分
  13. 7JL2233B集成電平轉換功能的LDO中文手冊
  14. 0.50 MB   |  1次下載  |  免費
  15. 8加密芯片的一種破解方法和對應加密方案改進設計
  16. 0.29 MB   |  1次下載  |  免費

本月

  1. 1使用單片機實現七人表決器的程序和仿真資料免費下載
  2. 2.96 MB   |  44次下載  |  免費
  3. 2UC3842/3/4/5電源管理芯片中文手冊
  4. 1.75 MB   |  19次下載  |  免費
  5. 3華瑞昇CR216芯片數字萬用表規格書附原理圖及校正流程方法
  6. 0.74 MB   |  14次下載  |  3 積分
  7. 4DMT0660數字萬用表產品說明書
  8. 0.70 MB   |  13次下載  |  免費
  9. 53314A函數發生器維修手冊
  10. 16.30 MB   |  13次下載  |  免費
  11. 6TPS54202H降壓轉換器評估模塊用戶指南
  12. 1.02MB   |  8次下載  |  免費
  13. 7STM32F101x8/STM32F101xB手冊
  14. 1.69 MB   |  8次下載  |  1 積分
  15. 8感應筆電路圖
  16. 0.06 MB   |  7次下載  |  免費

總榜

  1. 1matlab軟件下載入口
  2. 未知  |  935119次下載  |  10 積分
  3. 2開源硬件-PMP21529.1-4 開關降壓/升壓雙向直流/直流轉換器 PCB layout 設計
  4. 1.48MB  |  420062次下載  |  10 積分
  5. 3Altium DXP2002下載入口
  6. 未知  |  233084次下載  |  10 積分
  7. 4電路仿真軟件multisim 10.0免費下載
  8. 340992  |  191367次下載  |  10 積分
  9. 5十天學會AVR單片機與C語言視頻教程 下載
  10. 158M  |  183335次下載  |  10 積分
  11. 6labview8.5下載
  12. 未知  |  81581次下載  |  10 積分
  13. 7Keil工具MDK-Arm免費下載
  14. 0.02 MB  |  73807次下載  |  10 積分
  15. 8LabVIEW 8.6下載
  16. 未知  |  65987次下載  |  10 積分
主站蜘蛛池模板: 超碰97人人做人人爱网站| 用震蛋调教女性下面视频| 亚洲欧美日本中文子不卡| 成人无码精品1区2区3区免费看| 久久这里的只有是精品23| 亚洲乱码中文字幕久久| 国产乱码卡二卡三卡4W| 天天躁夜夜踩很很踩2022| 高龄熟女50P| 手机看片成人| 国产久久精品热99看| 无码人妻少妇色欲AV一区二区 | 2019久久视频这里有精品15| 久久极品视频| 亚洲综合AV色婷婷五月蜜臀| 久久伊人在| 97在线国内自拍视频| 欧美高清vivoesosexo10| JIZZ19学生第一次| 日韩欧美视频一区| 国产精品97久久久久久AV色戒 | 日本一本免费线观看视频| 初中XXXXXL| 午夜国产精品视频在线| 国产小视频在线高清播放| 亚洲日韩成人| 猫咪www958ii| 成人公开免费视频| 玩50岁四川熟女大白屁股直播| 国产一区二区三区影院| 与子敌伦刺激对白亂輪亂性| 女王黄金vk| 国产精品成人免费| 一手揉着乳头一手模仿抽插视频| 美女被免费喷白浆视频| 第一次处破女完整版电影| 学校捏奶揉下面污文h| 久久精品热老司机| zoovideo人与驴mp4| 亚洲 日韩 在线 国产 精品| 理论片午午伦夜理片2021|