sdcc 在 keil 中工作的代码上给出语法错误

Posted

技术标签:

【中文标题】sdcc 在 keil 中工作的代码上给出语法错误【英文标题】:sdcc giving syntax error on code that works in keil 【发布时间】:2021-11-26 08:11:14 【问题描述】:

我试图理解这段代码。它在一个教程中,我正在按照教程进行操作,所以我尝试了这段代码。

我使用 sdcc 编译它,但在第 7 列出现语法错误。

本教程显示代码在 keil 中工作。而且我发现你必须用 8051 头文件替换 reg51 头文件。但它仍然在第 7 列出现语法错误。

我不知道问题是什么。我什至无法理解它。

错误,

lcd.c:6: 语法错误:token -> 'rs' ;第 7 栏

#include <8051.h>

#define lcd_data P2

sbit rs=P0^0;
sbit rw=P0^1;
sbit en=P0^2;

void lcd_init();
void cmd(unsigned char a);
void dat(unsigned char b);
void show(unsigned char *s);
void lcd_delay();

void lcd_init()

    cmd(0x38);
    cmd(0x0e);
    cmd(0x01);
    cmd(0x06);
    cmd(0x0c);
    cmd(0x80);


void cmd(unsigned char a)

    lcd_data=a;
    rs=0;
    rw=0;
    en=1;
    lcd_delay();
    en=0;

【问题讨论】:

【参考方案1】:

Keil C51 的编译器有许多非标准的扩展,例如sbit 在您的代码中。在 SDCC 中,您可以使用 C99 标准中的 _Bool 或 __bit__sbit,这 3 个关键字在 SDCC 中是相同的。

在您的情况下,您还必须使用扩展名__at

__bit __at (0x80) rs; /* I/O port 0, bit 0 */

警告:请勿使用~ 切换位,在SDCC 中使用!

b = ~b; /* equivalent to b=1 instead of toggling b */
b = !b; /* toggles b */

更多信息请阅读官方文档:http://sdcc.sourceforge.net/doc/sdccman.pdf

【讨论】:

以上是关于sdcc 在 keil 中工作的代码上给出语法错误的主要内容,如果未能解决你的问题,请参考以下文章

SDCC和Keil之stc89c52资料(纪念51单片机40周年)

SDCC和Keil之stc89c52资料(纪念51单片机40周年)

proteus仿真51流水灯和点阵(心形)

keil5中编写代码时出现语法错误为什么无显示

在 python 3 和 2 中工作的 Unicode 文字

用于在Firefox中工作的网站的Facebook Messenger,而不是Chrome