2017-01-16 49 views
-1

我有嵌入式8051内核(在cypress FX2中)的遗留代码,使用与其他版本的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

在发帖和回答这个问题一年多后,downvote是民主的非常好,但我仍然想知道我可以做得更好,所以我很乐意阅读评论。 –

回答

0

_naked在更新版本的SDCC中被替换为__naked。同样适用于asm/__asmat/__atinterruptbitxdata/__…

所以,这原来是一个正则表达式替换练习。

我仍然有链接器/ ranlib /主要是ar的问题,CMake忽略我指示它用作编译器,但哦。