definiciones de sbit con SDCC - Error: "el elemento inicializador no es constante"

0

Estoy enfrentando este error cuando intento compilar un programa en C usando el compilador SDCC:

La parte del programa que está causando el error.

include(reg51.h)
define cmdport P3
define dataport P2
define q 100

(following  3 line are causing error.)
sbit at  cmdport^0  rs ;  //register select pin
sbit at  cmdport^1  rw ;  // read write pin
sbit at  cmdport^6  e ;  //enable pin
    
pregunta Zain

2 respuestas

5

Su código no es válido C. Debería verse así:

#include <reg51.h>
#define cmdport P3
#define dataport P2
#define q 100

Para crear sbit definiciones para los bits individuales en P3 (dirección 0xB0), desea:

__sbit __at (0xB0) rs; // P3.0
__sbit __at (0xB1) rw; // P3.1
__sbit __at (0xB6) e;  // P3.6

Sin embargo, si busca en sdcc/includes/mcs51/8051.h encontrará que ya existen definiciones genéricas para P3_0 , etc., que le permiten escribir:

#define rs P3_0
#define rw P3_1
#define e  P3_6

También recomendaría que elija más nombres descriptivos para sus definiciones de bits que rs , rw y e , ya que pueden chocar con nombres de variables.

    
respondido por el Toby Jaffey
0

Supongo que este es un archivo de ensamblaje; es necesario ejecutarlo a través de un ensamblador en lugar del compilador de C

.

Muchos compiladores de C (especialmente los basados en gcc) reconocerán un archivo con un sufijo particular (por ejemplo, .s) y harán lo correcto para usted (otros compiladores no lo harán) si está usando un archivo make que fue escrito para gcc con un compilador diferente puede encontrar que comete este error

    
respondido por el Taniwha

Lea otras preguntas en las etiquetas