* * * *

Privacy Policy

Blog italiano

Clicca qui se vuoi andare al blog italiano su Lazarus e il pascal.

Forum ufficiale

Se non siete riusciti a reperire l'informazione che cercavate nei nostri articoli o sul nostro forum vi consiglio di visitare il
Forum ufficiale di Lazarus in lingua inglese.

Lazarus 1.0

Trascinare un file nel programma
DB concetti fondamentali e ZeosLib
Recuperare codice HTML da pagina web
Mandare mail con Lazarus
Stabilire il sistema operativo
Esempio lista in pascal
File INI
Codice di attivazione
Realizzare programmi multilingua
Lavorare con le directory
Utilizzare Unità esterne
TTreeView
TTreeview e Menu
Generare controlli RUN-TIME
LazReport, PDF ed immagini
Intercettare tasti premuti
Ampliare Lazarus
Lazarus e la crittografia
System Tray con Lazarus
UIB: Unified Interbase
Il file: questo sconosciuto
Conferma di chiusura di un applicazione
Liste e puntatori
Overload di funzioni
Funzioni a parametri variabili
Proprietà
Conversione numerica
TImage su Form e Panel
Indy gestiore server FTP lato Client
PopUpMenu sotto Pulsante (TSpeedButton)
Direttiva $macro
Toolbar
Evidenziare voci TreeView
Visualizzare un file Html esterno
StatusBar - aggirare l'errore variabile duplicata
Da DataSource a Excel
Le permutazioni
Brute force
Indy 10 - Invio email con allegati
La gestione degli errori in Lazarus
Pascal Script
Linux + Zeos + Firebird
Dataset virtuale
Overload di operatori
Lavorare con file in formato JSON con Lazarus
Zeos ... dietro le quinte (prima parte)
Disporre le finestre in un blocco unico (come Delphi)
Aspetto retrò (Cmd Line)
Lazarus 1.0
Come interfacciare periferica twain
Ubuntu - aggiornare free pascal e lazarus
fpcup: installazioni parallele di lazarus e fpc
Free Pascal e Lazarus sul Raspberry Pi
Cifratura: breve guida all'uso dell'algoritmo BlowFish con lazarus e free pascal.
Creare un server multithread
guida all'installazione di fpc trunk da subversion in linux gentoo
Indice
DB concetti fondamentali e connessioni standard
Advanced Record Syntax
DB concetti fondamentali e DBGrid
DB concetti fondamentali e TDBEdit, TDBMemo e TDBText
Advanced Record Syntax: un esempio pratico
Superclasse form base per programmi gestionali (e non)
Superclasse form base per programmi gestionali (e non) #2 - log, exception call stack, application toolbox
Superclasse form base per programmi gestionali (e non) #3 - traduzione delle form
Superclasse form base per programmi gestionali (e non) #4 - wait animation
Un dialog per la connessione al database:TfmSimpleDbConnectionDialog
Installare lazarus su mac osx sierra
immagine docker per lavorare con lazarus e free pascal
TDD o Test-Driven Development
Benvenuto! Effettua l'accesso oppure registrati.
Maggio 05, 2024, 10:07:17 pm

Inserisci il nome utente, la password e la durata della sessione.

520 Visitatori, 0 Utenti

Autore Topic: Classi e numerosità dei metodi  (Letto 4228 volte)

Stilgar

  • Global Moderator
  • Hero Member
  • *****
  • Post: 2382
  • Karma: +10/-0
Classi e numerosità dei metodi
« il: Luglio 31, 2016, 04:01:40 pm »
Ciao.
  sapete se esiste un limite al numero di metodi che può avere una classe?

Il compilatore mi sta dando una serie di errori "incomprensibili".
Ho dichiarato più di 111 metodi in modo automatico (partendo da un pattern di generazione). Ma al metodo che inizia per "call_elpm", all'interno dell'implementazione, mi dice che non trova la dichiarazione.
La cosa "simpatica" è che lazarus mi permette di navigare tutti i metodi...

Non riesco a trovare nella documentazione se c'è un limite :(

Stilgar
Al mondo ci sono 10 tipi di persone ... chi capisce il binario e chi no.

