如何在 8051 中使用 __func__

Posted

技术标签:

【中文标题】如何在 8051 中使用 __func__【英文标题】:How to use __func__ in 8051 【发布时间】:2022-01-17 10:38:16 【问题描述】:

我正在尝试在 8051 项目中使用 __func__ 宏打印函数名称。 但是当我在 Keil 上构建时,它会出现这样的错误:

main.c(50): error C202: '__func__': undefined identifier

有其他类似的宏吗? 请帮我解决。

【问题讨论】:

__func__ 是 C99 功能,因此它依赖于编译器来支持它。与8051无关 8051 是 1980 年代的技术。为其设计的编译器不太可能与标准 C 保持同步。考虑切换到 40 岁以下且大部分已过时的 MCU 内核。 @Lundin 有开源的SDCC,它支持 C99 并为 8051 编译代码。事实上,有更老的 MCU/CPU 有一个活跃的社区,比如 Z80 @phuclv 不过,出于对 2021 年专业产品开发的怀旧之情,需要将考古学和逆向计算区分开来。显然,在业余爱好者的逆向计算环境中使用 8051 和 Z80 并没有错。 【参考方案1】:

正如documentation 所说,Keil C51 编译器不支持这个宏,而且显然没有其他类似的功能:

Cx51 编译器提供以下预定义常量,您可以在预处理器指令和 C 代码中使用这些常量来创建可移植程序。

Constant Description
__C51__ Version number of the compiler (for example, 701 for version 7.01).
__CX51__ Version number of the compiler (for example, 701 for version 7.01).
__DATE__ Date when the compilation was started in ANSI format (month dd yyyy).
__DATE2__ Date when the compilation was started in short form (mm/dd/yy).
__FILE__ Name of the file being compiled.
__LINE__ Current line number in the file being compiled.
__MODEL__ Memory model selected:0 for SMALL,1 for COMPACT,2 for LARGE.
__TIME__ Time when the compilation was started. (Format: hh:mm:ss)
__STDC__ Defined to 1 to indicate full conformance with the ANSI C Standard.

【讨论】:

以上是关于如何在 8051 中使用 __func__的主要内容,如果未能解决你的问题,请参考以下文章

如何解决 LNK2019 未解决的外部 __imp____iob_func

如何让__FILE __,__ func__和__LINE__宏在单行中工作?

如何在 Spritekit 中停止 func update(_ currentTime: TimeInterval)

Lua:如何从_G中提取函数?

iOS中打印系统详细日志

HML_FwLib_8051使用补充说明