2013-10-24 80 views
0

我正在使用帶ARM M0平臺的2011 Q3 ARM GCC編譯器。在我目前的應用程序中,如果我沒有使用優化(使用-O0編譯),我的代碼太大而且不適合。如果我使用任何優化(-O1,-O2,-O3,-Os),則SWITCH CASE語句不起作用。我已驗證此塊內的代碼沒有執行,因爲簡單的GPIO切換操作未通過。當使用GCC Arm編譯器和優化時,Switch Case Statements不工作

我在某處讀到-O1及以上的任何優化都會遇到goto代碼問題。但是,我無法在任何地方找到解決此問題的解決方案。

我也嘗試過使用最新的GCC ARM編譯器,但我的工具與此版本不兼容。

對此事的任何幫助表示讚賞!

+1

編譯器很可能決定你** GPIO **切換是無用的。你用'volatile'嗎? –

+0

請證明一個例子,反彙編語句 –

+0

中的switch語句另外,什麼是「2011 Q3 ARM GCC」? GCC的版本號如4.8.1。您正在使用某種預製版本。你從哪裏得到它的? – unixsmurf

回答

0

嘗試拆分您的源代碼,如下所示:您不想優化的代碼(例如,訪問像GPIO那樣的內存映射區域)以及其餘部分。

用不同的優化級別編譯每個源文件後,您將得到一個帶有「脆弱」代碼的工作版本。

然後,當您要調試代碼時,您將使用一個對象(.o)文件並編譯其餘部分。