xinyiman

  • Administrator
  • Hero Member
  • *****
  • Post: 3249
  • Karma: +12/-0
Re:Classi e numerosità dei metodi
« Risposta #1 il: Luglio 31, 2016, 04:42:57 pm »
Bella domanda, io in passato ho scritto classi con molti metodi e non mi ha mai dato quel problema. Ma non saprei se ho mai superato i 111. Hai provato a commentarne 11 e vedere come si comporta?
Ieri è passato, domani è futuro, oggi è un dono...

SB

  • Scrittore
  • Sr. Member
  • *****
  • Post: 283
  • Karma: +1/-0
Re:Classi e numerosità dei metodi
« Risposta #2 il: Agosto 01, 2016, 08:08:00 am »
Scusa se lo chiedo, ma, visto che generi il codice in automatico, hai controllato che non ci siano errori di sintassi tipo un end mancante o metodi annidati? L'IDE potrebbe mascherarti la gerarchia dei metodi.

Stilgar

  • Global Moderator
  • Hero Member
  • *****
  • Post: 2382
  • Karma: +10/-0
Re:Classi e numerosità dei metodi
« Risposta #3 il: Agosto 01, 2016, 11:02:32 am »
Ciao.
Il codice generato(al momento) è limitato alla definizione dei metodi. Definizione e implementazione vuota.
Tenendo conto che parte a compilare senza rogne i metodi add/adc... fino al metodo elpm (sono istruzioni assembly).
Mi aspetterei che il compilatore mi prendesse a legnate già al primo metodo.
Sta sera posto pezzi di codice così vediamo quanto stordito sono 😊

Stilgar
Al mondo ci sono 10 tipi di persone ... chi capisce il binario e chi no.

Stilgar

  • Global Moderator
  • Hero Member
  • *****
  • Post: 2382
  • Karma: +10/-0
Re:Classi e numerosità dei metodi
« Risposta #4 il: Agosto 01, 2016, 11:23:18 am »
Codice: [Seleziona]
unit Microcontroller;

{$mode objfpc}{$H+}

interface

uses
  Classes, SysUtils, atmega328_types, StreamUtils, MicroControllerConstants,
  MicroControllerTypes;

type
  TMicroControllerMethod = procedure of object;
  TMicroControllerMethodTable = array [UInt16] of TMicroControllerMethod;
  { TMicroControllerATMEL }

  TMicroControllerATMEL = class
  private
    function GetPORT(idx: UInt8): UInt8;
    function GetRR(idx: UInt8): UInt8;
    function GetXPORT(idx: UInt8): UInt8;
    procedure SetPORT(idx: UInt8; AValue: UInt8);
    procedure SetRR(idx: UInt8; AValue: UInt8);
    procedure SetXPORT(idx: UInt8; AValue: UInt8);
  protected
    FDecodeTable: TMicroControllerMethodTable;
    fOnBoardMemory: UInt64;
    FProgramMemorySpace: PInt8;
    FSRAMDataMemory: PInt8;
    FEPROM: PInt8;
    FProgramCounter: UInt64;
    FPause: boolean;
    FSREG: UInt8;
  protected
    {$I './inc/method_declaration.inc'}
  protected
    procedure initDecodeTable;
    function fetchIstruction: UInt16;
    function decodeIstruction(opCode: UInt16): TMicroControllerMethod;
  public
    constructor Create;
    procedure FlushMemory(memory: PInt8; memorySize: UInt64);
    procedure run;
    property R[idx: UInt8]: UInt8 read GetRR write SetRR;
    property PORT[idx: UInt8]: UInt8 read GetPORT write SetPORT;
    property XPORT[idx: UInt8]: UInt8 read GetXPORT write SetXPORT;
  end;

implementation

{ TMicroControllerATMEL }

function TMicroControllerATMEL.GetPORT(idx: UInt8): UInt8;
begin
  Result := FSRAMDataMemory[idx and $1F];
end;

function TMicroControllerATMEL.GetRR(idx: UInt8): UInt8;
begin
  Result := FSRAMDataMemory[idx and $5F];
end;

function TMicroControllerATMEL.GetXPORT(idx: UInt8): UInt8;
begin
  Result := FSRAMDataMemory[idx and $FF];
end;

