2015-06-12 34 views
0

如何在不同的微控制器系列IDE /編譯器上編譯不同的微控制器。嵌入式,是不是可以使用AVR/8051編譯器編譯PIC控制器

例如,我有8051 keil uVision IDE。我需要編譯PIC或AVR控制器的代碼。 是否有可能通過更改IDE中的任何內部設置? 或通過添加控制器特定的頭文件等?

的實際答案我在這裏是必須的,

什麼IDE /編譯器將在KEIL的設備列表或AVR Studio或PIC等選擇特定的「微控制器」之後添加到代碼..?

+0

據我所知,Eclipse支持所有的家庭控制器。但即使它需要平臺依賴工具鏈等..對於不同的控制器 –

+1

「Eclipse支持...」:呃..不是真的。 Eclipse只支持各種代碼編譯器/等。 ,這在短期內支持各種CPU。但是,即使使用相同的CPU內核,您的代碼很可能無法在重新編譯後運行。對於不同的體系結構,只要忘記它。你必須重寫所有與硬件有關的部分 - 至少,如果邏輯部分是正確設計的(例如,對於16位值不是int,而是int16_t等) – Olaf

+1

你需要研究在做其他事情之前,C代碼會編譯成機器代碼。 – Lundin

回答

4

在keil或AVR Studio或PIC等設備列表中選擇特定的「微控制器」之後,IDE /編譯器將添加到代碼中。

你錯了。讓我們採取不同的方法:

將C程序看作是處理器的規範,即以可讀語言描述它應該如何順序執行。

現在每個處理器都有不同的硬件架構和不同的指令集來控制它。

通常,C編譯器會將C代碼轉換爲爲該特定處理器指定的彙編(.asm/.a)指令。

因此,針對不同體系結構的C編譯器一起編譯一個不同的編譯器。

在Eclipse或IAR工具鏈中,對不同的處理器使用不同的編譯器。

+0

謝謝Vagish,得到它 –

+0

好的編譯器生成輸出文件之前,從C代碼生成特定的控制器相關的.ASM代碼。如果不同控制器系列的編譯器只做這個不同的事情,那麼如果我們直接在ASM中開發代碼,我們可以使用任何編譯器生成輸出(十六進制)文件嗎? –

+0

@LokeshVGowda:從[Wikipedia](https://en.wikipedia.org/wiki/List_of_CPU_architectures)開始,然後點擊鏈接。有不同的CPU體系結構,每個具有非常不同的指令集,寄存器組,特徵,字寬等。 – Olaf

2

編號PIC和AVR都是8051的獨立體系結構,因此需要完全不同的編譯器。您無法通過更改設置或添加頭文件將編譯器轉換爲另一個編譯器;他們太簡單了。

Keil不提供AVR或PIC架構的編譯器;您將需要安裝另一個開發環境來處理這些部分。

+0

謝謝你duskwuff,我的問題是編譯器在編譯期間在內部添加了什麼,特定於該控制器?我知道它不能被看到。但在生成hex文件之前,後臺編譯器在我們的c代碼中添加了一些控制器特定的東西? –

+1

作爲一個問題,這並沒有什麼意義,因爲你仍然假設有一些潛在的相似性。真的沒有。您所指的三個控制器(8051,AVR和PIC)都有完全不同的指令集,內存模型和外設。 – duskwuff

+0

@Lokesh V Gowda:對於那些文件或多或少由IDE默默添加的特定問題,在** 8051 **體系結構的_KeilμVision_IDE上,您通常可以找到2個文件STARTUP.A51和INIT.A51 C:\ Keil \ C51 \ LIB被添加。如果你想在調試器中看到發生了什麼,你可以明確地添加這些文件(init.a51應該是項目的最後一個文件)。這些文件適用於基於SilabsμC的我的系統。在該文件夾中,您可以找到來自其他供應商的其他基於8051的μC的其他類似文件。對於PIC或AVR,你必須將你的C代碼移植到其他IDE中 – NGI

1

有2種類型的編譯器

  1. 本土
  2. 交叉編譯的

本地在當你寫在高級語言程序的PC,並編譯使用,讓我們說「Visual Studio」它會在您的計算機上爲微處理器生成代碼。 (很可能是英特爾)。

編譯器將高級語言結構轉換爲微處理器的機器語言。

交叉編譯 交叉編譯器編譯器是其中的C代碼轉換成其它微處理器/微控制器的機器語言。

現在,像Keil uVision,IAR Embedded Workbench,Code Composer Studio這樣的工具可以在PC上運行,但是可以爲選定的微控制器創建機器碼。每個IDE都會提供它支持的處理器系列和部件號列表,並相應地編譯C代碼。

這些IDE提供了各種功能來根據硬件配置程序輸出。啓動和你提到的INIT.A51文件將在main()函數開始執行你的程序之前進行必要的硬件初始化。

所以,當您從設備列表編譯器中選擇特定的部件編號時,是否可以在上述部分上運行編譯輸出。例如:如果您的程序需要X數量的RAM並且控制器的內存量少於X,則會引發編譯器錯誤。

相關問題