CPSID i инструкция по сборке не поддерживается Cortex M0
Я разрабатываю код для Cortex M0, используя FreeRTOS и eclipse с плагином AC6. В конце моих задач я использую assert, чтобы определить, является ли водяной знак моей задачи больше, чем указанный размер задачи. Макрос, который я использую для моего assert выглядит следующим образом:
#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 " )
Мне кажется странным, что мой компилятор не жалуется на мой другой макрос, но с этим он жалуется. Кроме того, я попытался использовать мой HMI_DBG_ASSERT в .c-файл, в котором вызывается мой CMN_DBG_ASSERT, и я получаю ту же ошибку. Я убедился, что мой код включает файл правильно и мой путь включения в eclipse указан.
Cortex-M wiki говорит, что "CPSIE и CPSID также не существуют, потому что набор команд ARM отсутствует в Cortex-M. другие инструкции CPS все еще существуют в Cortex-M."
На веб-сайте ARM есть спецификация CPSIE и CPSID в их документации для Cortex-M0:Http://infocenter.arm.com/help/index.jsp?topic=/com.arm.doc.dui0497a/BABHBAAB.html
В любом случае, макрос был вызван раньше и это работало нормально, просто очень странно, что мой компилятор жалуется только сейчас. Мой коллега, использующий IAR Cortex-M edition, попробовал использовать макрос, и это сработало отлично... Я начинаю думать, что это еще одна странная проблема затмения.
Может ли кто - нибудь пролить свет на проблему, которая у меня возникла?