procedure TMicroControllerATMEL.SetPORT(idx: UInt8; AValue: UInt8);
begin
  FSRAMDataMemory[idx and $FF] := aValue;
end;

procedure TMicroControllerATMEL.SetRR(idx: UInt8; AValue: UInt8);
begin
  FSRAMDataMemory[idx and $1F] := aValue;
end;

procedure TMicroControllerATMEL.SetXPORT(idx: UInt8; AValue: UInt8);
begin
  FSRAMDataMemory[idx and $FF] := aValue;
end;

procedure TMicroControllerATMEL.initDecodeTable;
var
  index: word;
begin
  for index := low(UInt16) to high(UInt16) do
  begin
    FDecodeTable[index] := @call_nop;
    case index of
    {$i './inc/decode_instructions.inc'}
    end;
  end;
end;

function TMicroControllerATMEL.fetchIstruction: UInt16;
begin
  if (FProgramCounter > fOnBoardMemory) then
    raise EOutOfMemory.Create('Program Counter gone out from memory');
  Result := FEPROM[FProgramCounter];
end;

function TMicroControllerATMEL.decodeIstruction(opCode: UInt16): TMicroControllerMethod;
begin
  Result := FDecodeTable[opCode];
end;

constructor TMicroControllerATMEL.Create;
begin
  initDecodeTable;
  FProgramCounter := 0;
  fOnBoardMemory := 32 * KB;
  FPause := False;
  Getmem(FProgramMemorySpace, 16 * KB);
  Getmem(FSRAMDataMemory, $08FF);
  Getmem(FEPROM, fOnBoardMemory);
  FillWord(FEPROM^, fOnBoardMemory, $00);
end;

procedure TMicroControllerATMEL.FlushMemory(memory: PInt8; memorySize: UInt64);
begin
  if (memorySize > $3FFF) then
    raise EOutOfMemory.Create('Flush Memory Size is great than processor memory');
  Move(memory, FProgramMemorySpace, memorySize);
end;

procedure TMicroControllerATMEL.run;
var
  opcode: Int16;
begin
  while True do
  begin
    if (FPause) then
      continue;
    opcode := fetchIstruction;
    decodeIstruction(opcode);
  end;
end;

