[英]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中聲明。
有人可以指出正確的方向嗎?
有兩種可能:
毫無疑問,這里有很多特定於編譯器的內容或“宏魔術”-您需要查看的正是預處理器如何擴展這些宏。 編譯器在抱怨擴展的代碼,而不是您發布的源代碼。
預處理程序在這里已用於創建否則將不是有效的C或C ++的語法,因此,如果不考慮擴展,就無法確定太多內容。 而且,由於每個編譯器可能提供不同的msp430x14x.h,而又不確切知道使用了什么C和什么C ++編譯器,因此在這兩者上也不能說太多。 請記住,必須考慮完全擴展-因此,如果根據其他宏定義了宏,則也必須對其進行擴展。 GCC有一個選項top輸出預處理器輸出,或者您可以直接運行預處理器(可執行文件為“ cpp”)。
問題在於WDTCTL
是使用sfrw
定義的,盡管未在代碼中顯示,但sfrw
在iomacros.h中定義為內聯asm語句。 顯然,嵌入式asm將取決於處理器,適用於msp430的東西在Visual Studio中將不起作用。
感謝您的答復。 這些回答對我提出的問題沒有幫助。
我發現並糾正了問題。 我必須承認,問題是我的粗心大意。 我將代碼從完整的C程序剪切並粘貼到測試程序中,省略了
int main()
因此,編譯器抱怨的賦值語句在源代碼的錯誤范圍內。
我過早地發布了我的問題。
就是說,您的答案對於決定繼續使用GCC編譯器(以Visual Studio為IDE)或使用與該固件所有以前版本相同的編譯器最為有用。 我從您提供的答案中學到了很多東西。
謝謝!
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.