【发布时间】:2018-03-28 14:52:33
【问题描述】:
我有一个编译得很好的旧代码(也是 NXP micro 的 gcc,不记得是哪个版本)
#define TIME_CONSTANT 250,mSec
if (SysTimerOnTime(tmr, TIME_CONSTANT))
{
}
现在我尝试对 ESP8266 做同样的事情,将 gcc 用于 Xtensa
xtensa-lx106-elf-gcc.exe (GCC) 5.2.0
Copyright (C) 2015 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
我正在使用 -std=c99(因为一些内联 asm)
投诉是关于在 SysTimerOnTime 宏中传递 2 个参数,需要 3。所以如果我使用:
if (SysTimerOnTime(tmr, 250, mSec))
会正常工作。
会有什么问题?
我很肯定 LpcXpresso 在 LpcXpresso 中运行良好(也是 gcc),但是我现在无法测试,因为不再安装工具链。
宏会是这样的
#define SysTimerOnTime(t,v,unit) (t.Enable && (Now()-t.Value) > unit(v))
似乎双重间接起到了作用。也许 LPCXpresso 使用了较旧的编译器。没关系,这行得通,谢谢 Jonathan Leffler
#define TIME_CONSTANT 250,mSec
#define SysTimerOnTime_(t,v,unit) (t.Enable && (Now()-t.Value) > unit(v))
#define SysTimerOnTimeX(x) x
#define SysTimerOnTime(tmr, con) SysTimerOnTimeX(SysTimerOnTime_(tmr, con))
【问题讨论】:
-
...
SysTimerOnTime的定义可能与此处相关... -
这无关紧要,我只是说效果很好。但在这里:) 一定是编译器问题或标准......我想不通。
-
SysTimerOnTime是一个宏这一事实与您的问题 100% 相关。不清楚的是为什么以前的代码可以正常工作。 -
您似乎已经得到了很好的答案,但以后在提出此类问题时,请始终包含错误消息的完整且未经编辑的文本。跨度>