{$I './inc/nop.inc'}
{$I './inc/add.inc'}
{$I './inc/adc.inc'}
{$I './inc/and.inc'}
{$I './inc/andi.inc'}
{$I './inc/bclr.inc'}
{$I './inc/asr.inc'}
{$I './inc/adiw.inc'}
{$I './inc/brbs.inc'}
{$I './inc/brcc.inc'}
{$I './inc/brbc.inc'}
{$I './inc/bld.inc'}
{$I './inc/brcs.inc'}
{$I './inc/break.inc'}
{$I './inc/breq.inc'}
{$I './inc/brge.inc'}
{$I './inc/brhc.inc'}
{$I './inc/brhs.inc'}
{$I './inc/brid.inc'}
{$I './inc/brie.inc'}
{$I './inc/brlo.inc'}
{$I './inc/brlt.inc'}
{$I './inc/brmi.inc'}
{$I './inc/brne.inc'}
{$I './inc/brpl.inc'}
{$I './inc/brsh.inc'}
{$I './inc/brtc.inc'}
{$I './inc/brts.inc'}
{$I './inc/brvc.inc'}
{$I './inc/brvs.inc'}
{$I './inc/bset.inc'}
{$I './inc/bst.inc'}
{$I './inc/call.inc'}
{$I './inc/cbi.inc'}
{$I './inc/clc.inc'}
{$I './inc/clh.inc'}
{$I './inc/cli.inc'}
{$I './inc/cln.inc'}
{$I './inc/clr.inc'}
{$I './inc/cls.inc'}
{$I './inc/clt.inc'}
{$I './inc/clv.inc'}
{$I './inc/clz.inc'}
{$I './inc/com.inc'}
{$I './inc/cp.inc'}
{$I './inc/cpc.inc'}
{$I './inc/cpi.inc'}
{$I './inc/cpse.inc'}
{$I './inc/dec.inc'}
{$I './inc/eicall.inc'}
{$I './inc/eijmp.inc'}
{$I './inc/elpm.inc'}
{$I './inc/elpm.inc'}
{$I './inc/elpm.inc'}
{$I './inc/eor.inc'}
{$I './inc/fmul.inc'}
{$I './inc/fmuls.inc'}
{$I './inc/fmulsu.inc'}
{$I './inc/icall.inc'}
{$I './inc/ijmp.inc'}
{$I './inc/in.inc'}
{$I './inc/inc.inc'}
{$I './inc/jmp.inc'}
{$I './inc/ld.inc'}
{$I './inc/ld.inc'}
{$I './inc/ld.inc'}
{$I './inc/ld.inc'}
{$I './inc/ld.inc'}
{$I './inc/ld.inc'}
{$I './inc/ld.inc'}
{$I './inc/ld.inc'}
{$I './inc/ld.inc'}
{$I './inc/ld.inc'}
{$I './inc/ld.inc'}
{$I './inc/ldi.inc'}
{$I './inc/lds.inc'}
{$I './inc/lpm.inc'}
{$I './inc/lpm.inc'}
{$I './inc/lpm.inc'}
{$I './inc/lsl.inc'}
{$I './inc/lsr.inc'}
{$I './inc/mov.inc'}
{$I './inc/movw.inc'}
{$I './inc/mul.inc'}
{$I './inc/muls.inc'}
{$I './inc/mulsu.inc'}
{$I './inc/neg.inc'}
{$I './inc/nop.inc'}
{$I './inc/or.inc'}
{$I './inc/ori.inc'}
{$I './inc/out.inc'}
{$I './inc/pop.inc'}
{$I './inc/push.inc'}
{$I './inc/rcall.inc'}
{$I './inc/ret.inc'}
{$I './inc/reti.inc'}
{$I './inc/rjmp.inc'}
{$I './inc/rol.inc'}
{$I './inc/ror.inc'}
{$I './inc/sbc.inc'}
{$I './inc/sbci.inc'}
{$I './inc/sbi.inc'}
{$I './inc/sbic.inc'}
{$I './inc/sbis.inc'}
{$I './inc/sbiw.inc'}
{$I './inc/sbr.inc'}
{$I './inc/sbrc.inc'}
{$I './inc/sbrs.inc'}
{$I './inc/sec.inc'}
{$I './inc/seh.inc'}
{$I './inc/sei.inc'}
{$I './inc/sen.inc'}
{$I './inc/ser.inc'}
{$I './inc/ses.inc'}
{$I './inc/set.inc'}
{$I './inc/sev.inc'}
{$I './inc/sez.inc'}
{$I './inc/sleep.inc'}
{$I './inc/spm.inc'}
{$I './inc/st.inc'}
{$I './inc/st.inc'}
{$I './inc/st.inc'}
{$I './inc/st.inc'}
{$I './inc/st.inc'}
{$I './inc/st.inc'}
{$I './inc/st.inc'}
{$I './inc/st.inc'}
{$I './inc/st.inc'}
{$I './inc/st.inc'}
{$I './inc/st.inc'}
{$I './inc/sts.inc'}
{$I './inc/sub.inc'}
{$I './inc/subi.inc'}
{$I './inc/swap.inc'}
{$I './inc/tst.inc'}
{$I './inc/wdr.inc'}
end.

