2016-08-12 11 views
4

私はFreeRTOSとeclipseをAC6プラグインで使用してCortex M0用のコードを開発しています。私の仕事の終わりに、私は自分の仕事の透かしが指定された仕事の大きさより大きいかどうかを判断するためにアサートを使用しています。CPSID iアセンブリ命令はCortex M0でサポートされていません

#define HMI_DBG_ASSERT(x) if ((x) == 0) {taskDISABLE_INTERRUPTS(); \ 
        HAL_GPIO_WritePin(ASSERT_LED_GPIO_Port, ASSERT_LED_Pin, GPIO_PIN_SET); \ 
        for(;;);} 

私のタスクは次のようになります。:

for(;;) 
{ 
    //some 
    //code 
    uxHighWaterMark = uxTaskGetStackHighWaterMark(NULL); 
    HMI_DBG_ASSERT(uxHighWaterMark >= WDG_STACK_SIZE_WATERMARK_WORD); 
} 

これは、コンパイルして、完璧に動作し、私は私のアサートに使用するマクロはこのようになります!

私はこのマクロを呼び出す
#define CMN_DBG_ASSERT(x) if ((x) == 0) {taskDISABLE_INTERRUPTS(); \ 
        HAL_GPIO_WritePin(ASSERT_LED_GPIO_Port, ASSERT_LED_Pin, GPIO_PIN_SET); \ 
        for(;;);} 

は、私のコンパイラは次のエラーを返します。私の問題は、私は他の開発者と共通のコードに取り組んでいる、と彼は私のものとほぼ同じであるマクロを使用したことです

selected processor does not support `cpsid i' in Thumb mode 

"taskDISABLE_INTERUPTS();"マクロはFreeRTOSで定義されており、以下のアセンブリ命令を呼び出している:

__asm volatile(" cpsid i ") 

私はそれが奇妙な私のコンパイラは私の他のマクロと、それはありませんこの1と文句を言わないことが判明します。また、CMN_DBG_ASSERTが呼び出された.cファイルでHMI_DBG_ASSERTを使用しようとしましたが、同じエラーが発生します。私は自分のコードにファイルが正しく含まれていることを確認し、Eclipse内のインクルージョンパスが指定されていることを確認しました。

Cortex-M wikiによると、「Cortex-MにはARM命令セットがないため、CPSIEとCPSIDも存在しません。他のCPS命令はCortex-Mにはまだ存在します。

ARMのWebサイトのCortex-M0のための彼らのドキュメントのCPSIEおよびCPSIDの仕様持っている:いずれの場合で

http://infocenter.arm.com/help/index.jsp?topic=/com.arm.doc.dui0497a/BABHBAAB.html

を、マクロが前に呼ばれてきた、それがうまく働いた、それは本当にただのです奇妙なことに、私のコンパイラはただ不平を言っています。 IAR Cortex-M版を使用している私の同僚はマクロを使用しようとしましたが、うまくいきました...私は別の奇妙な日食問題を考え始めています。

誰かが私が持っている問題についていくつかの光を当てることができますか?

+0

あなたが機能マクロではなくを使用するすべての理由をデフォルトに>リセット - >リソースの構成 -

右クリックし、フォルダ:デフォルトのビルド構成をリセットするには? – Olaf

+0

これは私の同僚の考えであり、コードを使用しました。私はそれが過去にマクロが働いたのでこの問題の問題の横にあると思う。 –

+0

toochainは何を使用していますか?どのオプションを使用していますか? (私は "AC6 Plugin"が何であるか分かりません) – Notlikethat

答えて

1

解決済み。どういうわけか、共通コードの私のフォルダは、私のプロジェクト内の他のフォルダとは異なるビルド設定を持ち、-mcpuフラグはそこにはありませんでした。良い練習になるよう

関連する問題