微芯片MPLAB X IDE v2.15“无法为此表达式生成代码”

时间:2014-09-09 23:16:40

标签: ide microcontroller microchip mplab

我正在尝试编译一个简单的片段代码,但我遇到了一个错误“无法为此表达式生成代码”。 我改编自“http://www.barrysoft.it/blog/midi-with-pic-ausart.html

的代码

有人可以告诉我这个问题吗?

MPLAB X IDE v2.15 xc8 v1.32

midi.c:

 void midi_init(void)
 {
 /* MIDI uses 31250 baud/s serial speed */
 uart_init(19, 1, 0, 0 );        //<--- 
 }

midi.c:31:error:(712)无法为此表达式生成代码

uart.c:

 void uart_init(unsigned char spbrg, unsigned bit brgh, unsigned bit sync, unsigned bit parity)
 {

    // Setup the baud rate
    SPBRG = spbrg;

 // High speed baud rate
 BRGH = brgh;        ////

 // Synch or Async
 SYNC = sync;        ////

 // 8bit transmission
 TX9 = parity;        ////

 // Enable serial output
 SPEN = 1;

 // Enable UART out
 TXEN = 1;
 }

uart.c:29:错误:(712)无法为此表达式生成代码

uart.c:32:错误:(712)无法为此表达式生成代码

uart.c:35:错误:(712)无法为此表达式生成代码

uart.h:

void uart_init(unsigned char spbrg, unsigned bit brgh,unsigned bit sync,unsigned bit parity);

无法解析标识符位,此接缝是MPLAB IDE错误,可以关闭。

1 个答案:

答案 0 :(得分:2)

这可能是编译器如何处理低于处理器原生宽度的数据的问题。

一个简单的解决方法是使用宏而不是函数。这是有效的,因为你让编译器处理它认为合适的类型转换和文字数据,而不是强制它将位变量提交到内存位置(对于函数调用)。

在uart.h中:

#define uart_init( spbrg, brgh, sync, parity ) \
    SPBRG = spbrg;\
    BRGH = brgh;\
    SYNC = sync;\
    TX9 = parity;\
    SPEN = 1;\
    TXEN = 1

*请注意,我故意遗漏了最后一行&#39;;&#39;这样可以像函数一样调用宏。

在midi.c:没有变化......

uart_init(19, 1, 0, 0 );