Codice: [Seleziona]
procedure call_adc; virtual;
procedure call_add; virtual;
procedure call_adiw; virtual;
procedure call_and; virtual;
procedure call_andi; virtual;
procedure call_asr; virtual;
procedure call_bclr; virtual;
procedure call_bld; virtual;
procedure call_brbc; virtual;
procedure call_brbs; virtual;
procedure call_brcc; virtual;
procedure call_brcs; virtual;
procedure call_break; virtual;
procedure call_breq; virtual;
procedure call_brge; virtual;
procedure call_brhc; virtual;
procedure call_brhs; virtual;
procedure call_brid; virtual;
procedure call_brie; virtual;
procedure call_brlo; virtual;
procedure call_brlt; virtual;
procedure call_brmi; virtual;
procedure call_brne; virtual;
procedure call_brpl; virtual;
procedure call_brsh; virtual;
procedure call_brtc; virtual;
procedure call_brts; virtual;
procedure call_brvc; virtual;
procedure call_brvs; virtual;
procedure call_bset; virtual;
procedure call_bst; virtual;
procedure call_call; virtual;
procedure call_cbi; virtual;
procedure call_clc; virtual;
procedure call_clh; virtual;
procedure call_cli; virtual;
procedure call_cln; virtual;
procedure call_clr; virtual;
procedure call_cls; virtual;
procedure call_clt; virtual;
procedure call_clv; virtual;
procedure call_clz; virtual;
procedure call_com; virtual;
procedure call_cp; virtual;
procedure call_cpc; virtual;
procedure call_cpi; virtual;
procedure call_cpse; virtual;
procedure call_dec; virtual;
procedure call_eicall; virtual;
procedure call_eijmp; virtual;
procedure call_elpm; virtual;
procedure call_eor; virtual;
procedure call_fmul; virtual;
procedure call_fmuls; virtual;
procedure call_fmulsu; virtual;
procedure call_icall; virtual;
procedure call_ijmp; virtual;
procedure call_in; virtual;
procedure call_inc; virtual;
procedure call_jmp; virtual;
procedure call_ld; virtual;
procedure call_ldi; virtual;
procedure call_lds; virtual;
procedure call_lpm; virtual;
procedure call_lsl; virtual;
procedure call_lsr; virtual;
procedure call_mov; virtual;
procedure call_movw; virtual;
procedure call_mul; virtual;
procedure call_muls; virtual;
procedure call_mulsu; virtual;
procedure call_neg; virtual;
procedure call_nop; virtual;
procedure call_or; virtual;
procedure call_ori; virtual;
procedure call_out; virtual;
procedure call_pop; virtual;
procedure call_push; virtual;
procedure call_rcall; virtual;
procedure call_ret; virtual;
procedure call_reti; virtual;
procedure call_rjmp; virtual;
procedure call_rol; virtual;
procedure call_ror; virtual;
procedure call_sbc; virtual;
procedure call_sbci; virtual;
procedure call_sbi; virtual;
procedure call_sbic; virtual;
procedure call_sbis; virtual;
procedure call_sbiw; virtual;
procedure call_sbr; virtual;
procedure call_sbrc; virtual;
procedure call_sbrs; virtual;
procedure call_sec; virtual;
procedure call_seh; virtual;
procedure call_sei; virtual;
procedure call_sen; virtual;
procedure call_ser; virtual;
procedure call_ses; virtual;
procedure call_set; virtual;
procedure call_sev; virtual;
procedure call_sez; virtual;
procedure call_sleep; virtual;
procedure call_spm; virtual;
procedure call_st; virtual;
procedure call_sts; virtual;
procedure call_sub; virtual;
procedure call_subi; virtual;
procedure call_swap; virtual;
procedure call_tst; virtual;
procedure call_wdr; virtual;




Codice: [Seleziona]

procedure TMicroControllerATMEL.call_nop;
Begin
  inc(fProgramCounter,  1);
End;       



procedure TMicroControllerATMEL.call_add;
Begin
  inc(fProgramCounter,  1);
End; 


Codice: [Seleziona]

procedure TMicroControllerATMEL.call_elpm;
Begin
  inc(fProgramCounter,  1);
End;       




Errori in compilazione:

