Listings e linguaggio C

  • Creatore
    Topic
  • #61368
    Up
    0
    Down
    ::


    Buongiorno,
    ho un piccolo problema nell’inclusione di un listato di codice in linguaggio C utilizzando il pacchetto Listings.

    Questi sono i settaggi:

    `\usepackage{listings}
    \lstset{language=C, basicstyle=\small\ttfamily, tabsize=4}`

    Includendo il file con il comando:

    `\lstinputlisting{Capitoli/CTMU_startup.h}`

    ottengo il seguente errore:

    `l.67 Vread = Vread << 8; ! Extra }, or forgotten $. \egroup l.67 Vread = Vread << 8; ! Extra }, or forgotten $. \egroup l.67 Vread = Vread << 8; (That makes 100 errors; please try again.) ! ==> Fatal error occurred,
    `

    in corrispondenza di questa riga di codice:

    `Vread = Vread << 8;` Non riesco a trovare il motivo dell'errore. Qualche consiglio? Grazie, Fabio

Visualizzazione 7 filoni di risposte
  • Autore
    Risposte
    • #61369
      Up
      0
      Down
      ::

      Buongiorno,
      ho un piccolo problema nell’inclusione di un listato di codice in linguaggio C utilizzando il pacchetto Listings.

      Questi sono i settaggi:

      `\usepackage{listings}
      \lstset{language=C, basicstyle=\small\ttfamily, tabsize=4}`

      Includendo il file con il comando:

      `\lstinputlisting{Capitoli/CTMU_startup.h}`

      ottengo il seguente errore:

      `l.67 Vread = Vread << 8; ! Extra }, or forgotten $. \egroup l.67 Vread = Vread << 8; ! Extra }, or forgotten $. \egroup l.67 Vread = Vread << 8; (That makes 100 errors; please try again.) ! ==> Fatal error occurred,
      `

      in corrispondenza di questa riga di codice:

      `Vread = Vread << 8;` Non riesco a trovare il motivo dell'errore. Qualche consiglio? Grazie, Fabio

      Meglio se mostri l’intero file, l’errore è certamente prima di quella riga.

      Ciao
      Enrico

    • #61370
      Up
      0
      Down
      ::


      Ecco il codice completo:

      `

      #define PRESSED 1
      #define UNPRESSED 0

      #byte xxxxCONH = 0xFB3
      #byte xxxxCONL = 0xFB2
      #byte xxxxICON = 0xFB1
      #byte ANCON0 = 0xF48
      #byte ANCON1 = 0xF49
      #BYTE ADCON1 = 0xFC1
      #BYTE ADCON0 = 0xFC2
      #BYTE PIR1 = 0xF9E
      #BYTE ADRESH = 0xFC4
      #BYTE ADRESL = 0xFC3

      void setup(void)
      { //xxxxCON – xxxx Control register
      xxxxCONH = 0x00; //make sure xxxx is disabled
      xxxxCONL = 0x90;
      //xxxx continues to run when emulator is stopped,xxxx continues
      //to run in idle mode,Time Generation mode disabled, Edges are blocked
      //No edge sequence order, Analog current source not grounded, trigger
      //output disabled, Edge2 polarity = positive level, Edge2 source =
      //source 0, Edge1 polarity = positive level, Edge1 source = source 0,
      //xxxxICON – xxxx Current Control Register
      xxxxICON = 0x01; //0.55uA, Nominal – No Adjustment
      //bit_set (ANCON1, 7);
      /**************************************************************************/
      //Setup AD converter;
      /**************************************************************************/

      setup_adc_ports (NO_ANALOGS);

      bit_clear (ADCON1, 5);
      bit_clear (ADCON1, 4);
      bit_set (ADCON1, 3);
      setup_adc (ADC_CLOCK_DIV_32);

      setup_adc_ports(sAN11 | VSS_VDD);
      set_adc_channel(11);
      bit_set (ADCON0, 0);

      }

      //#use delay(clock=48000000)
      void xxxx_startup(void)
      {
      unsigned int16 OPENSW = 0;
      unsigned int16 Vread = 0;
      int1 switchState;
      int pressed_count, unpressed_count;

      while (TMR1_ov < 69) // FOSC = 48 MHz / 4 3 secondi { setup(); bit_set (xxxxCONH,7); //xxxxCONHbits.xxxxEN = 1; // Enable the xxxx bit_clear (xxxxCONL,0); //xxxxCONLbits.EDG1STAT = 0; // Set Edge status bits to zero bit_clear (xxxxCONL,1); //xxxxCONLbits.EDG2STAT = 0; bit_set (xxxxCONH,1); //xxxxCONHbits.IDISSEN = 1; //drain charge on the circuit delay_us (125); //wait 125us bit_clear (xxxxCONH,1); //xxxxCONHbits.IDISSEN = 0; //end drain of circuit bit_set (xxxxCONL,0); //xxxxCONLbits.EDG1STAT = 1; //Begin charging the circuit //using xxxx current source delay_us (125); //wait for 125us bit_clear (xxxxCONL,0); //xxxxCONLbits.EDG1STAT = 0; //Stop charging circuit //bit_clear (PIR1,6); //PIR1bits.ADIF = 0; //make sure A/D Int not set bit_set (ADCON0,1); //ADCON0bits.GO=1; //and begin A/D conv. while (bit_test(ADCON0,1)); //(!PIR1bits.ADIF); //Wait for A/D convert complete Vread = ADRESH; //Vread = ADRES; //Get the value from the A/D Vread = Vread << 8; Vread = Vread + ADRESL; //printf( "Vread %Lu\n\r",Vread); //Vread = read_adc (); if(!xxxx_once) { OPENSW = 0xC0; output_high (pin_D2); xxxx_once = 1; //fprintf(debug, "Vread %Lu\r\n",Vread); } if(xxxx_once) { if(Vread < (OPENSW - 110)) { switchState = PRESSED; } else if(Vread > OPENSW – 110 + 10)
      {
      switchState = UNPRESSED;
      }

      if (switchState)
      {
      unpressed_count = 0;

      if (pressed_count >= 10)
      {
      output_low (pin_D2);
      prog = 1;
      TMR1_ov = 69;

      }
      else
      pressed_count++;
      }
      else if (!switchState)
      {
      pressed_count = 0;

      if (unpressed_count >= 10)
      {
      output_high (pin_D2);
      }
      else
      unpressed_count++;
      }

      }

      }
      output_low (pin_D2);
      disable_interrupts(INT_TIMER1);
      }

      `

    • #61371
      Up
      0
      Down
      ::

      Ecco il codice completo:

      No: la riga 67 non è come dici. In ogni caso non ottengo alcun errore. Evidentemente c’è qualcos’altro; puoi mostrare il tuo preambolo?

      Ciao
      Enrico

    • #61372
      Up
      0
      Down
      ::


      Certo. Sto utilizzando “Tesi Classica” come modello di base, ma ho apportato alcune modifiche:

      `\documentclass[11pt,% % corpo del font principale
      b5paper,twoside,openright,% % carta B5, fronte-retro
      titlepage,% % frontespzio
      fleqn,% % equazioni allineate a sinistra
      headinclude,,footinclude,% % testatina e piè di pagina
      %mpinclude=true,
      BCOR5mm,% % rilegatura di 5 mm
      numbers=noenddot,% % niente punto dopo il numero delle sezioni
      cleardoublepage=empty,% % pagine vuote senza testatina e piè di pagina
      tablecaptionabove,% % didascalie in cima alle tabelle
      abstracton
      ]{scrreprt} % classe report di KOMA-Script;

      %\usepackage{type1ec}
      \usepackage[T1]{fontenc} % la codifica dei font

      \usepackage[latin1]{inputenc} % imposta la codifica di input;
      % invece di “latin1”, anche “utf8” va bene

      \usepackage{lettrine}

      \usepackage[english,italian]{babel} % per scrivere in italiano e in inglese;
      % l'ultima lingua (l'italiano) è predefinita

      \usepackage{indentfirst} % rientra il primo paragrafo di ogni sezione

      \usepackage{amsmath,amssymb,amsthm} % indispensabili per la matematica
      \usepackage[italian]{varioref} % riferimenti completi della pagina

      \usepackage[style=alphabetic,hyperref,backref]{biblatex}

      \bibliography{Tesi} % la base di dati di biblatex
      \usepackage[babel]{csquotes} % consigliato se si usa biblatex
      \usepackage[tight,italian]{minitoc} % per fare i miniindici
      \usepackage{chngpage,calc} % per impostare i margini del frontespizio
      \usepackage{subfig} % sottofigure, sottotabelle
      \usepackage{lipsum} % genera testo fittizio
      \usepackage{eurosym} % il simbolo dell'euro

      \PassOptionsToPackage{footnote}{acronym}
      \usepackage{classicthesis-ldpkg} % carica molti pacchetti utili a ClassicThesis

      \usepackage[eulerchapternumbers,% % numeri dei capitoli in Euler
      subfig,% % compatibilità con subfig
      beramono,% % Bera Mono come font a spaziatura fissa
      eulermath,% % AMS Euler come font per la matematica
      pdfspacing% % migliora il riempimento di riga con PDFLaTeX
      ]{classicthesis} % lo stile ClassicThesis

      \usepackage[italian]{arsclassica} % modifica alcuni aspetti di ClassicThesis
      \usepackage{tesi} % un pacchetto personale:
      % permette di mantenere ordinato il sorgente
      \usepackage{guit}
      \usepackage[load-configurations=binary]{siunitx}
      \usepackage{rotating}
      \usepackage{colortbl}
      \usepackage{float}
      \usepackage{wrapfig}
      \usepackage{epigraph}
      %\usepackage[odd, a4]{crop}

      \usepackage{listings}
      \lstset{language=Java, numberstyle=\tiny, stepnumber=5, numbersep=8pt, basicstyle=\small\ttfamily}

      \newenvironment{betweenrules} %consente di inserire
      {\par\addvspace{\medskipamount}\hrule\kern\medskipamount} % del testo tra due filetti
      {\par\kern\medskipamount\hrule\addvspace{\medskipamount}} % orizzontali

      %\hypersetup{colorlinks=false}

      \areaset[20mm]{300pt}{630pt}
      \setlength{\marginparwidth}{7em}
      \setlength{\marginparsep}{1em} `

      Nel preambolo, il linguaggio di listings è impostato su Java, all’interno del documento viene poi ridefinito su C, in quanto ho bisogno di inserire del codice in entrambi i linguaggi di programmazione.

      `\lstset{language=C, basicstyle=\small\ttfamily, tabsize=4}`

      Potrebbe essere questo il problema? non ci avevo pensato.

      Grazie,
      Fabio

    • #61373
      Up
      0
      Down
      ::

      Certo. Sto utilizzando “Tesi Classica” come modello di base, ma ho apportato alcune modifiche:

      Nel preambolo, il linguaggio di listings è impostato su Java, all’interno del documento viene poi ridefinito su C, in quanto ho bisogno di inserire del codice in entrambi i linguaggi di programmazione.

      `\lstset{language=C, basicstyle=\small\ttfamily, tabsize=4}`

      Potrebbe essere questo il problema? non ci avevo pensato.

      No, non è questo. A me continua a non dare errori.

      Che c’è in “tesi.sty”? Pare una caccia al tesoro. 🙁

      Ciao
      Enrico

    • #61374
      Up
      0
      Down
      ::


      Questo è tesi.sty; non ho apportato modifiche personali:

      `% ********************************************************************
      % tesi.sty
      % di Lorenzo Pantieri (2011)
      % un pacchetto personale che contiene le impostazioni della tesi
      % ********************************************************************
      \ProvidesPackage{tesi}[2011/14/01 Un pacchetto personale]

      % un ambiente ad hoc per le citazioni
      \newenvironment{citazione}%
      {\begin{quotation}\small\ignorespaces}%
      {\end{quotation}}

      % […] 😉
      \newcommand{\omissis}{[\dots\negthinspace]}

      % indica a LaTeX la cartella dove sono riposte le immagini
      \graphicspath{{Immagini/}}

      % eccezioni all'algoritmo di sillabazione
      \hyphenation{Fortran ma-cro-istru-zio-ne nitro-idrossil-amminico mi-cro-con-trol-ler-based}

      %%%%%%%%%%%%%%
      % Matematica %
      %%%%%%%%%%%%%%

      % comandi per gli insiemi numerici (serve il pacchetto amssymb)
      \newcommand{\numberset}{\mathbb}
      \newcommand{\N}{\numberset{N}}
      \newcommand{\R}{\numberset{R}}

      % un ambiente per i sistemi
      \newenvironment{sistema}%
      {\left\lbrace\begin{array}{@{}l@{}}}%
      {\end{array}\right.}

      % definizioni (serve il pacchetto amsthm)
      \theoremstyle{definition}
      \newtheorem{definizione}{Definizione}

      % teoremi, leggi e decreti (serve il pacchetto amsthm)
      \theoremstyle{plain}
      \newtheorem{teorema}{Teorema}
      \newtheorem{legge}{Legge}
      \newtheorem{decreto}[legge]{Decreto}
      \newtheorem{murphy}{Murphy}[section]

      %%%%%%%%%%%%
      % biblatex %
      %%%%%%%%%%%%

      \defbibheading{bibliography}{%
      \cleardoublepage
      \manualmark
      \refstepcounter{dummy}
      \addcontentsline{toc}{chapter}{\tocEntry{\bibname}}
      \chapter*{\bibname\markboth{\spacedlowsmallcaps{\bibname}}
      {\spacedlowsmallcaps{\bibname}}}}

      %%%%%%%%%
      % altro %
      %%%%%%%%%

      \hypersetup{citecolor=webgreen}
      \hypersetup{pdfstartpage=1}

      `

    • #61375
      Up
      0
      Down
      ::

      Questo è tesi.sty; non ho apportato modifiche personali:

      A questo punto propendo per un carattere “strano” nel tuo file.

      Ciao
      Enrico

    • #61376
      Up
      0
      Down
      ::


      Trovato il problema. 🙂
      Nel titolo del paragrafo che introduce il codice avevo inserito il nome della funzione, che contiene il carattere “_ ” (underscore), utilizzando il comando \lstinline di Listings.

      Ora ho invece eliminato \lstinline ed ho usato il comando

      `\_`

      per inserire il carattere underscore ed ho risolto.

      Grazie per l’aiuto, come sempre. 🙂

      Fabio

Visualizzazione 7 filoni di risposte
  • Devi essere connesso per rispondere a questo topic.

Go to top