2016-08-12 2 views
4

FreeRTOS를 사용하여 Cortex M0 용 코드를 개발하고 AC6 플러그인을 사용하여 Eclipse를 개발하고 있습니다. 내 작업이 끝나면 내 작업의 워터 마크가 지정된 작업 크기보다 큰지 확인하기 위해 어설 션을 사용하고 있습니다. 내 어설 션에 사용하는 매크로는 다음과 같습니다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 ") 

내가 그것을 이상한 내 컴파일러 내 다른 매크로 불평하지 않는 것을 발견하지만 수행이 하나. 또한, 내 CMN_DBG_ASSERT 호출 된 .c 파일에서 내 HMI_DBG_ASSERT 사용하여 시도하고 동일한 오류가 발생합니다. 내 코드가 파일을 올바르게 포함하고 이클립스의 포함 경로가 지정되었는지 확인했습니다.

Cortex-M wiki에 따르면 Cortex-M 위키에서는 ARM 명령어 세트가 Cortex-M에 없기 때문에 "CPSIE 및 CPSID도 존재하지 않는다. 다른 CPS 명령어는 Cortex-M에 여전히 존재한다"고한다.

ARM의 웹 사이트에 대한 자신의 문서에 CPSIE 및 CPSID에 대한 사양을 가지고 코어 텍스을-M0 : 그것은 잘 작동하고, 그냥 정말 전에

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

어떤 경우, 매크로가 호출 된 나의 컴파일러가 지금 불평하고있는 이상한. 내 동료가 IAR Cortex-M 판을 사용하여 매크로를 사용해 보았는데 제대로 작동했다 ... 나는 또 다른 이상한 식생활 문제를 생각하기 시작했다.

아무도 내가 가지고있는 문제에 대해 밝힐 수 있습니까?

+0

기본값으로 재설정? – Olaf

+0

이것은 처음에는 동료의 아이디어 였고 방금 코드를 사용했습니다. 나는 매크로가 과거에 작동했기 때문에이 문제의 쟁점이 있다고 생각한다. –

+0

너는 무엇을 사용하고 있으며, 어떤 옵션을 사용하고 있습니까? (나는 "AC6 Plugin"이 무엇인지 모르겠다.) – Notlikethat

답변

1

해결되었습니다. 어떻게 든 공통 코드가있는 내 폴더에는 프로젝트의 다른 폴더보다 다른 빌드 설정이 있고 -mcpu 플래그는 거기에 없었습니다. 기본값으로 설정 구축 재설정하려면

를 마우스 오른쪽 단추로 클릭하고 폴더를 -> 자원 구성 -> 당신은 같은 기능 매크로 및하지를 사용하는 모든 이유는 좋은 연습이 될 것

관련 문제