Compila il progetto, Destinazione: C:\lavoro\lazarus\projects\attuali\Processor\bin\i386-win32\ATmega328_Emu.exe: Codice di uscita 1, Errori: 50, suggerimenti: 2
Hint: Start of reading config file C:\programmi\lazarus1.6\fpc\3.0.0\bin\i386-win32\fpc.cfg
Hint: End of reading config file C:\programmi\lazarus1.6\fpc\3.0.0\bin\i386-win32\fpc.cfg
elpm.inc(1,33) Error: overloaded functions have the same parameter list
elpm.inc(1,33) Error: Found declaration: call_elpm;
elpm.inc(1,33) Error: function header doesn't match any method of this class "call_elpm;"
elpm.inc(1,33) Error: Found declaration: call_elpm;
elpm.inc(1,33) Error: overloaded functions have the same parameter list
elpm.inc(1,33) Error: Found declaration: call_elpm;
elpm.inc(1,33) Error: Found declaration: call_elpm;
elpm.inc(1,33) Error: function header doesn't match any method of this class "call_elpm;"
elpm.inc(1,33) Error: Found declaration: call_elpm;
elpm.inc(1,33) Error: Found declaration: call_elpm;
ld.inc(1,33) Error: overloaded functions have the same parameter list
ld.inc(1,33) Error: Found declaration: call_ld;
ld.inc(1,33) Error: function header doesn't match any method of this class "call_ld;"
ld.inc(1,33) Error: Found declaration: call_ld;
ld.inc(1,33) Error: overloaded functions have the same parameter list
ld.inc(1,33) Error: Found declaration: call_ld;
ld.inc(1,33) Error: Found declaration: call_ld;
ld.inc(1,33) Error: function header doesn't match any method of this class "call_ld;"
ld.inc(1,33) Error: Found declaration: call_ld;
ld.inc(1,33) Error: Found declaration: call_ld;
ld.inc(1,33) Error: overloaded functions have the same parameter list
ld.inc(1,33) Error: Found declaration: call_ld;
ld.inc(1,33) Error: Found declaration: call_ld;
ld.inc(1,33) Error: Found declaration: call_ld;
ld.inc(1,33) Error: function header doesn't match any method of this class "call_ld;"
ld.inc(1,33) Error: Found declaration: call_ld;
ld.inc(1,33) Error: Found declaration: call_ld;
ld.inc(1,33) Error: Found declaration: call_ld;
ld.inc(1,33) Error: overloaded functions have the same parameter list
ld.inc(1,33) Error: Found declaration: call_ld;
ld.inc(1,33) Error: Found declaration: call_ld;
ld.inc(1,33) Error: Found declaration: call_ld;
ld.inc(1,33) Error: Found declaration: call_ld;
ld.inc(1,33) Error: function header doesn't match any method of this class "call_ld;"
ld.inc(1,33) Error: Found declaration: call_ld;
ld.inc(1,33) Error: Found declaration: call_ld;
ld.inc(1,33) Error: Found declaration: call_ld;
ld.inc(1,33) Error: Found declaration: call_ld;
ld.inc(1,33) Error: overloaded functions have the same parameter list
ld.inc(1,33) Error: Found declaration: call_ld;
ld.inc(1,33) Error: Found declaration: call_ld;
ld.inc(1,33) Error: Found declaration: call_ld;
ld.inc(1,33) Error: Found declaration: call_ld;
ld.inc(1,33) Error: Found declaration: call_ld;
ld.inc(1,33) Error: function header doesn't match any method of this class "call_ld;"
ld.inc(1,33) Error: Found declaration: call_ld;
ld.inc(1,33) Error: Found declaration: call_ld;
ld.inc(1,33) Error: Found declaration: call_ld;
ld.inc(1,33) Error: Found declaration: call_ld;
ld.inc(1,33) Error: Found declaration: call_ld;
Al mondo ci sono 10 tipi di persone ... chi capisce il binario e chi no.

Stilgar

  • Global Moderator
  • Hero Member
  • *****
  • Post: 2382
  • Karma: +10/-0
Re:Classi e numerosità dei metodi
« Risposta #5 il: Agosto 01, 2016, 11:29:11 am »
Risolto ....
Sono stordito io :D

Stilgar
Al mondo ci sono 10 tipi di persone ... chi capisce il binario e chi no.

xinyiman

  • Administrator
  • Hero Member
  • *****
  • Post: 3249
  • Karma: +12/-0
Re:Classi e numerosità dei metodi
« Risposta #6 il: Agosto 01, 2016, 12:08:45 pm »
Bene ma non benissimo  ;D
Ieri è passato, domani è futuro, oggi è un dono...

 

Recenti

How To

Utenti
Stats
  • Post in totale: 18800
  • Topic in totale: 2239
  • Online Today: 524
  • Online Ever: 900
  • (Gennaio 21, 2020, 08:17:49 pm)
Utenti Online
Users: 0
Guests: 520
Total: 520

Disclaimer:

Questo blog non rappresenta una testata giornalistica poiché viene aggiornato senza alcuna periodicità. Non può pertanto considerarsi un prodotto editoriale ai sensi della legge n. 62/2001.