簡體   English   中英

從C編譯器更改為C ++編譯器會導致MSP430固件的編譯器錯誤

[英]Change from C compiler to C++ compiler causes compiler errors for MSP430 firmware

我正在嘗試使用新的編譯器(C ++編譯器,在Visual Studio中使用VisualGDB)為Texas Instruments MSP430微控制器編譯一個經過驗證的真正固件。

該固件的所有先前版本均使用C編譯器進行了編譯,錯誤為零,警告為零。 從C編譯器更改為C ++編譯器一定是我遇到問題的原因。 (使用C編譯器編譯的代碼已經運行了五年沒有問題。)

給出以下代碼段:

#include <msp430x14x.h>
WDTCTL = WDTPW+WDTHOLD;

我收到此錯誤:

錯誤:“ WDTCTL”未命名類型c:\\ msptest \\ LedBlink \\ LedBlink.cpp

WDTCLT在msp430x14x.h中聲明。

有人可以指出正確的方向嗎?

有兩種可能:

  • 每個編譯器提供的msp430x14x.h是不同的-這種標頭沒有標准格式,每個供應商可能會定義不同的名稱。
  • 您正在使用一個編譯器的標頭和另一個編譯器的標頭,並且它使用了不兼容的編譯器擴展名或語法。

毫無疑問,這里有很多特定於編譯器的內容或“宏魔術”-您需要查看的正是預處理器如何擴展這些宏。 編譯器在抱怨擴展的代碼,而不是您發布的源代碼。

預處理程序在這里已用於創建否則將不是有效的C或C ++的語法,因此,如果不考慮擴展,就無法確定太多內容。 而且,由於每個編譯器可能提供不同的msp430x14x.h,而又不確切知道使用了什么C和什么C ++編譯器,因此在這兩者上也不能說太多。 請記住,必須考慮完全擴展-因此,如果根據其他宏定義了宏,則也必須對其進行擴展。 GCC有一個選項top輸出預處理器輸出,或者您可以直接運行預處理器(可執行文件為“ cpp”)。

問題在於WDTCTL是使用sfrw定義的,盡管未在代碼中顯示,但sfrwiomacros.h中定義為內聯asm語句。 顯然,嵌入式asm將取決於處理器,適用於msp430的東西在Visual Studio中將不起作用。

感謝您的答復。 這些回答對我提出的問題沒有幫助。

我發現並糾正了問題。 我必須承認,問題是我的粗心大意。 我將代碼從完整的C程序剪切並粘貼到測試程序中,省略了

int main()

因此,編譯器抱怨的賦值語句在源代碼的錯誤范圍內。

我過早地發布了我的問題。

就是說,您的答案對於決定繼續使用GCC編譯器(以Visual Studio為IDE)或使用與該固件所有以前版本相同的編譯器最為有用。 我從您提供的答案中學到了很多東西。

謝謝!

暫無
暫無

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

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