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, попробовал использовать макрос, и это сработало отлично... Я начинаю думать, что это еще одна странная проблема затмения.

Может ли кто - нибудь пролить свет на проблему, которая у меня возникла?
1 4

1 ответ:

Решено. Каким-то образом моя папка с общим кодом имела другую настройку сборки, чем другие папки в моем проекте, и флаг-mcpu отсутствовал. Чтобы сбросить конфигурацию сборки до значения по умолчанию:

Щелкните правой кнопкой мыши папку - > конфигурации ресурсов - > сброс к умолчанию