在codewarrior編譯器中,生成的map檔案中target section(編譯目標)中有一項時memory model選項,這個的改變影響生成的s19檔案,最明顯的地方在於生成的s19檔案中位於0xfffe開頭的位址中的資料會被改變。
對於位址模型的介紹,摘抄自
當使用專案嚮導建立乙個新的codewarrior專案時,使用者被要求選擇乙個位址模型,選項有:small、banked和large位址模型。選擇的位址模型將決定codewarrior的鏈結器會預設地會把你的**以及變數放在**,以及決定codewarrior的編譯器會怎麼產生訪問你的物件的指令。
編譯器選項
ansi庫
鏈結器引數檔案
編譯器的行為受到選擇的位址模型影響。codewarrior專案嚮導在你專案的編譯器選項中插入乙個 -m 選項。有三種引數,取決於模型:-ms、-mb或-ml。這個選項指示編譯器根據模型的假定來編譯。
small位址模型對應選項 -ms。編譯器不會插入任何指令來處理任何分頁暫存器。變數將會被直接訪問non-banked位址,並且你的**會使用jsr/rts指令來執行。
banked位址模型對應選項 -mb。當訪問你的**的時候,編譯器會使用處理ppage暫存器的指令。在呼叫乙個函式的時候會使用call指令。call指令會負責在執行你的函式前把它的分頁號寫到ppage暫存器中。變數則會預設的按照non-banked位址的方式訪問。
large位址模型對應選項 -ml。編譯器將使用call指令來訪問你的**,並且在訪問ram和eeprom變數前也會插入分頁處理指令,它們被預設放在分頁位址。因此這個位址模型對**大小和執行時間非常不友好,在大部分情況下不推薦。
如果你需要訪問分頁區變數,大部分情況下用這個方法就夠了:選擇banked位址模型,然後每次變數要放到分頁區的時候都用特別識別符號來告知編譯器。文件的後面部分會討論怎麼訪問分頁區變數。這使得你可以只在需要訪問分頁區變數時才進行分頁訪問,而不是預設對所有變數都這麼訪問。
修改方式如下圖:
按照前面的描述可以修改。
Linux 中 VI VIM 編譯器
1.vi 與 vim 所有的 unix like 系統都會內建 vi 文字編輯器,其他的文書編輯器則不一定會存在,但是目前我們使用比較多的是 vim 編輯器。vim 具有程式編輯的能力,可以主動的以字型顏色辨別語法的正確性,方便程式設計。vim是從 vi 發展出來的乙個文字編輯器。補完 編譯及錯誤跳...
編譯方舟編譯器
環境 mac os parallels desktop 安裝ubuntu 16.04 安裝基礎包 sudo apt get y install openjdk 8 jdk git core gnupg flex bison gperf build essential zip curl zlib1g ...
方舟編譯器編譯
目錄環境變數 安裝 ninja 和 gn 編譯成功 總結2019.9.1 編譯華為方舟編譯器原始碼 這篇文章僅僅是關於如何搭建環境並進行編譯。本機環境 ubuntu 16 server.一定要好好看參考文件!建議使用root賬戶操作 先 clone 原始碼華為開源平台 對應的參考文件openarkc...