簡體   English   中英

用於8051微控制器的C ++?

[英]C++ for 8051 microcontroller?

有人可以告訴我是否可以使用C ++程序刻錄8051微控制器? 我試過在線搜索它,但似乎無法確定是否可能。 Keil使用C,但是我需要編寫的程序是字符串密集型的,與C#相比,C是非常不符合字符串的,這是我以前習慣使用的。 目前,我正在嘗試用C語言編寫代碼,但它變得非常混亂,所以如果我能用C ++編寫它,我會非常放心。

我需要一個C ++編譯器來創建一個Hex輸出文件,然后可以將其燒錄到微控制器上。 有人聽說過我可以使用的東西嗎? 而且,C使用一個頭文件,讓你引用端口,但當我試圖找出這個頭文件是否在C ++中使用時,我找不到任何關於它的信息。

另外:我正在使用的微控制器是Atmel AT89C51,具有4K字節的可重編程閃存和128 x 8位內部RAM。 這實際上是用於大學項目的機器人,編碼實際上並不需要OOP。 它只有很多以2D字符串數組格式查找的表。 我想考慮C ++的唯一原因是因為操作字符串似乎有些混亂(由於我缺乏C語言專業知識)。

有沒有人知道頭文件? C使用#include reg51.h但我試圖找出它是否適用於C ++並且無法在其上找到任何內容。

首先,我會懷疑這是否真的是一個好主意。 我理解在一般情況下想要在C語言上使用c ++的原因,但在8位哈佛架構微控制器的情況下,我會警告這一點。

要記住的事項包括:

  • 源級調試支持將介於較差和不可能之間。
  • 8位機器上OOP的運行時開銷。 我強烈建議在提交工具之前做一些嚴肅的基准測試。
  • 內存在嵌入式系統中並不便宜,您無疑會遇到一些地址空間限制。

此外,如果您真的要進行一些嚴格的字符串處理,我建議使用C標准庫而不是字符串對象庫,因為您可以更好地控制就地替換,因此字符串副本在代碼中變得非常明顯。

請發布一些您計划使用的微控制器(數據存儲器,程序存儲器),以及是否有任何性能要求必須滿足,以便我們可以更具體地幫助您。

IAR Systems有一個8051編譯器 ,它可以本地編譯C ++(不能轉換為C),源代碼級調試也不應該是一個問題。

ceibo有一個商業編譯器。

但是,如果你可以使用c ++(特別是STL字符串)取決於你將擁有多少資源(ROM和RAM)。

有一個8051網站,有論壇,教程和下載,你可以獲得更多資源來編程8051。

您可能需要考慮提供有關您打算在該微控制器上運行的程序類型的其他詳細信息:

您在發布時提到了C ++和C#,這兩者肯定不是理想用於微控制器上的重字符串處理,更不用說您可能正在考慮大量使用STL,這將進一步增加STL的大小。可執行文件?

那么你的主要限制是什么(RAM,CPU,ROM等)?

如果您真的認為需要以OO方式執行此字符串處理,您可能需要考慮在控制器上運行輕量級嵌入式腳本解釋器,以便您可以使用腳本語言提供字符串處理例程,而解釋器本身將ANSI C編譯為HEX文件(例如luanasal似乎都是合適的候選者)。

但是,考慮到諸如lua之類的腳本語言通常會在空間中施加大約100kb +的開銷,Nasal稍微更輕,如果禁用某些擴展,可以編譯為50-70 kb。

此外,還有其他腳本解釋器可用於嵌入式平台。

IAR似乎為8051的8051的 C / C ++編譯器提供了一個C / C ++編譯器 - 但在完全披露中,我只使用Keil的C編譯器進行8051開發。

至於頭文件問題:頭文件通常由IDE供應商或硬件制造商分發,並且通常提供寄存器映射的符號表示。 可能需要適度的按摩量才能將基於C的頭文件合並到C ++項目中。 - 如果您要切換IDE /編譯器,您通常可以期望對源代碼進行一些按摩以適應新的編譯器。 (閱讀:從C ++代碼庫訪問C代碼通常會讓我停下來做一天正確。)

是的,您可以使用C ++程序刻錄8051微控制器的內存,還有幾個可用於創建Hex文件然后將文件發送到微控制器的免費編譯器。 您可以在包含教程,編譯器,模擬器等綜合文章中找到有關編程微控制器過程的任何信息

有幾種商業編譯器可供使用。 業界第一名來自Keil Software

您可以嘗試將C ++代碼轉換為C代碼,然后使用現有的C編譯器進行編譯。

您應該能夠創建一個調用C ++編譯器的Makefile,然后運行C編譯器。

它不是最優雅的解決方案,但在8051等小型設備上使用C ++確實很不尋常。

免責聲明:我實際上沒有嘗試過這么好運! 如果是我,我會堅持使用C並編寫一些強大的字符串處理函數。

其他人提到8051有C ++編譯器。我猜你的主要問題是成本。 許多公司將允許您免費編寫程序集,但對C或C ++編譯器收費。 我們可能在這里說幾百美元。

我的主要問題是你的代碼中有什么“混亂”? 您試圖在C ++中使用哪些功能在C中變得混亂? C ++中的某些功能無法很好地轉換為這樣的最小嵌入式環境(流,構造函數,析構函數等)。 C可以使用結構來執行許多面向對象的類型函數。 應該避免使用其他功能(任何具有動態內存管理的功能)。

我會努力讓它在C中運行,然后才可能花費大量資金並獲得大而緩慢且難以處理的代碼。

聽起來你想要一個C ++編譯器,以便你可以使用std::string std::string需要一個堆。 你不會有一個只有128x8位內部RAM的可用堆,特別是對於std::string對象不會考慮如果你從串口讀取一個80個字符的字符串,那么它占用了60%以上的可用內存。 你還要使用外置RAM嗎? 多少?

您的固件是否真的需要在運行時處理字符串處理? 例如,它是通過串口還是其他接口發送/接收命令? 如果是這樣,您應該盡可能地將字符串處理與其余代碼隔離開來,並在別處使用標記(枚舉類型或#defined積分常量)。 如果沒有,通過使用令牌而不是字符串,您可以更輕松地將邏輯擬合到處理器的約束內存中。

此外,如果您確實需要進行字符串解析,最好還是編寫一個一次處理一個字符的狀態機,這樣您就不必處理完整的字符串。 同樣,128字節不是用於字符串處理的大量空間。

為什么不使用C字符串庫? bstrlib或類似? C ++並不是你需要的微控制器。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM