2017-01-16 11 views
-1

을 사용하여 임베디드 8051 코어 용 레거시 코드 ()를 SDCC의 다른 버전과 함께 컴파일했습니다. 그러나, 현재 SDCC는 _naked 규정을 알고하지 않습니다`_naked` : SDCC에서 레거시 8051 (FX2) 코드를 컴파일하려고합니다. 최신 버전으로 넘어갑니다.

delay.c:27: syntax error: token -> '_naked' ; column 21 

static void 
udelay1 (void) _naked 
{ 
    _asm    ; lcall that got us here took 4 bus cycles 
    ret   ; 4 bus cycles 
    _endasm; 
} 

및 다른 사건에 의해 촉발한다.

_naked 실제로는 C 컴파일러에게 "컴파일러에게 C 컴파일러이고 프레임 컨텍스트를 저장해야한다는 사실을 무시하십시오"라고 말하도록되어 있습니다. #define 떨어져 있습니다.

이 문제가 해결 되었습니까? _naked 함수가 사용되는 곳에서 어셈블러를 수동으로 인라인해야합니까? 거기에 CALL에있는 컴파일러를 배신하는 것 같은 느낌, 그리고 타이밍을 바꿀 것입니다.

+0

이 질문을 게시하고 응답 한 지 1 년이 넘은 downvote는 민주적으로 매우 훌륭하지만 아직도 내가 할 수있는 일이 무엇인지 알고 싶습니다. 그래서 저는 의견을 읽고 싶습니다. –

답변

0

_naked은 최신 버전의 SDCC에서 __naked으로 바뀌 었습니다. asm/__asm, at/__at, interrupt, bit, xdata/__…에도 동일하게 적용됩니다.

그래서 정규 표현식 대체 연습에서 밝혀졌습니다.

나는 여전히 링커/ranlib/대부분 ar 문제를 가지고 있으며, CMake는 컴파일러로 사용하도록 지시 한 것을 무시하지만 오 잘.