欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136
標題:
Keil匯編進階指南(1) - 編譯與鏈接
[打印本頁]
作者:
Astrix
時間:
2024-11-28 23:39
標題:
Keil匯編進階指南(1) - 編譯與鏈接
作為大家接觸C51點燈用的語言(也可能不是),但看見身邊大多數人仍然沿用舊版的匯編寫法,故作此指南
首先,該文章所有的內容參照keil的相關文檔,強烈建議使用keil μvision4及以上版本,另外keil的官方文檔是以編譯器版本9.61編撰的,部分內容可能未在舊版更新(比如MPL)
指路:developer.arm.com/documentation/101655/0961
編譯與鏈接
在開始進一步匯編的編程之前,我們有必要重新溫習一下整個Keil C51編譯器的運作,在官方文檔中提供了這樣一個圖
ee282ec2-c2aa-44fa-8c9d-e69ab3fcf73f.png
(55.69 KB, 下載次數: 0)
下載附件
2024-11-28 23:42 上傳
可以看見,程序并不是直接從C編譯而來,首先C要編譯成object文件,需要注意的是在這個時候文件并沒有進行鏈接,也就是所有的函數跳轉都是標記而不是地址,然后經過BL51進行鏈接,BL51會將所有的函數塊還有內存變量之類的亂七八糟的東西進行妥善安置并確定好最終的地址,然后替換掉標簽(這個過程可以看到會生成MAP文件,里面記載著所有的函數段之類的位置),這個時候所有的標記就都被抹掉了,生成的OMF文件也就是最終文件,我們燒寫所用的HEX文件是經過OH51轉了一手,μvision的調試器使用的是omf文件
我在這里插一句,在Cx51也就是C編譯器那里實際上有一些更復雜的運作,一般來講,C語言首先會被編譯成匯編,然后再形成object文件,但是對于keil來說稍稍有些復雜,在此按下不表,在以下的指南中,我們都會認為C語言會被編譯成匯編然后再形成obj,這個過程同時造就了一些有趣的bug,比如同時定義兩個名字完全相同但是大小寫不一樣的變量,例如sec和SEC,keil會提示你multiple defination,也就是所謂的名字重復,主要原因就是keil的C編譯器分大小寫,匯編編譯器不分,C不報錯,因為它分大小寫,但匯編編譯器拿過來,他不管大小寫,一看倆一樣的名字,報ERROR吧
在明確了這一過程之后,我們開始進行下一步
作者:
frank8586
時間:
2025-6-2 11:15
感謝分享
歡迎光臨 (http://m.raoushi.com/bbs/)
Powered by Discuz! X3.1