出现 "Type alt_up_character_lcd_dev could not be resolved" 错误

Getting an "Type alt_up_character_lcd_dev could not be resolved" error

数周以来,我一直在尝试使用 Nios 处理器和 DE10-Lite 板在 LCD 屏幕上显示任何内容。我终于找到了一个可能有帮助的代码,但是我一直无法摆脱这个错误消息,我找到的代码是

#include <string.h>
#include <system.h>
#include <altera_up_avalon_character_lcd.h>


int main(void)
{
 alt_up_character_lcd_dev * char_lcd_dev;

// open the Character LCD port
char_lcd_dev = alt_up_character_lcd_open_dev ("/dev/character_lcd_0");

if ( char_lcd_dev == NULL)
alt_printf ("Error: could not open character LCD device\n");
else
alt_printf ("Opened character LCD device\n");

/* Initialize the character display */
alt_up_character_lcd_init (char_lcd_dev);

/* Write "Welcome to" in the first row */
alt_up_character_lcd_string(char_lcd_dev, "Welcome to");

/* Write "the DE2 board" in the second row */
char second_row[] = "the DE10 Lite";
alt_up_character_lcd_set_cursor_pos(char_lcd_dev, 0, 1);
alt_up_character_lcd_string(char_lcd_dev, second_row);
}

错误在 int main(void) 写 alt_up_character_lcd_dev * char_lcd_dev;

之后的第二行

我使用的是 DE10-Lite 板、用于连接的平台设计器和 16x2 LCD OSEPP 屏幕。

如何修复此错误?

header 中,typedefstruct 标签和 typedef 别名使用相同的名称 (alt_up_character_lcd_dev)。

我的假设是您的编译器对此感到困惑。 (但是 gcc 没有这个问题)

要修复它,

struct alt_up_character_lcd_dev* char_lcd_dev;

可能会有帮助。

这不是编译器错误;它是来自您的 C 语言感知 IDE 或代码编辑器 (大概是基于 Eclipse 的?)的消息,它显然是混乱的(而且是错误的)。您可以忽略它并进行构建,而不管实际的编译器是如何处理它的。毫无疑问,它会构建得很好。

问题是由altera_up_avalon_character_lcd.halt_up_character_lcd_devtypedef引起的:

typedef struct alt_up_character_lcd_dev {
    /// @brief character mode device structure 
    /// @sa Developing Device Drivers for the HAL in Nios II Software Developer's Handbook
    alt_dev dev;
    /// @brief the base address of the device
    unsigned int base;
} alt_up_character_lcd_dev;

请注意,typedef 别名和 struct 标记都是 alt_up_character_lcd_dev,您的代码编辑器对此感到困惑,尽管它是完全有效的。您可以通过多种方式处理“问题”,包括:

  • 忽略它,反正它会编译。
  • 删除结构标签以创建 alt_up_character_lcd_dev 和匿名 struct 的别名:
    typedef struct {
      ...
    } alt_up_character_lcd_dev;
    
  • 忽略类型别名并指定类型 struct alt_up_character_lcd_dev 在任何地方使用它 - 有点“冗长”。